Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
SQL Server 2014 (12.x) ile başlayarak, bellek için iyileştirilmiş tablolar veritabanları arası işlemleri desteklemez. Bellek için iyileştirilmiş bir tabloya erişen aynı işlemden veya aynı sorgudan başka bir veritabanına erişemezsiniz. Bir veritabanındaki bir tablodan başka bir veritabanındaki bellek için iyileştirilmiş bir tabloya kolayca veri kopyalayamazsınız.
Tablo değişkenleri işlemsel değildir. Bu nedenle, bellek için iyileştirilmiş tablo değişkenleri veritabanları arası sorgularda kullanılabilir ve bu nedenle verileri bir veritabanından başka bir veritabanındaki bellek için iyileştirilmiş tablolara taşımayı kolaylaştırabilir. İki işlem kullanabilirsiniz. İlk işlemde, uzak tablodaki verileri değişkenine ekleyin. İkinci işlemde, verileri değişkenden yerel bellek için iyileştirilmiş tabloya ekleyin. Bellek optimize edilmiş tablo değişkenleri hakkında daha fazla bilgi için bkz. Bellek optimizasyonunu kullanarak daha hızlı geçici tablo ve tablo değişkeni.
Example
Bu örnekte, bir veritabanındaki verileri farklı bir veritabanındaki bellek için iyileştirilmiş bir tabloya aktarma yöntemi gösterilmektedir.
Test Nesneleri Oluşturma. SQL Server Management Studio'da aşağıdaki Transact-SQL'i yürütün.
USE master; GO SET NOCOUNT ON; -- Create simple database CREATE DATABASE SourceDatabase; ALTER DATABASE SourceDatabase SET RECOVERY SIMPLE; GO -- Create a table and insert a few records USE SourceDatabase; CREATE TABLE SourceDatabase.[dbo].[SourceTable] ( [ID] [int] PRIMARY KEY CLUSTERED, [FirstName] nvarchar(8) ); INSERT [SourceDatabase].[dbo].[SourceTable] VALUES (1, N'Bob'), (2, N'Susan'); GO -- Create a database with a MEMORY_OPTIMIZED_DATA filegroup CREATE DATABASE DestinationDatabase ON PRIMARY ( NAME = N'DestinationDatabase_Data', FILENAME = N'D:\DATA\DestinationDatabase_Data.mdf', SIZE = 8MB), FILEGROUP [DestinationDatabase_mod] CONTAINS MEMORY_OPTIMIZED_DATA DEFAULT ( NAME = N'DestinationDatabase_mod', FILENAME = N'D:\DATA\DestinationDatabase_mod', MAXSIZE = UNLIMITED) LOG ON ( NAME = N'DestinationDatabase_Log', FILENAME = N'D:\LOG\DestinationDatabase_Log.ldf', SIZE = 8MB); ALTER DATABASE DestinationDatabase SET RECOVERY SIMPLE; GO USE DestinationDatabase; GO -- Create a memory-optimized table CREATE TABLE [dbo].[DestTable_InMem] ( [ID] [int] PRIMARY KEY NONCLUSTERED, [FirstName] nvarchar(8) ) WITH ( MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA ); GOVeritabanları arası sorguyu deneme. SQL Server Management Studio'da aşağıdaki Transact-SQL'i yürütün.
INSERT [DestinationDatabase].[dbo].[DestTable_InMem] SELECT * FROM [SourceDatabase].[dbo].[SourceTable]Aşağıdaki hata iletisini almanız gerekir:
Msg 41317, Düzey 16, Durum 5
Bellek için optimize edilmiş tablolara veya yerel olarak derlenmiş modüllere erişen bir kullanıcı işlemi, birden fazla kullanıcı veritabanına veya model veritabanlarına ve msdb'ye erişemez ve ana veritabanına yazamaz.Bellek için iyileştirilmiş bir tablo türü oluşturun. SQL Server Management Studio'da aşağıdaki Transact-SQL'i yürütün.
USE DestinationDatabase; GO CREATE TYPE [dbo].[MemoryType] AS TABLE ( [ID] [int] PRIMARY KEY NONCLUSTERED, [FirstName] nvarchar(8) ) WITH (MEMORY_OPTIMIZED = ON); GOVeritabanları arası sorguyu yeniden deneme. Bu kez kaynak veriler ilk olarak bellek için iyileştirilmiş bir tablo değişkenine aktarılır. Ardından, tale değişkeninden alınan veriler bellek için iyileştirilmiş tabloya aktarılır.
-- Declare table variable utilizing the newly created type - MemoryType DECLARE @InMem dbo.MemoryType; -- Populate table variable INSERT @InMem SELECT * FROM SourceDatabase.[dbo].[SourceTable]; -- Populate the destination memory-optimized table INSERT [DestinationDatabase].[dbo].[DestTable_InMem] SELECT * FROM @InMem; GO
İlgili içerik
- SQL Server'da In-Memory OLTP Özelliklerini benimsemenizi planlama