日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

TSPITR方式数据库找回误操作丢失的数据

發布時間:2023/12/9 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TSPITR方式数据库找回误操作丢失的数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、TSPITR介紹

????????TSPITR全稱是Tablespace Point In Time Recover(表空間基于時間點的不完全恢復)。原理是通過輔助實例基于時間還原出誤操作前的數據通過DataPump將數據導入到目標數據庫。TSPITR的最大好處是不需要生產庫停機。

二、適用場景

表空間時點恢復適用用以下場景:
????①錯誤的批處理作業或數據操作語言DML
????②恢復數據定義語言(DDL)后丟失的數據操作,改變表的結構。不能使用閃回表將表倒回結構更改點之前,例如截斷表(truncate)操作。
????③恢復drop時使用了purge選項的表
????④恢復存在邏輯錯誤的表
????⑤恢復被刪除的表空間,RMAN可以在被drop的表空間上面執行TSPITR
????⑥與全庫級別閃回相比,表空間時點恢復停留在表空間級別,影響較全庫閃回較小。其次,數據庫閃回功能需要承擔維護閃回日志開啟的相關性能開銷。

三、TSPITR前提

1、有一套有效全庫備份,因為TSPITR這個過程除了復制需要恢復的表空間外,也必須復制system,sysaux和undo表空間
2、需要回復的表空間需要自包含,可以通過TS_PITR_CHECK視圖查看自包含信息。表空間上存在約束關系(依賴)表的情形,依賴關系所在的表空間也需要一同做時點恢復(如外鍵參照,不在同一時點,則違反參照約束)
3、對于索引與數據分離的表空間在時點恢復時,應先刪除索引
4、不能恢復數據庫當前的缺省表空間
5、不能恢復以下對象:
????①存在依賴關系的物化視圖,分區表等(如果要恢復,先解決依賴)
????②undo表空間,undo段
????③sys模式下的對象(如PL/SQL,views, synonyms, users…)

四、測試過程

1、對全庫做一個全備(之前做過全庫備份并且有效這步可以忽略)

RMAN> backup database format '/u01/rman_bak/all_db_%U.bak';啟動 backup 于 2018-07-29 19:19:31 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在啟動全部數據文件備份集 通道 ORA_DISK_1: 正在指定備份集內的數據文件 輸入數據文件: 文件號=00001 名稱=/u01/app/oracle/oradata/vbox66db/system01.dbf 輸入數據文件: 文件號=00002 名稱=/u01/app/oracle/oradata/vbox66db/sysaux01.dbf 輸入數據文件: 文件號=00003 名稱=/u01/app/oracle/oradata/vbox66db/undotbs01.dbf 輸入數據文件: 文件號=00004 名稱=/u01/app/oracle/oradata/vbox66db/users01.dbf 輸入數據文件: 文件號=00005 名稱=/u01/app/oracle/oradata/vbox66db/test01.dbf 通道 ORA_DISK_1: 正在啟動段 1 于 2018-07-29 19:19:31 通道 ORA_DISK_1: 已完成段 1 于 2018-07-29 19:21:37 段句柄=/u01/rman_bak/all_db_0kt98563_1_1.bak 標記=TAG20180729T191931 注釋=NONE 通道 ORA_DISK_1: 備份集已完成, 經過時間:00:02:06 通道 ORA_DISK_1: 正在啟動全部數據文件備份集 通道 ORA_DISK_1: 正在指定備份集內的數據文件 備份集內包括當前控制文件 備份集內包括當前的 SPFILE 通道 ORA_DISK_1: 正在啟動段 1 于 2018-07-29 19:21:44 通道 ORA_DISK_1: 已完成段 1 于 2018-07-29 19:21:45 段句柄=/u01/rman_bak/all_db_0lt985a1_1_1.bak 標記=TAG20180729T191931 注釋=NONE 通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:01 完成 backup 于 2018-07-29 19:21:45RMAN>

2、創建一個測試表空間

①創建testdb表空間

