Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Počínaje SQL Serverem 2014 (12.x) tabulky optimalizované pro paměť nepodporují transakce mezi databázemi. Nelze získat přístup k jiné databázi ze stejné transakce nebo stejného dotazu, který také přistupuje k tabulce optimalizované pro paměť. Data z tabulky v jedné databázi nelze snadno kopírovat do tabulky optimalizované pro paměť v jiné databázi.
Proměnné tabulky nejsou transakční. Proměnné tabulek optimalizované pro paměť je proto možné použít v dotazech napříč databázemi a usnadnit tak přesun dat z jedné databáze do tabulek optimalizovaných pro paměť v jiné. Můžete použít dvě transakce. V první transakci vložte data ze vzdálené tabulky do proměnné. V druhé transakci vložte data z proměnné do místní tabulky optimalizované pro paměť. Další informace o proměnných tabulek optimalizovaných pro paměť naleznete v tématu Rychlejší dočasná tabulka a proměnná tabulky pomocí optimalizace paměti.
Example
Tento příklad ukazuje metodu přenosu dat z jedné databáze do tabulky optimalizované pro paměť v jiné databázi.
Vytvořte testovací objekty. V aplikaci SQL Server Management Studio spusťte následující Transact-SQL.
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 ); GOPokus o dotaz mezi databázemi V aplikaci SQL Server Management Studio spusťte následující Transact-SQL.
INSERT [DestinationDatabase].[dbo].[DestTable_InMem] SELECT * FROM [SourceDatabase].[dbo].[SourceTable]Měla by se zobrazit následující chybová zpráva:
Msg 41317, Level 16, State 5
Transakce uživatele, která přistupuje k tabulkám optimalizovaným pro paměť nebo nativně zkompilovaným modulům, nemá přístup k více než jedné uživatelské databázi nebo modelu databáze a msdb a nemůže zapisovat do hlavní databáze.Vytvořte typ tabulky optimalizovaný pro paměť. V aplikaci SQL Server Management Studio spusťte následující Transact-SQL.
USE DestinationDatabase; GO CREATE TYPE [dbo].[MemoryType] AS TABLE ( [ID] [int] PRIMARY KEY NONCLUSTERED, [FirstName] nvarchar(8) ) WITH (MEMORY_OPTIMIZED = ON); GOZkuste znovu dotaz mezi databázemi. Tentokrát se zdrojová data nejprve přenesou do proměnné tabulky optimalizované pro paměť. Data z proměnné příběhu se pak přenesou do tabulky optimalizované pro paměť.
-- 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
Viz také
Migrace na In-Memory OLTP