sys.sp_xtp_bind_db_resource_pool (Transact-SQL)

適用於:SQL Server

將指定的記憶體內部 OLTP 資料庫系結至指定的資源集區。 執行 之前 sys.sp_xtp_bind_db_resource_pool,資料庫和資源集區必須同時存在。

此系統程式會在@resource_pool_name識別的資源管理員集區與@database_name識別的資料庫之間建立系結。 資料庫不需要在系結時具有任何記憶體優化物件。 如果沒有記憶體優化物件,就不會從資源集區擷取任何記憶體。 資源管理員會使用此系結來管理記憶體內部 OLTP 配置器所配置的記憶體。

如果指定的資料庫已經有系結,程式會傳回錯誤。 在任何情況下,資料庫可能有多個作用中的系結。

Transact-SQL 語法慣例

語法

sys.sp_xtp_bind_db_resource_pool
    [ @database_name = ] 'database_name'
    , [ @resource_pool_name = ] 'resource_pool_name'
[ ; ]

引數

[ @database_name = ] 'database_name'

現有記憶體內部 OLTP 已啟用資料庫的名稱。 @database_name為 sysname

[ @resource_pool_name = ] 'resource_pool_name'

現有資源集區的名稱。 @resource_pool_name為 sysname

訊息

發生 sp_xtp_bind_db_resource_pool 錯誤時,會傳回其中一則訊息。

資料庫不存在

@database_name必須參考現有的資料庫。 如果沒有具有指定識別碼的資料庫,則會傳回下列訊息:

資料庫識別碼 %d 不存在。 請使用此系結的有效資料庫標識碼。

Msg 911, Level 16, State 18, Procedure sp_xtp_bind_db_resource_pool_internal, Line 51
Database 'Hekaton_DB213' does not exist. Make sure that the name is entered correctly.

資料庫是系統資料庫

記憶體內部 OLTP 資料表無法在系統資料庫中建立。 因此,為這類資料庫建立記憶體內部 OLTP 記憶體的系結無效。 傳回下列錯誤:

Database_name %s 是指系統資料庫。 資源集區只能系結至用戶資料庫。

Msg 41371, Level 16, State 1, Procedure sp_xtp_bind_db_resource_pool_internal, Line 51
Binding to a resource pool is not supported for system database 'master'. This operation can only be performed on a user database.

資源集區不存在

執行 之前sp_xtp_bind_db_resource_pool,@resource_pool_name所識別的資源集區必須存在。 如果沒有指定識別碼的集區,則會傳回下列錯誤:

資源集區 %s 不存在。 請輸入有效的資源集區名稱。

Msg 41370, Level 16, State 1, Procedure sp_xtp_bind_db_resource_pool_internal, Line 51
Resource pool 'Pool_Hekaton' does not exist or resource governor has not been reconfigured.

Pool_name是指保留的系統集區

集區名稱 「INTERNAL」 和 「DEFAULT」 會保留給系統集區。 明確將資料庫系結至其中一項並無效。 如果輸入系統集區名稱,則會傳回下列錯誤:

資源集區 %s 是系統資源集區。 系統資源集區可能無法使用此程序明確系結至資料庫。

Msg 41373, Level 16, State 1, Procedure sp_xtp_bind_db_resource_pool_internal, Line 51
Database 'Hekaton_DB' cannot be explicitly bound to the resource pool 'internal'. A database can only be bound only to a user resource pool.

資料庫已系結至另一個資源集區

資料庫隨時只能系結至一個資源集區。 必須先明確移除資源集區的資料庫系結,才能系結至另一個集區。 請參閱 sys.sp_xtp_unbind_db_resource_pool (Transact-SQL)

資料庫 %s 已經系結至資源集區 %s。 您必須先解除系結,才能建立新的系結。

Msg 41372, Level 16, State 1, Procedure sp_xtp_bind_db_resource_pool_internal, Line 54
Database 'Hekaton_DB' is currently bound to a resource pool. A database must be unbound before creating a new binding.

成功時, sp_xtp_bind_db_resource_pool 傳回下列訊息。

成功系結

成功時,函式會傳回下列成功訊息,該訊息會記錄在 SQL Server 錯誤記錄檔中。

已在標識子為 %d 的資料庫與標識元為 %d 的資源集區之間成功建立資源系結。

範例

A. 下列程式代碼範例會將資料庫 Hekaton_DB 系結至資源集區 Pool_Hekaton

sys.sp_xtp_bind_db_resource_pool N'Hekaton_DB', N'Pool_Hekaton';

繫結會在下一次資料庫重新上線時生效。

B. 這個擴充版本的上一個範例包含一些額外的檢查。 在 SQL Server Management Studio 中執行下列 Transact-SQL:

DECLARE @resourcePool SYSNAME = N'Pool_Hekaton';
DECLARE @database SYSNAME = N'Hekaton_DB';

-- Check whether resource pool exists
IF NOT EXISTS (
        SELECT *
        FROM sys.resource_governor_resource_pools
        WHERE name = @resourcePool
        )
BEGIN
    SELECT N'Resource pool "' + @resourcePool + N'" does not exist or resource governor has not been reconfigured.';
END
-- Check whether database is already bound to a resource pool
ELSE IF EXISTS (
        SELECT p.name
        FROM sys.databases d
        INNER JOIN sys.resource_governor_resource_pools p
            ON d.resource_pool_id = p.pool_id
        WHERE d.name = @database
        )
BEGIN
    SELECT N'Database "' + @database + N'" is currently bound to resource pool "' + @resourcePool + N'". A database must be unbound before creating a new binding.';
END
-- Bind resource pool to database.
ELSE
BEGIN
    EXEC sp_xtp_bind_db_resource_pool @database,
        @resourcePool;
END

需求

@database_name所指定的資料庫和資源集區@resource_pool_name必須存在,才能系結資料庫。

需要 CONTROL SERVER 權限。