
# 恢复所有触发器及外键
1. 恢复目的端所有触发器及外键。 
   - 恢复所有表级触发器
     ```
     DECLARE @sql NVARCHAR(MAX) = '';
     SELECT @sql = @sql + 'ENABLE TRIGGER ' + QUOTENAME(name) + ' ON ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_id)) + '.' + QUOTENAME(OBJECT_NAME(parent_id)) + ';' + CHAR(13)
     FROM sys.triggers
     WHERE is_ms_shipped = 0  -- 排除系统触发器
     AND parent_class_desc = 'OBJECT_OR_COLUMN';  -- 只包含表级触发器
     EXEC sp_executesql @sql;
     ```
     ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002513978489.png)
     
   
   - 恢复所有外键
     ```
     DECLARE @sql NVARCHAR(MAX) = '';
     SELECT @sql = @sql + 'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) + '.' + QUOTENAME(OBJECT_NAME(parent_object_id)) + ' CHECK CONSTRAINT ' + QUOTENAME(name) + ';' + CHAR(13)
     FROM sys.foreign_keys;
     EXEC sp_executesql @sql;
     ```
     ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002514138461.png)
     
   
   
   
   
2. 恢复目的端禁用的库级触发器。 
   ```
   ENABLE TRIGGER ALL ON DATABASE;
   ```
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002481978610.png)
   
   
3. 恢复源端服务层级。 
   - 恢复源端数据服务为原层级。
     ```
     ALTER DATABASE smsa_mig
     MODIFY (EDITION = 'Standard', SERVICE_OBJECTIVE = 'S0'); -- 根据查询到的原数据库层级填写EDITION和SERVICE_OBJECTIVE
     ```
     ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002481818646.png)
     可使用sql脚本查询是否已恢复（可能需要等待，若未恢复，重新执行恢复）。
     ![](https://support.huaweicloud.com/bestpractice-drs/public_sys-resources/note_3.0-zh-cn.png)
     - 不支持CDC的Azure SQL Database需要执行此步骤。
     
     - 不支持开启CDC的级别有：Basic、Standard S0、Standard S1 和 Standard S2。
     
     - 不同版本的Azure SQL Database计费不同，用户需根据自身需要选择。
       
   
   - 查询数据库的原服务层级。
     ```
     SELECT 
         database_name = DB_NAME(),
         edition,
         service_objective
     FROM sys.database_service_objectives;
     ```
     ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002513978491.png)
     
   
   
   
   
 
