Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Az SQL Server 2014 -től (12.x) kezdődően a memóriaoptimalizált táblák nem támogatják az adatbázisközi tranzakciókat. Nem férhet hozzá egy másik adatbázishoz ugyanabból a tranzakcióból vagy egy memóriaoptimalizált táblához is hozzáférő lekérdezésből. Nem másolhat egyszerűen adatokat egy adatbázis táblájából egy másik adatbázis memóriaoptimalizált táblájába.
A táblaváltozók nem tranzakciósak. Ezért a memóriaoptimalizált táblaváltozók adatbázisközi lekérdezésekben is használhatók, így megkönnyíthetik az adatok áthelyezését az egyik adatbázisból a másik memóriaoptimalizált tábláiba. Két tranzakciót is használhat. Az első tranzakcióban szúrja be a távoli táblából származó adatokat a változóba. A második tranzakcióban szúrja be az adatokat a helyi memóriaoptimalizált táblába a változóból. A memóriaoptimalizált táblaváltozókkal kapcsolatos további információkért lásd: Gyorsabb ideiglenes tábla- és táblázatváltozó memóriaoptimalizálással.
Example
Ez a példa egy másik adatbázis memóriaoptimalizált táblájába történő adattovábbítási módszert mutat be.
Tesztobjektumok létrehozása. Hajtsa végre a következő Transact-SQL az SQL Server Management Studióban.
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 ); GOAdatbázisközi lekérdezés kísérlete. Hajtsa végre a következő Transact-SQL az SQL Server Management Studióban.
INSERT [DestinationDatabase].[dbo].[DestTable_InMem] SELECT * FROM [SourceDatabase].[dbo].[SourceTable]A következő hibaüzenetet kell kapnia:
Msg 41317, Level 16, State 5
A memóriaoptimalizált táblákhoz vagy natívan lefordított modulokhoz hozzáférő felhasználói tranzakció nem férhet hozzá egynél több felhasználói adatbázishoz, valamint a model és az msdb adatbázisokhoz, és nem írhat a master adatbázisba.Memóriaoptimalizált táblázattípus létrehozása. Hajtsa végre a következő Transact-SQL az SQL Server Management Studióban.
USE DestinationDatabase; GO CREATE TYPE [dbo].[MemoryType] AS TABLE ( [ID] [int] PRIMARY KEY NONCLUSTERED, [FirstName] nvarchar(8) ) WITH (MEMORY_OPTIMIZED = ON); GOPróbálja meg újra az adatbázisközi lekérdezést. Ezúttal a forrásadatok először egy memóriaoptimalizált táblaváltozóba kerülnek át. Ezután a rendszer a meseváltozó adatait a memóriaoptimalizált táblába továbbítja.
-- 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