SYS@vbox66in>create tablespace testdb datafile '/u01/app/oracle/oradata/vbox66db/testdb01.dbf' size 100M autoextend on;表空間已創建。SYS@vbox66in>select name from v$datafile;NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/vbox66db/system01.dbf /u01/app/oracle/oradata/vbox66db/sysaux01.dbf /u01/app/oracle/oradata/vbox66db/undotbs01.dbf /u01/app/oracle/oradata/vbox66db/users01.dbf /u01/app/oracle/oradata/vbox66db/test01.dbf /u01/app/oracle/oradata/vbox66db/testdb01.dbf已選擇6行。SYS@vbox66in>SYS@vbox66in>alter user scott default tablespace testdb;用戶已更改。

②創建測試表

SCOTT@vbox66in>create table test01 tablespace testdb as select * from emp;表已創建。SCOTT@vbox66in>create table test02 tablespace testdb as select * from dept;表已創建。 SCOTT@vbox66in>alter table test01 add primary key(empno);表已更改。SCOTT@vbox66in>alter table test02 add primary key(deptno);表已更改。SCOTT@vbox66in>alter table test01 add constraints test01_fk foreign key(deptno) references test02(deptno);表已更改。SCOTT@vbox66in>SCOTT@vbox66in>commit;提交完成。SCOTT@vbox66in>

③RMAN備份testdb表空間

RMAN> backup tablespace testdb format '/u01/rman_bak/testdb_%U.bak';啟動 backup 于 2018-07-29 21:01:53 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在啟動全部數據文件備份集 通道 ORA_DISK_1: 正在指定備份集內的數據文件 輸入數據文件: 文件號=00006 名稱=/u01/app/oracle/oradata/vbox66db/testdb01.dbf 通道 ORA_DISK_1: 正在啟動段 1 于 2018-07-29 21:01:53 通道 ORA_DISK_1: 已完成段 1 于 2018-07-29 21:01:54 段句柄=/u01/rman_bak/testdb_0mt98b61_1_1.bak 標記=TAG20180729T210153 注釋=NONE 通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:01 完成 backup 于 2018-07-29 21:01:54RMAN>

④取當前時間,以便之后還原時用

SCOTT@vbox66in>select sysdate from dual;SYSDATE ------------------- 2018-07-29 21:03:31SCOTT@vbox66in>

⑤誤操作刪除表test01、test02數據(這里是測試,)

SCOTT@vbox66in>truncate table test02;表被截斷。SCOTT@vbox66in>truncate table test01;表被截斷。SCOTT@vbox66in>select * from test01;未選定行SCOTT@vbox66in>select * from test02;未選定行SCOTT@vbox66in>

⑥建立目錄指定輔助庫目標,

[oracle@vbox66 ~]$ mkdir -p /tmp/auxdata [oracle@vbox66 ~]$ ll /tmp/auxdata/ 總計 0 [oracle@vbox66 ~]$ ll -d /tmp/auxdata/ drwxr-xr-x 2 oracle oinstall 4096 07-29 21:16 /tmp/auxdata/

⑦做RMAN TSPITR 并指定輔助庫目的地

