
# 数据库复制
#### 操作场景
使用存储过程，备份某个数据库，并恢复成一个新的数据库。
#### 前提条件
- 成功连接RDS for SQL Server实例。关于连接华为云关系型数据库实例，请参考[连接实例](https://support.huaweicloud.com/usermanual-rds-mssql/rds_mssql_connect_06.html)。
- 执行此存储过程的必须是拥有\[CREATE ANY DATABASE\]权限的用户。如果不具备此权限的用户尝试执行该存储过程，系统将会如下提示：
  ```
  Database restores can only be performed by database logins with [CREATE ANY DATABASE] permissions.
  ```
  
- 对自定义数据库进行备份，执行账户必须是该数据库的"db_owner"或"db_backupoperator"角色组成员。如不具备相应权限的用户对数据库进行备份，系统将会有如下提示：
  ```
  Database backups can only be performed by members of db_owner or db_backupoperator roles in the source database
  ```
  
 
#### 约束
- 对于系统库，不可通过此存储过程进行复制操作。如果您试图复制系统库，系统将会如下提示：
  ```
  Error DBName_Source or DBName_Target. Please can not include in ('msdb','master','model','tempdb','rdsadmin','resource') .
  ```
  
 
- 对于需要恢复的目标数据库，必须是不存在的，且不与源数据库同名的数据库，否则，系统将会如下提示：
  ```
  Database 数据库名 already exists. Cannot restore database with the same name.
  ```
  
#### 操作步骤
执行以下命令，进行数据库复制。
```
EXEC msdb.dbo.rds_copy_database '@DBName_Source', '@DBName_Target';
```
- @ DBName_Source：源数据库，指定要备份的数据库名。
- @ DBName_Target：目标数据库，指定要恢复的数据库名。
将数据库testDB_1复制出一个新的数据库testDB_2，示例如下：
```
EXEC msdb.dbo.rds_copy_database 'testDB_1', 'testDB_2';
```
![](https://support.huaweicloud.com/usermanual-rds-mssql/public_sys-resources/note_3.0-zh-cn.png)
- 数据库版本为RDS for SQL Server 2012（标准版、企业版、Web版）的用户，请使用名称为**msdb.dbo.** **rds_copy_database_2012**的存储过程进行数据库备份。
- 数据库版本为RDS for SQL Server 2016（标准版、企业版、Web版）的用户，请使用名称为**msdb.dbo.** **rds_copy_database_2016**的存储过程进行数据库备份。
- 数据库版本为RDS for SQL Server 2017企业版的用户，请使用名称为**msdb.dbo.rds_copy_database_2017**的存储过程进行数据库备份。
 
