全部產品
Search
文件中心

ApsaraDB RDS:預存程序

更新時間:Aug 22, 2025

本文介紹RDS SQL Server(2012及以上版本)支援的預存程序。

使用說明

本文所述命令適用於在SSMS工具中執行,命令中包含了GO作為批命令分隔字元。如果您計劃在DMS中執行預存程序命令,請勿在命令中添加GO關鍵字,否則會報錯。

更新資料庫統計資訊

T-SQL命令

sp_rds_update_db_stats

描述

用於靈活高效地更新資料庫統計資訊,支援採樣率、並行度、逾時時間及閾值百分比多維度配置。

使用方法

-- 如下為包含多個參數的綜合樣本
-- 更新test_db資料庫統計資訊,設定採樣率為50%,並行度為4,逾時時間為7200秒,修改閾值為3
EXEC sp_rds_update_db_stats        
    @db_name = 'test_db',          -- 資料庫名(必填)
    @sample_percent = 50,          -- 採樣率(可選)
    @max_dop = 4,                  -- 並行度(可選,該參數不支援2012及以下版本)
    @timeout_seconds = 7200,       -- 逾時時間(可選)
    @modification_threshold = 3;   -- 修改閾值(可選)
說明

僅傳入@db_name參數,或者SQL Server資料庫版本為2008時,預設將執行系統sp_updatestats,詳情請參見微軟官方教程

參數項

是否必填

描述

@db_name

指定需要更新統計資料的目標資料庫名稱。使用樣本如下:

-- 僅設定資料庫名,遵循微軟sp_updatestats統計資訊更新邏輯
EXEC sp_rds_update_db_stats @db_name = 'test_db';

@sample_percent

控制統計資訊採樣的百分比,類型為 float,取值範圍為 [0, 100]

未指定該參數時使用系統預設採樣率,詳情請參見微軟官方教程。使用樣本如下:

-- 設定採樣率為30%
EXEC sp_rds_update_db_stats 
    @db_name = 'test_db',
    @sample_percent = 30;

@max_dop

設定並行度(Degree of Parallelism),類型為 int,預設值為 0(表示使用系統預設設定),最大不超過RDS執行個體規格核心數該參數不支援2012及以下版本。樣本如下:

-- 設定最大並行度為4
EXEC sp_rds_update_db_stats 
    @db_name = 'test_db',
    @max_dop = 4;

@timeout_seconds

設定統計資訊更新操作的逾時時間,單位為秒(s),預設值為 3600 秒(即 1 小時)。樣本如下:

-- 逾時時間設定為7200秒(2小時)
EXEC sp_rds_update_db_stats 
 @db_name = 'test_db',
 @timeout_seconds = 7200;

@modification_threshold

設定統計資訊更新的修改閾值百分比,類型為 int,預設值為 0

  • 預設策略(當值為 0 時):採用阿里雲推薦的最優實踐策略:

    • 錶行數 < 500:30%

    • 500 ≤ 行數 ≤ 1,000,000:20%

    • 行數 > 1,000,000:5%

  • 手動傳參:需要預先計算設定值,設定值範圍為 [0, 100]。計算公式為設定值 = 修改行數 * 100 / 總行數。若期望觸發統計資訊更新,計算結果必須小於等於設定值。

    -- 表有10,000行資料時,若期望在修改100行時觸發統計資訊更新,設定閾值為1即可
    EXEC sp_rds_update_db_stats 
        @db_name = 'test_db',
        @modification_threshold = 1;

執行個體內複製資料庫

T-SQL命令

sp_rds_copy_database

支援的執行個體系列

基礎系列、高可用系列

描述

在執行個體內複製一個資料庫。

說明
  • 執行個體剩餘空間不得小於當前資料庫大小的1.3倍。

  • 不支援專屬叢集MyBase SQL Server執行個體使用。

使用方法

USE db
GO
EXEC sp_rds_copy_database 'db','db_copy'
GO
  • 第一個參數是被拷貝的資料庫。

  • 第二個參數是拷貝的目標資料庫。

設定資料庫線上

T-SQL命令

sp_rds_set_db_online

支援的執行個體系列

基礎系列、高可用系列

描述

您將資料庫設定為OFFLINE後,不能直接通過ALTER DATABASE設定為ONLINE,請使用本預存程序設定為ONLINE。

使用方法

USE master
GO
EXEC sp_rds_set_db_online 'db'
GO

參數是指定要被設定ONLINE的資料庫。

資料庫全域授權

T-SQL命令

sp_rds_set_all_db_privileges

支援的執行個體系列

基礎系列、高可用系列

描述

為一個使用者授予所有或多個使用者資料庫的許可權。

說明

授權時,目前使用者對被授權資料庫的許可權必須大於或等於被授與權限。

使用方法

sp_rds_set_all_db_privileges 'user','db_owner','db1,db2...'
  • 第一個參數是被授權的使用者。

  • 第二個參數是授予該使用者的資料庫角色。

  • 第三個參數是資料庫,可以指定一個或者多個,用逗號分隔,也可以不指定該參數(不指定表示全部使用者資料庫)。

刪除資料庫

T-SQL命令

sp_rds_drop_database

支援的執行個體系列

高可用系列

說明
  • 基礎系列執行個體暫不支援本預存程序,請使用DROP DATABASE db

  • 請在非目標庫的命令視窗下使用高許可權帳號執行該命令,並確保該帳號擁有目標資料庫的操作許可權。更多操作,請參見修改帳號許可權

描述

刪除執行個體中的資料庫。刪除時會將關聯的對象移除掉,高可用系列會自動將鏡像移除,並且KILL在該資料庫上的串連。

使用方法

USE db
GO
EXEC sp_rds_drop_database 'db'
GO

參數是要被刪除的資料庫。

設定變更追蹤

T-SQL命令

sp_rds_change_tracking

支援的執行個體系列

高可用系列

描述

設定資料庫的變更追蹤標記。

使用方法

USE db
GO
EXEC sp_rds_change_tracking 'db',1
GO
  • 第一個參數是資料庫名稱。

  • 第二個參數表示是否啟用。

    • 1:啟用。

    • 0:禁用。

開啟資料庫變更捕獲

T-SQL命令

sp_rds_cdc_enable_db

支援的執行個體系列

高可用系列、叢集系列

描述

啟用資料庫的資料變更捕獲。

使用方法

USE db
GO
-- 啟用資料庫層級的變更捕獲(CDC)
EXEC sp_rds_cdc_enable_db
GO
-- 啟動指定表的變更捕獲(CDC)
EXEC sys.sp_cdc_enable_table
    @source_schema = '<模式名稱>',
    @source_name = '<表名稱>',
    @role_name = '<CDC角色名稱>'

關閉資料庫變更捕獲

T-SQL命令

sp_rds_cdc_disable_db

支援的執行個體系列

高可用系列、叢集系列

描述

關閉資料庫的資料變更捕獲。

使用方法

USE db
GO
-- 關閉資料庫層級的變更捕獲(CDC)
EXEC sp_rds_cdc_disable_db
GO
-- 關閉指定表的變更捕獲(CDC)
EXEC sys.sp_cdc_disable_table
    @source_schema = '<模式名稱>',
    @source_name = '<表名稱>',
    @capture_instance = '<CDC捕獲執行個體名稱>'
    
-- 擷取特定表的CDC捕獲執行個體名稱的方法
SELECT capture_instance
FROM cdc.change_tables
WHERE source_schema = '<模式名稱>'
    AND source_name = '<表名稱>'

配置執行個體參數

T-SQL命令

sp_rds_configure

支援的執行個體系列

基礎系列、高可用系列

描述

設定執行個體參數。若有主備執行個體,會自動同步。目前支援的參數如下,更多參數使用詳情,請參見微軟官方文檔

參數項

描述

使用樣本

fill factor (%)

指定索引頁的填滿因數百分比。

EXEC sp_rds_configure 'fill factor (%)', 90;

max worker threads

指定並存執行查詢和處理請求的背景工作執行緒的最大數量。

EXEC sp_rds_configure 'max worker threads', 100;

cost threshold for parallelism

指定並行的開銷閾值。

EXEC sp_rds_configure 'cost threshold for parallelism', 30;

max degree of parallelism

指定查詢的最大並行度。

