我正在对我的数据库进行非常严肃的操作,我想保证我的数据安全。
不幸的是出了点问题,看:
SAVEPOINT before_foo_update;
CREATE TABLE AUX_FOO as
SELECT * FROM FOO;
TRUNCATE TABLE FOO;
ALTER TABLE FOO
MODIFY(BAR NUMBER(11) NOT NULL);
INSERT INTO FOO
SELECT * FROM AUX_FOO;
DROP TABLE AUX_FOO;
ROLLBACK TO SAVEPOINT before_foo_update;
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到一个错误:
ROLLBACK TO SAVEPOINT before_foo_update
Error report:
SQL Error: ORA-01086: savepoint 'BEFORE_FOO_UPDATE' never established
01086. 00000 - "savepoint '%s' never established"
*Cause: Trying to roll back to a save point that was never established
Run Code Online (Sandbox Code Playgroud)
现在 FOO 表是空的......并且 AUX_FOO 没有被删除。你知道我做错了什么吗?
我在我的服务器上安装了一个遗留应用程序,该应用程序配置为仅与一个用户“sa”一起工作,并且在此应用程序中编写了类似定时炸弹的脚本,只要它找到另一个用户,它就会毫不费力地删除该用户。
我们需要使用另一个应用程序访问数据库,并且“sa”的密码丢失,因此剩下的唯一方法是创建另一个具有系统管理员权限的用户。
但由于脚本删除了所有用户,我不能做任何特别的事情,所以我的问题是:
每次尝试删除我的用户时,如何阻止该脚本或回滚其工作?
应用程序中的错误进行了一些更改,现在我需要在没有备份的情况下回滚
我可以为此使用日志文件吗?
'ROLLBACK' 是另一种选择吗?
信息:
-我的恢复模式设置为简单
-AutoCommit 尚未设置
- 当我尝试使用恢复任务时,它告诉我“没有选择要恢复的备份集”
如果以下循环查询在循环过程中被终止,是所有插入还是仅当前一个回滚?
DECLARE @LoopId INT = 1;
WHILE (@LoopId < 100)
BEGIN
INSERT INTO Table2
SELECT Field1
FROM Table1
WHERE ForeignKeyField = @LoopId
SET @LoopId = @LoopId + 1;
END
Run Code Online (Sandbox Code Playgroud) DELETE FROM sales;
Run Code Online (Sandbox Code Playgroud)
并且如果sales表上没有其他未提交的事务。关于该DELETE陈述,哪项陈述是正确的?
它删除表中的所有行并且删除的行不能回滚
它删除所有行以及表的结构
如果表有主键,它不会删除行
它删除表中的所有行并且可以回滚删除的行
当然,正确答案在1到4之间。我不知道删除的数据是否可以回滚。
如果有人知道,请帮助我。谢谢。
rollback ×5
sql-server ×3
delete ×1
insert ×1
migration ×1
oracle ×1
transaction ×1
trigger ×1