首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 緊急操作手冊:暴力解鎖、誤刪表閃回、覆蓋程序歷史版本找回

     編輯:Oracle 教學

Oracle 緊急操作手冊:暴力解鎖、誤刪表閃回、覆蓋程序歷史版本找回

生產環境常遇三大緊急狀況:表被鎖死、誤 DROP TABLE、程序被錯誤覆蓋。本文提供標準化處理腳本與查詢語句,建議收藏備查。

一、暴力解鎖

-- 1. 查詢鎖定會話(需 DBA 權限)
SELECT o.object_name, s.sid, s.serial#, p.spid, s.machine
FROM v$locked_object l
JOIN dba_objects o ON l.object_id = o.object_id
JOIN v$session s ON l.session_id = s.sid
JOIN v$process p ON s.paddr = p.addr
WHERE o.object_name = 'T1';  -- 表名大寫

-- 2. 強制殺掉會話
ALTER SYSTEM KILL SESSION 'sid,serial#';  -- 例:'133,37'

-- 3. 再次查詢確認鎖已釋放

二、誤刪表閃回

-- 1. 一般 DROP TABLE 只進入回收桶
FLASHBACK TABLE t1 TO BEFORE DROP;

-- 2. 確認回收桶內容
SELECT object_name, type, original_name FROM user_recyclebin;

-- 3. 若使用 PURGE 選項則無法閃回
-- DROP TABLE t1 PURGE;  -- 慎用!

三、覆蓋程序找回(需 SYS/DBA 權限)

方法一:查詢 DBA_SOURCE 歷史版本

-- 包頭
SELECT * FROM dba_source
  AS OF TIMESTAMP TO_TIMESTAMP('2015-07-22 09:25:32','YYYY-MM-DD HH24:MI:SS')
  WHERE name LIKE UPPER('%CREATE_ODS_INDEXES%')
    AND owner = 'SCOTT' AND type = 'PACKAGE'
  ORDER BY line;

-- 包體
SELECT * FROM dba_source
  AS OF TIMESTAMP TO_TIMESTAMP('2015-07-22 09:25:32','YYYY-MM-DD HH24:MI:SS')
  WHERE name LIKE UPPER('%CREATE_ODS_INDEXES%')
    AND owner = 'SCOTT' AND type = 'PACKAGE BODY'
  ORDER BY line;

方法二:查詢 OBJ$ / SOURCE$ 基礎表(同樣需 AS OF TIMESTAMP)

-- 1. 取得 OBJ#
SELECT obj# FROM obj$
  AS OF TIMESTAMP TO_TIMESTAMP('2015-07-22 09:25:32','YYYY-MM-DD HH24:MI:SS')
  WHERE name = UPPER('CREATE_ODS_INDEXES');

-- 2. 依 OBJ# 取回原始碼(包頭/包體 OBJ# 不同)
SELECT source FROM source$
  AS OF TIMESTAMP TO_TIMESTAMP('2015-07-22 09:25:32','YYYY-MM-DD HH24:MI:SS')
  WHERE obj# = 76005;  -- 包頭

SELECT source FROM source$
  AS OF TIMESTAMP TO_TIMESTAMP('2015-07-22 09:25:32','YYYY-MM-DD HH24:MI:SS')
  WHERE obj# = 76006;  -- 包體

前置條件

  • 資料庫啟用 UNDO_MANAGEMENT=AUTO 且 UNDO_RETENTION 足夠覆蓋目標時間點。
  • 操作需 SYS、SYSDBA 或 SELECT ANY DICTIONARY 權限。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved