-- 1. 建立測試用戶與權限
CREATE USER flashtest IDENTIFIED BY flashtest;
GRANT CONNECT, RESOURCE TO flashtest;
GRANT EXECUTE ON dbms_flashback TO flashtest;
CONNECT flashtest/flashtest;
-- 2. 建表測試資料
CREATE TABLE test (id NUMBER(3));
INSERT INTO test VALUES (1);
INSERT INTO test VALUES (2);
COMMIT;
CREATE TABLE rec_time (ts TIMESTAMP);
-- 3. 記錄基準時間 (等待 5 分鐘確保 SCN 生成)
EXEC dbms_flashback.disable;
INSERT INTO rec_time SELECT SYSTIMESTAMP FROM DUAL;
COMMIT;
-- 4. 模擬誤刪
DELETE FROM test WHERE id=1;
COMMIT;
-- 5. 閃回查詢恢復
DECLARE
v_ts TIMESTAMP;
BEGIN
SELECT ts INTO v_ts FROM rec_time;
DBMS_FLASHBACK.ENABLE_AT_TIME(v_ts);
END;
/
SELECT * FROM test; -- 顯示 id=1,2 兩筆資料
-- 6. 將資料寫回當前表
INSERT INTO test SELECT * FROM test; -- 在閃回會話中查詢並寫入
COMMIT;
DBMS_FLASHBACK.DISABLE;