EXEC sp_rds_configure 'max degree of parallelism', 4;

min server memory (MB)

指定SQL Server執行個體使用的最小記憶體量。

EXEC sp_rds_configure 'min server memory (MB)', 1024;

max server memory (MB)

指定SQL Server執行個體使用的最大記憶體量。

EXEC sp_rds_configure 'max server memory (MB)', 4096;

blocked process threshold (s)

指定被阻塞進程的閾值。

EXEC sp_rds_configure 'blocked process threshold (s)', 20;

nested triggers

指定是否啟用嵌套觸發器。取值如下:

  • 0:禁用。

  • 1:啟用。

說明

2023年05月前建立的執行個體不支援該參數。

EXEC sp_rds_configure 'nested triggers', 1;

Ad Hoc Distributed Queries

指定是否啟用即席分散式查詢。取值如下:

  • 0:禁用。

  • 1:啟用。

說明

2023年05月前建立的執行個體不支援該參數。

EXEC sp_rds_configure 'Ad Hoc Distributed Queries', 1;

clr enabled

指定是否啟用CLR (Common Language Runtime)。取值如下:

  • 0:禁用。

  • 1:啟用。

說明

2023年05月前建立的執行個體不支援該參數。

EXEC sp_rds_configure 'clr enabled', 1;

default full-text language

指定預設的全文檢索搜尋語言。常用取值如下:

  • 0:預設語言。預設語言由作業系統的地區設定決定。

  • 1033:英語。

  • 2052:簡體中文。

點擊展開查看全部取值

取值

語言名稱(英文)

中文釋義

0

Neutral

中立語言

1025

Arabic

阿拉伯語

1026

Bulgarian

保加利亞語

1027

Catalan

加泰羅尼亞語

1028

Traditional Chinese

繁體中文

1029

Czech

捷克語

1030

Danish

丹麥語

1031

German

德語

1032

Greek

希臘語

1033

English

英語

1036

French

法語

1037

Hebrew

希伯來語

1039

Icelandic

冰島語

1040

Italian

意大利語

1041

Japanese

日語

1042

Korean

韓語

1043

Dutch

荷蘭語

1044

Bokmål

挪威語(博克莫爾)

1045

Polish

波蘭語

1046

Brazilian

巴西葡萄牙語

1048

Romanian

羅馬尼亞語

1049

Russian

俄語

1050

Croatian

克羅地亞語

1051

Slovak

斯洛伐克語

1053

Swedish

瑞典語

1054

Thai

泰語

1055

Turkish

土耳其語

1056

Urdu

烏爾都語

1057

Indonesian

印尼語

1058

Ukrainian

烏克蘭語

1060

Slovenian

斯洛文尼亞語

1062

Latvian

拉脫維亞語

1063

Lithuanian

立陶宛語

1066

Vietnamese

越南語

1081

Hindi

印地語

1086

Malay - Malaysia

馬來語(馬來西亞)

1093

Bengali (India)

孟加拉語(印度)

1094

Punjabi

旁遮普語

1095

Gujarati

古吉拉特語

1097

Tamil

泰米爾語

1098

Telugu

泰盧固語

1099

Kannada

卡納達語

1100

Malayalam

馬拉雅拉姆語

1102

Marathi

馬拉地語

2052

Simplified Chinese

簡體中文

2057

British English

英式英語

2070

Portuguese

葡萄牙語

2074

Serbian (Latin)

塞爾維亞語(拉丁文)

3076

Chinese (Hong Kong SAR, PRC)

中文(香港特別行政區)

3082

Spanish

西班牙語

3098

Serbian (Cyrillic)

塞爾維亞語(西裡爾文)

4100

Chinese (Singapore)

中文(新加坡)

5124

Chinese (Macao SAR)

中文(澳門特別行政區)

說明

2023年05月前建立的執行個體不支援該參數。

EXEC sp_rds_configure 'default full-text language', 2052;

default language

指定預設的語言。常用取值如下:

  • 0:英語(美國)。

  • 30:簡體中文。

點擊展開查看全部取值

取值

語言名稱(英文)

中文釋義

0

English

英語(美國)

1

German

德語

2

French

法語

3

Japanese

日語

4

Danish

丹麥語

