SQLsever 创建DDL触发器,当删除"sdb_XXX"数据库的一个表时,提示"不能删除该表",并回滚删除表的操作。
时间: 2024-02-11 08:45:45 浏览: 100
可以使用如下的代码来创建该触发器:
CREATE TRIGGER trg_prevent_delete
ON DATABASE
FOR DROP_TABLE
AS
IF (ORIGINAL_DB_NAME() = 'sdb_XXX')
BEGIN
ROLLBACK
PRINT '不能删除该表'
END
该触发器会在删除表时触发,判断数据库名称是否为"sdb_XXX",如果是,则回滚删除表的操作,并打印提示信息"不能删除该表"。
相关问题
使用sql sever 1)对"sdb_XXX"数据库进行一次完整备份,以覆盖的方式备份到XXX_backup2上;(5分) 2)删除performance_XXX表;(3分) 3)对"sdb_XXX"数据库进行一次差异备份,以追加的方式备份到XXX_backup2上;(5分) 4)删除"sdb_XXX"数据库;(4分) 5)利用XXX_backup2设备对"sdb_XXX"数据库进行的全部备份恢复"sdb_XXX"数据库,恢复完成之后,查看"sdb_XXX"数据库中是否有performance_XXX表?为什么?(10分) 6)再次删除"sdb_XXX"数据库;(3分) 7)利用XXX_backup2设备对"sdb_XXX"数据库进行的完整备份恢复"sdb_XXX"数据库,恢复完成之后,查看"sdb_XXX"数据库中是否有performance_XXX表?为什么?(10分)
我可以提供一些关于SQL Server的指导,但是我无法直接为您执行这些操作。请在SQL Server Management Studio或其他SQL Server管理工具中执行以下操作:
1. 对"sdb_XXX"数据库进行一次完整备份,以覆盖的方式备份到XXX_backup2上:
使用以下命令:
BACKUP DATABASE sdb_XXX TO DISK = 'XXX_backup2' WITH INIT
2. 删除performance_XXX表:
使用以下命令:
DROP TABLE performance_XXX
3. 对"sdb_XXX"数据库进行一次差异备份,以追加的方式备份到XXX_backup2上:
使用以下命令:
BACKUP DATABASE sdb_XXX TO DISK = 'XXX_backup2' WITH DIFFERENTIAL
4. 删除"sdb_XXX"数据库:
使用以下命令:
DROP DATABASE sdb_XXX
5. 利用XXX_backup2设备对"sdb_XXX"数据库进行的全部备份恢复"sdb_XXX"数据库,恢复完成之后,查看"sdb_XXX"数据库中是否有performance_XXX表?为什么?
使用以下命令进行恢复:
RESTORE DATABASE sdb_XXX FROM DISK = 'XXX_backup2' WITH REPLACE
恢复完成后,sdb_XXX数据库中不会有performance_XXX表,因为在恢复时,该表已经被删除了。
6. 再次删除"sdb_XXX"数据库:
使用以下命令:
DROP DATABASE sdb_XXX
7. 利用XXX_backup2设备对"sdb_XXX"数据库进行的完整备份恢复"sdb_XXX"数据库,恢复完成之后,查看"sdb_XXX"数据库中是否有performance_XXX表?为什么?
使用以下命令进行恢复:
RESTORE DATABASE sdb_XXX FROM DISK = 'XXX_backup2' WITH REPLACE
恢复完成后,sdb_XXX数据库中不会有performance_XXX表,因为在备份XXX_backup2时,该表已经被删除了。
使用sqlsever (1)将"sdb_XXX"数据库的恢复模式设置为"完整";(3分) 2)对"sdb_XXX"数据库进行一次完整备份,以覆盖的方式备份到XXX_backup1上;(5分) 3)删除performance_XXX表;(3分) 4)对"sdb_XXX"数据库进行一次日志备份,并以追加的方式备份到XXX_backup1上;(4分) 5)利用所做的全部备份恢复"sdb_XXX"数据库,恢复完成后,performance_XXX是否恢复出来了?(10分) 6)再次恢复"sdb_XXX"数据库,这次只利用所做的完整备份进行恢复,恢复完成后,performance_XXX表是否恢复出来了?为什么?
1) 使用以下命令将"sdb_XXX"数据库的恢复模式设置为"完整":
```
ALTER DATABASE sdb_XXX SET RECOVERY FULL;
```
2) 使用以下命令对"sdb_XXX"数据库进行一次完整备份,并以覆盖的方式备份到XXX_backup1上:
```
BACKUP DATABASE sdb_XXX TO DISK = 'XXX_backup1' WITH INIT;
```
3) 使用以下命令删除performance_XXX表:
```
DROP TABLE performance_XXX;
```
4) 使用以下命令对"sdb_XXX"数据库进行一次日志备份,并以追加的方式备份到XXX_backup1上:
```
BACKUP LOG sdb_XXX TO DISK = 'XXX_backup1' WITH NOFORMAT, NOINIT, NAME = 'sdb_XXX-Log Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10;
```
5) 利用所做的全部备份恢复"sdb_XXX"数据库,恢复完成后,performance_XXX是否恢复出来了?
使用以下命令进行数据库恢复:
```
RESTORE DATABASE sdb_XXX FROM DISK = 'XXX_backup1' WITH NORECOVERY;
RESTORE LOG sdb_XXX FROM DISK = 'XXX_backup1' WITH RECOVERY;
```
如果在恢复完成后,performance_XXX表未能恢复出来,可能是删除表的操作在备份之后进行的,所以表的数据未能被备份。需要在完整备份和删除表之间进行日志备份,以确保所有数据都被备份。
6) 再次恢复"sdb_XXX"数据库,这次只利用所做的完整备份进行恢复,恢复完成后,performance_XXX表是否恢复出来了?为什么?
使用以下命令只利用完整备份进行数据库恢复:
```
RESTORE DATABASE sdb_XXX FROM DISK = 'XXX_backup1' WITH REPLACE, RECOVERY;
```
如果只使用完整备份进行恢复,则无法恢复删除的表,因为删除表的操作在完整备份之后进行,备份中不包含表的数据。需要在删除表之前进行完整备份或在删除表之后进行日志备份。
阅读全文