备份恢复之Flashback.docx
- 文档编号:4018669
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:21
- 大小:22.18KB
备份恢复之Flashback.docx
《备份恢复之Flashback.docx》由会员分享,可在线阅读,更多相关《备份恢复之Flashback.docx(21页珍藏版)》请在冰豆网上搜索。
备份恢复之Flashback
总结oracleflashback特性
王力20090401
Oracle9i只能够使用flashbackquery。
10G依然可以使用闪回查询,与9i没有变化。
但flashback功能大幅强化,新增很多特性;如闪回表,闪回数据库等等。
11g又增加了flashbackarchive,可以提供不依靠undo的闪回功能。
通过实验完成闪回功能测试,仅供参考。
10g默认启用除了闪回数据库之外的所有闪回功能,如果想打开Flashbackdatabase,要使用闪回区。
Flashbackdatabase使用flashbacklog&onlinelog/archivelog实现数据库闪回,flashbackarchive通过永久tablespace实现闪回。
其他都是通过undo段实现闪回。
1ONE-Flashbackquery
1.1基于scn的查询
SQL>selectdbms_flashback.get_system_change_numberfromdual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1032013
SQL>selectsalfromempwhereename='SCOTT';
SAL
----------
3000
SQL>UPDATEEMPSETSAL=5000WHEREENAME='SCOTT';
已更新1行。
SQL>COMMIT;
提交完成。
SQL>selectsalfromempasofscn1032013whereename='SCOTT';
SAL
----------
3000
1.2基于时间的查询
SQL>selectsalfromscott.empasoftimestamp
2to_timestamp('2009033009:
02:
00','yyyymmddhh24:
mi:
ss')
3whereename='SCOTT';
SAL
----------
3000
1.3可以创建闪回表
SQL>createtablef_empasselect*fromempasofscn1032013;
表已创建。
说明:
1.要求,使用自动管理的undo表空间,但不要求DB处于归档模式;
2.使用当前数据字典,所以如果表结构发生变化,无法闪回;
3.droptruncate等ddl操作无法闪回;
4.受到参数undo_retention的限制,之前的数据,不能保证闪回成功;
2TWO-Flashbackdrop
必须打开回收站
SQL>showparameterrecyclebin;
NAMETYPEVALUE
-----------------------------------------------------------------
recyclebinstringon
2.1flashbackdroptable
SQL>connscott/tiger
已连接。
SQL>droptableemp;
表已删除。
SQL>showrecyclebin;
ORIGINALNAMERECYCLEBINNAMEOBJECTTYPEDROPTIME
-----------------------------------------------------------------------------
EMPBIN$t0EW1G2HQTGSEtruT+sqGA==$0TABLE2009-03-31:
09:
20:
33
SQL>flashbacktableemptobeforedrop;
闪回完成。
2.2如果有多张表重名,先恢复后删除的
SQL>createtableemp2asselect*fromemp;
表已创建。
SQL>droptableemp2;
表已删除。
SQL>createtableemp2asselect*fromemp;
表已创建。
SQL>droptableemp2;
表已删除。
SQL>showrecyclebin;
ORIGINALNAMERECYCLEBINNAMEOBJECTTYPEDROPTIME
-----------------------------------------------------------------------------
EMP2BIN$7nkDVtHfTJKzFro8rW6TVg==$0TABLE2009-03-31:
09:
21:
57
EMP2BIN$hHe4RkC/TDOTiuUbrpvXlQ==$0TABLE2009-03-31:
09:
21:
43
SQL>flashbacktableemp2tobeforedrop;
闪回完成。
SQL>showrecyclebin;
ORIGINALNAMERECYCLEBINNAMEOBJECTTYPEDROPTIME
-----------------------------------------------------------------------------
EMP2BIN$hHe4RkC/TDOTiuUbrpvXlQ==$0TABLE2009-03-31:
09:
21:
43
SQL>flashbacktableemp2tobeforedrop;
flashbacktableemp2tobeforedrop
*
第1行出现错误:
ORA-38312:
原始名称已被现有对象使用
SQL>flashbacktableemp2tobeforedroprenametoemp3;
闪回完成。
2.3索引会同时恢复,但是名字不会更改;
SQL>createindextestonemp2(ename);
索引已创建。
SQL>droptableemp2;
表已删除。
SQL>flashbacktableemp2tobeforedrop;
闪回完成。
SQL>selecttable_name,index_name,statusfromuser_indexes
2wheretable_name='EMP2';
TABLE_NAMEINDEX_NAMESTATUS
--------------------------------------------------------------------
EMP2BIN$QBtcZKDFSVShF2Pi5ygBPg==$0VALID
SQL>ALTERINDEX"BIN$QBtcZKDFSVShF2Pi5ygBPg==$0"renametotest;
索引已更改。
2.4说明
1.purgerecyclebin;清空回收站
2.droptablespaceincludingcontentsanddatafiles;数据不入回收站
3.dropusercascade;数据不入回收站
3Three-flashbacktable
3.1Flashbackdml
SQL>createtableemp2asselect*fromemp;
表已创建。
SQL>selectdbms_flashback.get_system_change_numberfromdual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1034237
SQL>updateemp2setsal=1whereename='SCOTT';
已更新1行。
SQL>COMMIT;
提交完成。
SQL>selectdbms_flashback.get_system_change_numberfromdual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1034247
SQL>updateemp2setsal=2whereename='SCOTT';
已更新1行。
SQL>commit;
提交完成。
SQL>selectdbms_flashback.get_system_change_numberfromdual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1034258
SQL>updateemp2setsal=3whereename='SCOTT';
已更新1行。
SQL>COMMIT;
提交完成。
SQL>selectdbms_flashback.get_system_change_numberfromdual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1034271
SQL>updateemp2setsal=4whereename='SCOTT';
已更新1行。
SQL>COMMIT;
提交完成。
SQL>flashbacktableemp2toscn1034258;
flashbacktableemp2toscn1034258
*
第1行出现错误:
ORA-08189:
因为未启用行移动功能,不能闪回表
SQL>altertableemp2enablerowmovement;
表已更改。
SQL>flashbacktableemp2toscn1034258;
闪回完成。
SQL>selectsalfromemp2whereename='SCOTT';
SAL
----------
2
SQL>flashbacktableemp2toscn1034247;
闪回完成。
SQL>selectsalfromemp2whereename='SCOTT';
SAL
----------
1
SQL>flashbacktableemp2toscn1034271;
闪回完成。
SQL>selectsalfromemp2whereename='SCOTT';
SAL
----------
3
也可以根据时间闪回
--闪回到5分钟之前
flashbacktableemptotimestampsystimestamp-interval'5'minute;
flashbacktableemptotimestampto_timestamp('2008061010:
05:
00','yyyymmddhh24:
mi:
ss')
2.Ddl无法闪回
SQL>selectdbms_flashback.get_system_change_numberfromdual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1033975
SQL>truncatetableemp2;
表被截断。
SQL>flashbacktableemp2toscn1033975;
flashbacktableemp2toscn1033975
*
第1行出现错误:
ORA-01466:
无法读取数据-表定义已更改
3.2说明
1.DDL操作无法闪回
2.必须enablerowmovement;
3.索引同时闪回
4.如果表上有触发器,触发器实效。
可以使用enabletriggers关键字使flashback同时启动trigger;
4Four-Flashbackversion
通过flashbackversion可以查到表上发生了哪些dml操作
SQL>truncatetabletest;
表被截断。
SQL>insertintotestvalues(sysdate);
已创建1行。
SQL>/
已创建1行。
SQL>/
已创建1行。
SQL>commit;
提交完成。
SQL>insertintotestvalues(sysdate);
已创建1行。
SQL>/
已创建1行。
SQL>/
已创建1行。
SQL>commit;
提交完成。
SQL>insertintotestvalues(sysdate);
已创建1行。
SQL>/
已创建1行。
SQL>/
已创建1行。
SQL>commit;
提交完成。
SQL>altersessionsetnls_date_format='yyyy-mm-ddhh24:
mi:
ss';
会话已更改。
伪列(pseudo_columns)包括以下:
VERSIONS_STARTSCN:
创建行时具有的SCN
VERSIONS_STARTTIME:
创建行时此版本的时间标记
VERSIONS_ENDSCN:
此行的最后一次操作的SCN
VERSIONS_ENDTIME:
此行的最后一次操作的时间
VERSIONS_XID:
创建此版本的事务ID
VERSIONS_OPERATION:
此事务完成的操作:
I:
INSERT、U:
UPDATE、D:
DELETE
SQL>selectversions_starttime,versions_startscn,versions_xid,versions_operation
2fromtestversionsbetweentimestampminvalueandmaxvalue
3*orderby1
SQL>/
VERSIONS_STARTTIMEVERSIONS_STARTSCNVERSIONS_XIDV
----------------------------------------------------------------
31-3月-0902.02.29下午104346904000C0062010000I
31-3月-0902.02.29下午104346904000C0062010000I
31-3月-0902.02.29下午104346904000C0062010000I
31-3月-0902.02.38下午104347305001D0093010000I
31-3月-0902.02.38下午104347305001D0093010000I
31-3月-0902.02.38下午104347305001D0093010000I
31-3月-0902.02.44下午104347603000D007C010000I
31-3月-0902.02.44下午104347603000D007C010000I
31-3月-0902.02.44下午104347603000D007C010000I
已选择9行。
SQL>truncatetabletest;
表被截断。
SQL>selectversions_starttime,versions_startscn,versions_xid,versions_operation
2fromtestversionsbetweentimestampminvalueandmaxvalue
3orderby1
4/
未选定行
说明:
1.只能分析dml操作
2.如果发生了ddl操作,之前dml操作,无法查询
3.查询也可以指定scn或者timestamp
versionsbetweenscnxxxandxxx;
versionsbetweentimestampto_date(xxxxxxx)andto_date(xxxxxxx);
5Five-Flashbacktransactionquery
通过flashbackversion可以找到事物id,而flashbacktransaction则可以找到事物的undosql
通过undosql可以会滚已经提交的事物;
SQL>deletefromempwhereename='SCOTT';
已删除1行。
SQL>COMMIT;
提交完成。
SQL>deletefromempwheredeptno=10;
已删除3行。
SQL>commit;
提交完成。
SQL>selectversions_starttime,versions_startscn,versions_xid,versions_operation
2fromempversionsbetweentimestampminvalueandmaxvalue
3*orderby1
SQL>/
VERSIONS_STARTTIMEVERSIONS_STARTSCNVERSIONS_XIDV
----------------------------------------------------------------
31-3月-0902.19.53下午10441960A001C0067010000D
31-3月-0902.20.23下午1044207030029007C010000D
31-3月-0902.20.23下午1044207030029007C010000D
31-3月-0902.20.23下午1044207030029007C010000D
SQL>descflashback_transaction_query;
名称是否为空?
类型
-----------------------------------------------------------------------------
XIDRAW(8)
START_SCNNUMBER
START_TIMESTAMPDATE
COMMIT_SCNNUMBER
COMMIT_TIMESTAMPDATE
LOGON_USERVARCHAR2(30)
UNDO_CHANGE#NUMBER
OPERATIONVARCHAR2(32)
TABLE_NAMEVARCHAR2(256)
TABLE_OWNERVARCHAR2(32)
ROW_IDVARCHAR2(19)
UNDO_SQLVARCHAR2(4000)
SQL>selectundo_sqlfromflashback_transaction_query
2wherexid=hextoraw('0A001C0067010000');
selectundo_sqlfromflashback_transaction_query
*
第1行出现错误:
ORA-01031:
权限不足
SQL>conn/assysdba
grantSELECTANYTRANSACTIONtoscott
SQL>connscott/tiger
已连接。
SQL>selectundo_sqlfromflashback_transaction_query
2wherexid=hextoraw('0A001C0067010000');
UNDO_SQL
--------------------------------------------------------------------------------
insertinto"SCOTT"."EMP"("EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","D
EPTNO")values('7788','SCOTT','ANALYST','7566',TO_DATE('19-4月-87','DD-MON-RR
'),'5000',NULL,'20');
SQL>selectundo_sqlfromflashback_transaction_query
2wherexid=hextoraw('030029007C010000');
UNDO_SQL
--------------------------------------------------------------------------------
insertinto"SCOTT"."EMP"("EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","D
EPTNO")values('7934','MILLER','CLERK','7782',TO_DATE('23-1月-82','DD-MON-RR'
),'1300',NULL,'10');
insertinto"SCOTT"."EMP"("EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","D
EPTNO")values('7839','KING','PRESIDENT',NULL,TO_DATE('17-11月-81','DD-MON-RR'
),'5000',NULL,'10');
insertinto"SCOTT"."EMP"("EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","D
EPTNO")values('7782','CLARK','MANAGER','7839',TO_DATE('09-6月-81','DD-MON-RR
'),'2450',NULL,'10');
SQL>insertinto"SCOTT"."EMP"("EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO")
2values('7788','SCOTT','ANALYST','7566',TO_DATE('19-4月-87','DD-MON-RR'),'5000',NULL,'20');
已创建1行。
SQL>insertinto"SCOTT"."EMP"("EMPNO","ENAME","JOB","MGR","HIRE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 备份 恢复 Flashback