5

Spanish

西班牙語

6

Italian

意大利語

7

Dutch

荷蘭語

8

Norwegian

挪威語

9

Portuguese

葡萄牙語

10

Finnish

芬蘭語

11

Swedish

瑞典語

12

Czech

捷克語

13

Hungarian

匈牙利語

14

Polish

波蘭語

15

Romanian

羅馬尼亞語

16

Croatian

克羅地亞語

17

Slovak

斯洛伐克語

18

Slovenian

斯洛文尼亞語

19

Greek

希臘語

20

Bulgarian

保加利亞語

21

Russian

俄語

22

Turkish

土耳其語

23

British English

英語(英國)

24

Estonian

愛沙尼亞語

25

Latvian

拉脫維亞語

26

Lithuanian

立陶宛語

27

Brazilian Portuguese

巴西葡萄牙語

28

Traditional Chinese

繁體中文

29

Korean

韓語

30

Simplified Chinese

簡體中文

31

Arabic

阿拉伯語

32

Thai

泰語

33

Norwegian (Bokmål)

挪威語(博克莫爾)

說明

2023年05月前建立的執行個體不支援該參數。

EXEC sp_rds_configure 'default language', 30;

max text repl size (B)

指定複製過程中的文本最大大小。

說明

2023年05月前建立的執行個體不支援該參數。

設定最大文本複製大小為100 MB:

EXEC sp_rds_configure 'max text repl size (B)', 104857600;

optimize for ad hoc workloads

指定是否啟用針對即席工作負載進行最佳化的動態管理檢視。取值如下:

  • 0:禁用。

  • 1:啟用。

說明

2023年05月前建立的執行個體不支援該參數。

EXEC sp_rds_configure 'optimize for ad hoc workloads', 1;

query governor cost limit

指定查詢的最大已耗用時間(秒)。設定為0表示沒有時間限制。

說明

2023年05月前建立的執行個體不支援該參數。

EXEC sp_rds_configure 'query governor cost limit', 10;

recovery interval (min)

指定復原間隔。

說明

2023年05月前建立的執行個體不支援該參數。

EXEC sp_rds_configure 'recovery interval (min)', 60;

remote login timeout (s)

指定遠程登入的逾時時間。

說明

2023年05月前建立的執行個體不支援該參數。

EXEC sp_rds_configure 'remote login timeout (s)', 30;

remote query timeout (s)

指定遠程查詢的逾時時間。

說明

2023年05月前建立的執行個體不支援該參數。

EXEC sp_rds_configure 'remote query timeout (s)', 60;

query wait (s)

指定查詢在等待資源時的等待時間。

說明

2023年05月前建立的執行個體不支援該參數。

EXEC sp_rds_configure 'query wait (s)', 5;

min memory per query (KB)

指定每次查詢佔用的最小記憶體量。

說明

2023年05月前建立的執行個體不支援該參數。

EXEC sp_rds_configure 'min memory per query (KB)', 1024;

in-doubt xact resolution

指定系統如何處理不確定的分散式交易。取值如下:

  • 0(非叢集版執行個體預設值):禁用自動解決。系統不會自動處理不確定的分散式交易,需要手動處理。

  • 1:假設自動認可。若系統對不確定的事務沒有足夠的資訊來解決,將預設自動認可這些事務。

  • 2(叢集版執行個體預設值):假設自動復原。若系統遇到不確定的事務,將預設復原這些事務。

EXEC sp_configure 'in-doubt xact resolution', 2;

使用方法

EXEC sp_rds_configure '<參數項>',<參數取值>
  • 第一個參數是要設定的執行個體配置參數項。

  • 第二個參數是該執行個體參數的值。

增加連結的伺服器Linked Server

T-SQL命令

sp_rds_add_linked_server

支援的執行個體

  • 執行個體系列:叢集系列、高可用系列(不支援基礎系列

  • 執行個體規格:通用型、獨享型(不支援共用型

  • 計費方式:訂用帳戶、隨用隨付(不支援Serverless執行個體

描述

增加執行個體的連結的伺服器。支援分散式交易,執行個體的連結的伺服器會在執行個體主備自動建立,HA切換後不需要再配置。更多詳情,請參見自動或手動主備切換

使用方法

DECLARE
@linked_server_name sysname = N'yangzhao_slb', --Linked Server的名稱
@data_source sysname = N'****.sqlserver.rds.aliyuncs.com,3888', --目標端SQL Server的IP和連接埠號碼,格式為IP,Port
@user_name sysname = N'ay15' , --目標端SQL Server的登入使用者名稱
@password nvarchar(128) = N'******', --目標端SQL Server登入名稱對應的密碼
@source_user_name sysname = N'test', --當前SQL Server執行個體上執行建立連結的伺服器的登入使用者名稱
@source_password nvarchar(128) = N'******', --當前SQL Server執行個體上執行建立連結的伺服器的登入使用者名稱對應的密碼
--連結的伺服器的一些設定項,通過XML格式傳遞。本文樣本設定項為資料訪問、RPC及RPC out的許可權
@link_server_options xml
= N'
      <rds_linked_server>
        <config option="data access">true</config>
        <config option="rpc">true</config>
        <config option="rpc out">true</config>
      </rds_linked_server>
'

EXEC sp_rds_add_linked_server
@linked_server_name,
@data_source,
@user_name,
@password,
@source_user_name,
@source_password,
@link_server_options

設定追蹤旗標

T-SQL命令

sp_rds_dbcc_trace

支援的執行個體系列

基礎系列、高可用系列

描述

設定執行個體的跟蹤標記。目前只支援部分跟蹤標記,若有主備執行個體,會自動同步。

使用方法

EXEC sp_rds_dbcc_trace '1222',1/0
  • 第一個參數是跟蹤標記。

  • 第二個參數表示開啟或關閉。

    • 1:開啟。

    • 0:關閉。

更改資料庫的名稱

T-SQL命令

sp_rds_modify_db_name

支援的執行個體系列

基礎系列、高可用系列、叢集系列

描述

更改資料庫的名稱,需確保串連資料庫的帳號擁有目標資料庫的操作許可權,且目標資料庫需處於線上狀態

高可用系列和叢集系列執行個體在更改名稱後會自動重建主備關係,重建過程中會進行備份與還原,當資料庫空間比較大時,需注意當前執行個體的剩餘可用空間,不足時可進行擴容

使用方法

USE master
GO
EXEC sp_rds_modify_db_name 'db','new_db'
GO
  • 第一個參數是原資料庫的名稱。

  • 第二個參數是新資料庫的名稱。

Server層級角色授予

T-SQL命令

sp_rds_set_server_role

支援的執行個體系列

基礎系列

描述

針對Login使用者授予Server層級角色,角色範圍包括setupadminprocessadmin,如需建立其他許可權以及瞭解更多帳號許可權,請參見建立SA許可權帳號帳號許可權列表

使用方法

EXEC sp_rds_set_server_role @login_name='test_login',@server_role='setupadmin'
  • 第一個參數是帳號名。

  • 第二個參數是角色名稱。角色支援setupadminprocessadmin

管理tempdb庫db_owner許可權

T-SQL命令

sp_rds_manage_tempdb_user

支援的執行個體系列

基礎系列、高可用系列、叢集系列

描述

授予或移除指定帳號對tempdb資料庫的db_owner許可權。

說明
  • 由於tempdb為系統臨時資料庫,執行個體重啟時tempdb會自動重建並初始化,許可權將丟失並恢複為預設狀態,因此需在每次重啟後重新授權。對於主備架構執行個體(如高可用系列、叢集系列),主節點與備節點需分別授權。

  • 相關操作,請參見回收tempdb臨時空間

使用方法

EXEC sp_rds_manage_tempdb_user 
    @login_name = '<login_name>', 
    @action = '<action>';
  • 第一個參數是帳號名。

  • 第二個參數是操作類型,支援create(授予許可權)和drop(刪除許可權)。

常見問題

Q:為什麼使用普通許可權的帳號執行EXEC sp_rds_drop_database 'dbtest';命令後出現Cannot use KILL to kill your own process.報錯?

A:請在非目標庫的命令視窗下使用高許可權帳號執行該命令,並確保該帳號擁有目標資料庫的操作許可權。更多操作,請參見修改帳號許可權