메모리 내 OLTP에 대한 SQL Server 관리 개체 지원SQL Server Management Objects Support for In-Memory OLTP

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse 이 항목에서는 메모리 내 OLTP를 지원하는 SMO(SQL Server 관리 개체) 항목을 설명합니다. This topic describes items in SQL Server Management Objects (SMO) that support In-Memory OLTP.

SMO 형식 및 멤버SMO types and members

다음 형식과 멤버는 네임스페이스 Microsoft.SqlServer.Management.Smo에 있으며 메모리 내 OLTP를 지원합니다.The following types and members are in the namespace Microsoft.SqlServer.Management.Smo, and they support In-Memory OLTP:

C# 코드 예제C# code example

컴파일된 코드 예제에서 참조되는 어셈블리Assemblies referenced by the compiled code example

  • Microsoft.SqlServer.ConnectionInfo.dllMicrosoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Management.Sdk.Sfc.dllMicrosoft.SqlServer.Management.Sdk.Sfc.dll
  • Microsoft.SqlServer.Smo.dllMicrosoft.SqlServer.Smo.dll
  • Microsoft.SqlServer.SqlEnum.dllMicrosoft.SqlServer.SqlEnum.dll

코드 예제에서 수행된 작업Actions taken in the code example

  1. 메모리 최적화 파일 그룹 및 메모리 최적화 파일이 있는 데이터베이스를 만듭니다.Create a database with memory-optimized filegroup and memory-optimized file.
  2. 기본 키, 비클러스터형 인덱스 및 비클러스터형 해시 인덱스가 있는 내구성 있는 메모리 최적화 테이블을 만듭니다.Create a durable memory-optimized table with a primary key, nonclustered index, and a nonclustered hash index.
  3. 열 및 인덱스를 만듭니다.Create columns and indexes.
  4. 사용자 정의 메모리 최적화 테이블 형식을 만듭니다.Create a user-defined memory-optimized table type.
  5. 고유하게 컴파일된 저장 프로시저를 만듭니다.Create a natively compiled stored procedure.

소스 코드Source code

using Microsoft.SqlServer.Management.Smo;  
using System;  

public class A {  
   static void Main(string[] args) {  
      Server server = new Server("(local)");  

      // Create a database with memory-optimized filegroup and memory-optimized file.
      Database db = new Database(server, "MemoryOptimizedDatabase");  
      db.Create();  
      FileGroup fg = new FileGroup(
         db,
         "memOptFilegroup",
         FileGroupType.MemoryOptimizedDataFileGroup);  
      db.FileGroups.Add(fg);  
      fg.Create();  
      // Change this path if needed.
      DataFile file = new DataFile(
         fg,
         "memOptFile",
         @"C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\MSSQLmemOptFileName");  
      file.Create();  

      // Create a durable memory-optimized table with primary key, nonclustered index and nonclustered hash index.
      // Define the table as memory optimized and set the durability.
      Table table = new Table(db, "memOptTable");  
      table.IsMemoryOptimized = true;  
      table.Durability = DurabilityType.SchemaAndData;  

      // Create columns.
      Column col1 = new Column(table, "col1", DataType.Int);  
      col1.Nullable = false;  
      table.Columns.Add(col1);  
      Column col2 = new Column(table, "col2", DataType.Float);  
      col2.Nullable = false;  
      table.Columns.Add(col2);  
      Column col3 = new Column(table, "col3", DataType.Decimal(2, 10));  
      col3.Nullable = false;  
      table.Columns.Add(col3);  

      // Create indexes.
      Index pk = new Index(table, "PK_memOptTable");  
      pk.IndexType = IndexType.NonClusteredIndex;  
      pk.IndexKeyType = IndexKeyType.DriPrimaryKey;  
      pk.IndexedColumns.Add(new IndexedColumn(pk, col1.Name));  
      table.Indexes.Add(pk);  

      Index ixNonClustered = new Index(table, "ix_nonClustered");  
      ixNonClustered.IndexType = IndexType.NonClusteredIndex;  
      ixNonClustered.IndexKeyType = IndexKeyType.None;  
      ixNonClustered.IndexedColumns.Add(
         new IndexedColumn(ixNonClustered, col2.Name));  
      table.Indexes.Add(ixNonClustered);  

      Index ixNonClusteredHash = new Index(table, "ix_nonClustered_Hash");  
      ixNonClusteredHash.IndexType = IndexType.NonClusteredHashIndex;  
      ixNonClusteredHash.IndexKeyType = IndexKeyType.None;  
      ixNonClusteredHash.BucketCount = 1024;  
      ixNonClusteredHash.IndexedColumns.Add(
         new IndexedColumn(ixNonClusteredHash, col3.Name));  
      table.Indexes.Add(ixNonClusteredHash);  

      table.Create();  

      // Create a user-defined memory-optimized table type.
      UserDefinedTableType uDTT = new UserDefinedTableType(db, "memOptUDTT");  
      uDTT.IsMemoryOptimized = true;  

      // Add columns.
      Column udTTCol1 = new Column(uDTT, "udtCol1", DataType.Int);  
      udTTCol1.Nullable = false;  
      uDTT.Columns.Add(udTTCol1);  
      Column udTTCol2 = new Column(uDTT, "udtCol2", DataType.Float);  
      udTTCol2.Nullable = false;  
      uDTT.Columns.Add(udTTCol2);  
      Column udTTCol3 = new Column(uDTT, "udtCol3", DataType.Decimal(2, 10));  
      udTTCol3.Nullable = false;  
      uDTT.Columns.Add(udTTCol3);  

      // Add index.
      Index ix = new Index(uDTT, "IX_UDT");  
      ix.IndexType = IndexType.NonClusteredHashIndex;  
      ix.BucketCount = 1024;  
      ix.IndexKeyType = IndexKeyType.DriPrimaryKey;  
      ix.IndexedColumns.Add(new IndexedColumn(ix, udTTCol1.Name));  
      uDTT.Indexes.Add(ix);  

      uDTT.Create();  

      // Create a natively compiled stored procedure.
      StoredProcedure sProc = new StoredProcedure(db, "nCSProc");  
      sProc.TextMode = false;  
      sProc.TextBody = "--Type body here";  
      sProc.IsNativelyCompiled = true;  
      sProc.IsSchemaBound = true;  
      sProc.ExecutionContext = ExecutionContext.Owner;  
      sProc.Create();  
   }  
}  

참고 항목See also