RMAN> recover tablespace testdb until time '2018-07-29 22:11:35' auxiliary destination '/tmp/auxdata'; //這個時間和上面記錄的有點出入,因為期間修改過一次,道理上一致 啟動 recover 于 2018-07-29 22:15:28 使用通道 ORA_DISK_1 RMAN-05026: 警告: 假定以下表空間集適用于指定的時間點表空間列表要求具有 UNDO 段 表空間 SYSTEM 表空間 UNDOTBS1使用 SID='Fcny' 創建自動實例供自動實例使用的初始化參數: db_name=VBOX66DB db_unique_name=Fcny_tspitr_VBOX66DB compatible=11.2.0.4.0 db_block_size=8192 db_files=200 sga_target=1G processes=80 db_create_file_dest=/tmp/auxdata log_archive_dest_1='location=/tmp/auxdata' #No auxiliary parameter file used啟動自動實例 VBOX66DBOracle 實例已啟動系統全局區域總計 1068937216 字節Fixed Size 2260088 字節 Variable Size 281019272 字節 Database Buffers 780140544 字節 Redo Buffers 5517312 字節 自動實例已創建 對恢復集表空間運行 TRANSPORT_SET_CHECK TRANSPORT_SET_CHECK 已成功完成內存腳本的內容: { # set requested point in time set until time "2018-07-29 22:11:35"; # restore the controlfile restore clone controlfile; # mount the controlfile sql clone 'alter database mount clone database'; # archive current online log sql 'alter system archive log current'; # avoid unnecessary autobackups for structural changes during TSPITR sql 'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;'; } 正在執行內存腳本正在執行命令: SET until clause啟動 restore 于 2018-07-29 22:15:43 分配的通道: ORA_AUX_DISK_1 通道 ORA_AUX_DISK_1: SID=19 設備類型=DISK通道 ORA_AUX_DISK_1: 正在開始還原數據文件備份集 通道 ORA_AUX_DISK_1: 正在還原控制文件 通道 ORA_AUX_DISK_1: 正在讀取備份片段 /u01/rman_bak/full_db_0pt98f62_1_1.bak 通道 ORA_AUX_DISK_1: 段句柄 = /u01/rman_bak/full_db_0pt98f62_1_1.bak 標記 = TAG20180729T220804 通道 ORA_AUX_DISK_1: 已還原備份片段 1 通道 ORA_AUX_DISK_1: 還原完成, 用時: 00:00:01 輸出文件名=/tmp/auxdata/VBOX66DB/controlfile/o1_mf_fovm0jqt_.ctl 完成 restore 于 2018-07-29 22:15:45sql 語句: alter database mount clone databasesql 語句: alter system archive log currentsql 語句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;內存腳本的內容: { # set requested point in time set until time "2018-07-29 22:11:35"; plsql <<<-- tspitr_2 declaresqlstatement varchar2(512);offline_not_needed exception;pragma exception_init(offline_not_needed, -01539); beginsqlstatement := 'alter tablespace '|| 'TESTDB' ||' offline immediate';krmicd.writeMsg(6162, sqlstatement);krmicd.execSql(sqlstatement); exceptionwhen offline_not_needed thennull; end; >>>; # set destinations for recovery set and auxiliary set datafiles set newname for clone datafile 1 to new; set newname for clone datafile 3 to new; set newname for clone datafile 2 to new; set newname for clone tempfile 1 to new; set newname for datafile 6 to "/u01/app/oracle/oradata/vbox66db/testdb01.dbf"; # switch all tempfiles switch clone tempfile all; # restore the tablespaces in the recovery set and the auxiliary set restore clone datafile 1, 3, 2, 6; switch clone datafile all; } 正在執行內存腳本正在執行命令: SET until clausesql 語句: alter tablespace TESTDB offline immediate正在執行命令: SET NEWNAME正在執行命令: SET NEWNAME正在執行命令: SET NEWNAME正在執行命令: SET NEWNAME正在執行命令: SET NEWNAME臨時文件 1 在控制文件中已重命名為 /tmp/auxdata/VBOX66DB/datafile/o1_mf_temp_%u_.tmp啟動 restore 于 2018-07-29 22:15:56 使用通道 ORA_AUX_DISK_1通道 ORA_AUX_DISK_1: 正在開始還原數據文件備份集 通道 ORA_AUX_DISK_1: 正在指定從備份集還原的數據文件 通道 ORA_AUX_DISK_1: 將數據文件 00001 還原到 /tmp/auxdata/VBOX66DB/datafile/o1_mf_system_%u_.dbf 通道 ORA_AUX_DISK_1: 將數據文件 00003 還原到 /tmp/auxdata/VBOX66DB/datafile/o1_mf_undotbs1_%u_.dbf 通道 ORA_AUX_DISK_1: 將數據文件 00002 還原到 /tmp/auxdata/VBOX66DB/datafile/o1_mf_sysaux_%u_.dbf 通道 ORA_AUX_DISK_1: 將數據文件 00006 還原到 /u01/app/oracle/oradata/vbox66db/testdb01.dbf 通道 ORA_AUX_DISK_1: 正在讀取備份片段 /u01/rman_bak/full_db_0ot98f25_1_1.bak 通道 ORA_AUX_DISK_1: 段句柄 = /u01/rman_bak/full_db_0ot98f25_1_1.bak 標記 = TAG20180729T220804 通道 ORA_AUX_DISK_1: 已還原備份片段 1 通道 ORA_AUX_DISK_1: 還原完成, 用時: 00:02:25 完成 restore 于 2018-07-29 22:18:21數據文件 1 已轉換成數據文件副本 輸入數據文件副本 RECID=4 STAMP=982793902 文件名=/tmp/auxdata/VBOX66DB/datafile/o1_mf_system_fovm0ws4_.dbf 數據文件 3 已轉換成數據文件副本 輸入數據文件副本 RECID=5 STAMP=982793902 文件名=/tmp/auxdata/VBOX66DB/datafile/o1_mf_undotbs1_fovm0wsx_.dbf 數據文件 2 已轉換成數據文件副本 輸入數據文件副本 RECID=6 STAMP=982793902 文件名=/tmp/auxdata/VBOX66DB/datafile/o1_mf_sysaux_fovm0wsb_.dbf內存腳本的內容: { # set requested point in time set until time "2018-07-29 22:11:35"; # online the datafiles restored or switched sql clone "alter database datafile 1 online"; sql clone "alter database datafile 3 online"; sql clone "alter database datafile 2 online"; sql clone "alter database datafile 6 online"; # recover and open resetlogs recover clone database tablespace "TESTDB", "SYSTEM", "UNDOTBS1", "SYSAUX" delete archivelog; alter clone database open resetlogs; } 正在執行內存腳本正在執行命令: SET until clausesql 語句: alter database datafile 1 onlinesql 語句: alter database datafile 3 onlinesql 語句: alter database datafile 2 onlinesql 語句: alter database datafile 6 online啟動 recover 于 2018-07-29 22:18:22 使用通道 ORA_AUX_DISK_1正在開始介質的恢復線程 1 序列 22 的歸檔日志已作為文件 /u01/app/oracle/oradata/arch/1_22_974146828.dbf 存在于磁盤上 歸檔日志文件名=/u01/app/oracle/oradata/arch/1_22_974146828.dbf 線程=1 序列=22 介質恢復完成, 用時: 00:00:02 完成 recover 于 2018-07-29 22:18:25數據庫已打開內存腳本的內容: { # make read only the tablespace that will be exported sql clone 'alter tablespace TESTDB read only'; # create directory for datapump import sql "create or replace directory TSPITR_DIROBJ_DPDIR as '' /tmp/auxdata''"; # create directory for datapump export sql clone "create or replace directory TSPITR_DIROBJ_DPDIR as '' /tmp/auxdata''"; } 正在執行內存腳本sql 語句: alter tablespace TESTDB read onlysql 語句: create or replace directory TSPITR_DIROBJ_DPDIR as ''/tmp/auxdata''sql 語句: create or replace directory TSPITR_DIROBJ_DPDIR as ''/tmp/auxdata''正在執行元數據導出...EXPDP> 啟動 "SYS"."TSPITR_EXP_Fcny": EXPDP> 處理對象類型 TRANSPORTABLE_EXPORT/PLUGTS_BLKEXPDP> 處理對象類型 TRANSPORTABLE_EXPORT/TABLEEXPDP> 處理對象類型 TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINTEXPDP> 處理對象類型 TRANSPORTABLE_EXPORT/INDEX_STATISTICSEXPDP> 處理對象類型 TRANSPORTABLE_EXPORT/CONSTRAINT/REF_CONSTRAINTEXPDP> 處理對象類型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLKEXPDP> 已成功加載/卸載了主表 "SYS"."TSPITR_EXP_Fcny" EXPDP> ******************************************************************************EXPDP> SYS.TSPITR_EXP_Fcny 的轉儲文件集為:EXPDP> /tmp/auxdata/tspitr_Fcny_42764.dmpEXPDP> ******************************************************************************EXPDP> 可傳輸表空間 TESTDB 所需的數據文件:EXPDP> /u01/app/oracle/oradata/vbox66db/testdb01.dbfEXPDP> 作業 "SYS"."TSPITR_EXP_Fcny" 已于 星期日 7月 29 22:20:31 2018 elapsed 0 00:01:15 成功完成 導出完畢內存腳本的內容: { # shutdown clone before import shutdown clone immediate # drop target tablespaces before importing them back sql 'drop tablespace TESTDB including contents keep datafiles cascade constraints'; } 正在執行內存腳本數據庫已關閉 數據庫已卸裝 Oracle 實例已關閉sql 語句: drop tablespace TESTDB including contents keep datafiles cascade constraints正在執行元數據導入...IMPDP> 已成功加載/卸載了主表 "SYS"."TSPITR_IMP_Fcny" IMPDP> 啟動 "SYS"."TSPITR_IMP_Fcny": IMPDP> 處理對象類型 TRANSPORTABLE_EXPORT/PLUGTS_BLKIMPDP> 處理對象類型 TRANSPORTABLE_EXPORT/TABLEIMPDP> 處理對象類型 TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINTIMPDP> 處理對象類型 TRANSPORTABLE_EXPORT/INDEX_STATISTICSIMPDP> 處理對象類型 TRANSPORTABLE_EXPORT/CONSTRAINT/REF_CONSTRAINTIMPDP> 處理對象類型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLKIMPDP> 作業 "SYS"."TSPITR_IMP_Fcny" 已于 星期日 7月 29 22:21:27 2018 elapsed 0 00:00:10 成功完成 導入完畢內存腳本的內容: { # make read write and offline the imported tablespaces sql 'alter tablespace TESTDB read write'; sql 'alter tablespace TESTDB offline'; # enable autobackups after TSPITR is finished sql 'begin dbms_backup_restore.AutoBackupFlag(TRUE); end;'; } 正在執行內存腳本sql 語句: alter tablespace TESTDB read writesql 語句: alter tablespace TESTDB offlinesql 語句: begin dbms_backup_restore.AutoBackupFlag(TRUE); end;刪除自動實例 自動實例已刪除 已刪除輔助實例文件 /tmp/auxdata/VBOX66DB/datafile/o1_mf_temp_fovm638r_.tmp 已刪除輔助實例文件 /tmp/auxdata/VBOX66DB/onlinelog/o1_mf_3_fovm5vqb_.log 已刪除輔助實例文件 /tmp/auxdata/VBOX66DB/onlinelog/o1_mf_2_fovm5p7q_.log 已刪除輔助實例文件 /tmp/auxdata/VBOX66DB/onlinelog/o1_mf_1_fovm5krt_.log 已刪除輔助實例文件 /tmp/auxdata/VBOX66DB/datafile/o1_mf_sysaux_fovm0wsb_.dbf 已刪除輔助實例文件 /tmp/auxdata/VBOX66DB/datafile/o1_mf_undotbs1_fovm0wsx_.dbf 已刪除輔助實例文件 /tmp/auxdata/VBOX66DB/datafile/o1_mf_system_fovm0ws4_.dbf 已刪除輔助實例文件 /tmp/auxdata/VBOX66DB/controlfile/o1_mf_fovm0jqt_.ctl 完成 recover 于 2018-07-29 22:21:32RMAN>

⑧查看表的數據

SYS@vbox66in>alter tablespace testdb online;表空間已更改。SYS@vbox66in>conn scott/tiger; 已連接。 SCOTT@vbox66in>select * from test01;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 207499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 307521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 307566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 207654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 307698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 307782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 107788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 207839 KING PRESIDENT 1981-11-17 00:00:00 5000 107844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 307876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------7900 JAMES CLERK 7698 1981-12-03 00:00:00 950 307902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 207934 MILLER CLERK 7782 1982-01-23 00:00:00 1300 10已選擇14行。SCOTT@vbox66in>select * from test02;DEPTNO DNAME LOC ---------- -------------- -------------10 ACCOUNTING NEW YORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTONSCOTT@vbox66in>

此時發現數據已經全部恢復。

總結

以上是生活随笔為你收集整理的TSPITR方式数据库找回误操作丢失的数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。