全部產品
Search
文件中心

ApsaraDB RDS:SQL命令管理資料庫

更新時間:Aug 09, 2025

本文介紹在RDS SQL Server執行個體中使用SQL命令建立和刪除資料庫,並通過專用預存程序更改資料庫名稱的方法,同時說明管理資料庫時禁止執行的高風險操作。

前提條件

RDS SQL Server執行個體版本為2012及以上。

建立資料庫

執行如下命令,建立資料庫:

CREATE DATABASE TestDb
說明

在RDS SQL Server執行個體中建立資料庫時會產生預設路徑,請您不要指定任何檔案的路徑。

您可以執行以下命令,查詢SQL Server執行個體的所有資料庫的資料檔案和記錄檔的路徑資訊:

SELECT db_name(database_id), physical_name
FROM sys.master_files;

刪除資料庫

執行如下命令,刪除資料庫:

DROP DATABASE [TestDb]

需注意,若您在刪除資料庫前沒有對該資料庫進行過任何備份,系統會返回如下提示資訊:

DROP DATABASE [TestDb]
        -------------------------------------------------------------------------------------------------
        Kindly reminder:
            your database [TestDb] does not exist any backup set.
        -------------------------------------------------------------------------------------------------
Login User [Test11] has dropped database [TestDb] .

更改資料庫名稱

RDS SQL Server提供預存程序sp_rds_modify_db_name用於安全修改資料庫名稱,該預存程序無需額外授權,普通帳號也可執行。

T-SQL命令

sp_rds_modify_db_name

支援的執行個體

  • 高可用系列

  • 叢集系列

  • 基礎系列

描述

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

使用方法

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

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

資料庫的更改限制

您可以更改資料庫的大部分屬性,但請不要執行如下操作:

  • 請勿將資料庫移動到錯誤的檔案路徑。

    例如,若您執行如下命令並指定了錯誤的檔案路徑:

    ALTER DATABASE [TestDb]MODIFY FILE( NAME = N'TestDb', FILENAME = N'E:\KKKK\DDD\DATA\TestDb.mdf' )

    則系統會返回如下錯誤資訊:

    Msg 50000, Level 16, State 1, Procedure ******, Line 152
    The file path [ 
    E:\KKKK\DDD\DATA\TestDb.mdf ] is invalid,please specify correct path folder [ E:\mmm\gggg\ ].
    Msg 3609, Level 16, State 2, Line 2
    The transaction ended in the trigger. The batch has been aborted.
  • 請勿將資料庫的復原模式設定為FULL之外的其他模式。

    例如,若您執行了如下將資料庫的復原模式設定為SIMPLE的命令:

    ALTER DATABASE [TestDb]  --[TestDb]為資料庫名稱。
    SET RECOVERY SIMPLE

    資料庫日誌鏈會斷開,系統會將復原模式重設為FULL,但不會實際修改資料庫復原模式為SIMPLE。會返回如下報錯資訊:

    Msg 50000, Level 16, State 1, Procedure ******, Line 46
    Login User [Test11] can't change database [TestDb] recovery model.
    Msg 3609, Level 16, State 2, Line 2
    The transaction ended in the trigger. The batch has been aborted.
    重要

    如果日誌已滿只能截斷日誌鏈進行收縮。原則上不允許將資料庫修改為SIMPLE簡單模式,這種方式會影響RDS的備份鏈,導致經過目前時間點的所有恢複任務失敗。如果緊急情況下您需要通過修改資料庫復原模式為SIMPLE簡單模式並需要截斷資料庫日誌鏈,表示您已經理解並願意承擔上述風險。此時您可忽略執行如下命令後顯示的錯誤資訊,資料庫日誌鏈依然會斷開。

  • 將資料庫設定為OFFLINE後,請勿直接執行ONLINE命令。

    例如,對於目前狀態為OFFLINE的資料庫,若您直接執行ONLINE的命令,如下所示:

    USE [master]
      GO
      --set offline
      --ALTER DATABASE [TestDb]
      --SET OFFLINE
      --WITH ROLLBACK AFTER 0
      ALTER DATABASE [TestDb]
      SET ONLINE

    則系統會返回如下錯誤資訊:

    Msg 5011, Level 14, State 9, Line 1
    User does not have permission to alter database 'TestDb', the database does not exist, or the database is not in a state that allows access checks.
    Msg 5069, Level 16, State 1, Line 1
    ALTER DATABASE statement failed.

    如需將資料庫的狀態從OFFLINE改成ONLINE,您可以執行sp_rds_set_db_online預存程序命令進行狀態的變更:

    EXEC sp_rds_set_db_online 'TestDb'

常見報錯

通過原生SQLALTER DATABASE命令或SSMS圖形介面修改RDS SQL Server資料庫名稱報錯?

問題描述

通過原生SQLALTER DATABASE命令或SSMS圖形介面直接修改RDS SQL Server資料庫名稱出現報錯,具體如下:

  • 原生SQLALTER DATABASE命令報錯

    Msg 5011, Level 14, State 2, Line 4
    User does not have permission to alter database 'jmdb01', the database does not exist, or the database is not in a state that allows access checks.

    image

  • SSMS圖形介面報錯unable to rename db_name.

    image

問題原因

  • RDS SQL Server使用者帳號(普通帳號和高許可權帳號)預設僅被授予了master資料庫的CREATE DATABASE許可權,這不足以支援修改資料庫名稱的操作,因此無法通過原生SQL或SSMS直接修改資料庫名稱。

  • (不推薦)如需修改可開通SA許可權,通過SA許可權帳號手動為使用者帳號(普通帳號和高許可權帳號)授予相關許可權才能完成操作。帳號的具體許可權說明如下:

    • 僅被授予master庫的CREATE DATABASE許可權:使用者沒有許可權修改任何資料庫的名稱。

    • 被授予執行個體層級的CREATE ANY DATABASE許可權:使用者可以修改其作為Owner的資料庫名稱。但需注意,使用者必須是資料庫的Owner,而不是被授予了db_owner角色。修改資料庫Owner的方法,請參見修改資料庫屬性(進階資訊db_owner)

    • 被授予執行個體層級的ALTER ANY DATABASE許可權:使用者可以修改其被授予了ALTER許可權的資料庫名稱。

解決方案

RDS SQL Server提供預存程序sp_rds_modify_db_name用於安全修改資料庫名稱,該預存程序無需額外授權,普通帳號也可執行。

T-SQL命令

sp_rds_modify_db_name

支援的執行個體

  • 高可用系列

  • 叢集系列

  • 基礎系列

描述

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

使用方法

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

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

相關文檔