oracle归档和闪回

来源:互联网 发布:centos中文输入法下载 编辑:程序博客网 时间:2024/05/22 00:53
(要求安装oracle 10g 企业版及10g以上,其他版本会出错)
---------------归档------------------------------------------
Oracle可以运行在2种模式下:归档模式(archivelog)和非归档模式(noarchivelog)
归档模式可以提高Oracle数据库的可恢复性,生产数据库都应该运行在此模式下,归档模式应该和相应的备份策略相结合,只有归档模式没有相应的备份策略只会带来麻烦。


如何启用和关闭数据库的归档模式:
1.shutdown normal或shutdown immediate关闭数据库
sqlplus "/ as sysdba"
SQL>shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.


2.启动数据库到mount状态
SQL>startup mount;
ORACLE instance started.
Total System Global Area  101782828 bytes
Fixed Size                   451884 bytes
Variable Size              37748736 bytes
Database Buffers           62914560 bytes
Redo Buffers                 667648 bytes
Database mounted.


3.启用或停止归档模式
启用归档模式,此处使用alter database archivelog 命令。
SQL>alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log modeArchive ModeAutomatic archival             Enabled
Archive destination            /opt/oracle/oradata/conner/archive
Oldest online log sequence     148
Next log sequence to archive   151
Current log sequence           151


停止归档模式,此处使用alter database noarchivelog命令。
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area  101782828 bytes
Fixed Size                   451884 bytes
Variable Size              37748736 bytes
Database Buffers           62914560 bytes
Redo Buffers                 667648 bytes
Database mounted.


SQL>alter database noarchivelog;
Database altered.
SQL> alter database open;
Database altered.


SQL> archive log list;
Database log modeNo Archive ModeAutomatic archival             Enabled
Archive destination            /opt/oracle/oradata/conner/archive
Oldest online log sequence     149


4.修改相应的初始化参数
Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式。
在pfile/spfile中设置如下参数:
log_archive_start = true
重启数据库此参数生效,此时数据库处于自动归档模式。
也可以在数据库启动过程中,手工执行:
archive log start
使数据库启用自动归档,但是重启后数据库仍然处于手工归档模式。
---------------闪回----------------------------------------------------
Oracle10g 引入的闪回技术包含
1 闪回查询(flashback query)
2闪回版本查询(flashback version query) 
3闪回事务查询(flashback transcation query)
4闪回表(flashback table)
5闪回删除(flashback drop) 
6闪回数据库(flashback database)。


其中闪回查询、闪回版本查询、闪回事务查询属于行级闪回。这三种闪回技术全部依赖于undo表空间中的undo数据。
闪回表、闪回删除属于表级闪回。闪回表也是从undo中读取数据,闪回删除是依赖recyclebin 
闪回数据库属于数据库级闪回。


Flashback query是最基本的闪回功能,直接利用回滚段中的旧数据构造某一个时刻的一致性数据版本。只适合单个表数据恢复。对事务中相关多表数据恢复不适合,无法确保相关数据的参照完整性。Flashback query不需要使用resetlogs打开数据库。闪回查询让你能够看到过去某个时间的的数据。能够让你查看和重构以为意外被删除或者该表的数据。你可以根据SCN号和具体时间进行数据库查询。参数undo_retention 表明在回滚段中旧的信息被覆盖之前保留的时间。通过使用AS OF字句,你可以查询一个表中不同时段的快照。
指定AS OF能够通过指定的SCN或者时间戳来获取所有行的单个版本,如果你指定SCN,则后面必须跟数字,如果你指定timestamp,则后面必须指定一个具体时间,Oralce数据会返回在该时间点或者SCN号时的数据。


1.根据scn的闪回查询
初始化数据
SQL> create table t(a number,b number);
Table created.
SQL> insert into t values(1,1);
1 row created.
SQL> insert into t values(2,2);
1 row created.
SQL> insert into t values(3,3);
1 row created.
SQL> commit;
Commit complete.


2、查询当前时间、当前SCN号
SQL> alter session set nls_date_format='yyyymmdd hh24:mi:ss';
Session altered.
SQL> select sysdate from dual; ---获取当前时间
SYSDATE
-----------------
20140313 22:37:48
SQL> select dbms_flashback.get_system_change_number from dual; ---获取当前SCN
GET_SYSTEM_CHANGE_NUMBER
------------------------
                 1136165


3.删除部分数据
SQL> delete from t where b=3;
1 row deleted.
SQL> commit;
Commit complete.


4.根据SCN或者时间进行闪回查询
SQL> select * from t;
         A          B
---------- ----------
         1          1
         2          2
SQL> select * from t as of scn 1136165;  ---根据SCN号得到在该SCN号时的数据情况
         A          B
---------- ----------
         1          1
         2          2
         3          3
SQL> select * from t as of timestamp to_timestamp('20150813 22:37:48','yyyymmdd hh24:mi:ss'); --得到具体时间点的数据
         A          B
---------- ----------
         1          1
         2          2
         3          3


5.SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
                 1169526


SQL> flashback table t to scn 1169506;  ----闪回表的时候,需要对表执行row movment
flashback table t to scn 1169506
                *
ERROR at line 1:
ORA-08189: cannot flashback the table because row movement is not enabled


SQL> alter table t enable row movement;
Table altered.
SQL> flashback table t to scn 1169506;
Flashback complete.








----------------------------------------------------------------------------------------------
首先开启数据库归档模式
SQL> startup mount;
ORACLE instance started.
Total System Global Area  314572800 bytes
Fixed Size                  1219184 bytes
Variable Size              83887504 bytes
Database Buffers          226492416 bytes
Redo Buffers                2973696 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.


SQL> archive log list
Database log mode              Archive Mode  --归档模式
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     29--最老的在线日志
Next log sequence to archive   31--将要归档的日志
Current log sequence           31 ---当前日志
SQL> alter database open;
Database altered.
SQL> select SEQUENCE#,STATUS from v$log;


 SEQUENCE# STATUS
---------- ----------------
        31 CURRENT---当前日志
        29 INACTIVE
        30 INACTIVE
SQL> alter system set log_archive_dest_1='location=/u01/app/oracle/arch' scope=spfile;  --修改归档日志的目录
System altered.
SQL> show parameter log_archive_format
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_format                   string      %t_%s_%r.dbf
%s: 日志序列号:
%t: 重做线程编号.
%d: 数据库ID号
%r RESETLOGS的ID值.




设置闪回数据库参数
设置数据库闪回的三个参数:
db_recovery_file_dest_size  闪回恢复区大小
db_recovery_file_dest  闪回恢复区路径,该参数可以任意指定,闪回日志记录了数据库的前影像,该日志不会进行归档,一但停用数据库的闪回功能,该目录下的日志会
自动清除
db_flashback_retention_target  保留恢复最近多长时间的数据,单位为分钟。
SQL> alter system set db_recovery_file_dest_size=5G;
System altered.
SQL> alter system set db_recovery_file_dest='/home/oracle/flash';
System altered.
SQL> alter system set db_flashback_retention_target=2440;  --分钟  2天,系统默认是1天
System altered.


开启数据库闪回功能
SQL> startup mount
ORACLE instance started.
Total System Global Area  314572800 bytes
Fixed Size                  1219184 bytes
Variable Size              75498896 bytes
Database Buffers          234881024 bytes
Redo Buffers                2973696 bytes
Database mounted.
SQL> alter database flashback on;
Database altered.
SQL> alter database open;
Database altered.
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
----------------------------------------------------------------------------------






------------------------------------------------------------------------------------------------------
SQL> insert into t values(1,1);
1 row created.
SQL> commit;
Commit complete.
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
-----------------------
                 1242503
SQL> insert into t values(2,2);
1 row created.
SQL> commit;
Commit complete.
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
-----------------------
                 1242520
SQL> insert into t values(3,3);
1 row created.
SQL> commit;
Commit complete.
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
                 1242533
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area  314572800 bytes
Fixed Size                  1219184 bytes
Variable Size              75498896 bytes
Database Buffers          234881024 bytes
Redo Buffers                2973696 bytes
Database mounted.
SQL> flashback database to scn 1242503;----闪回到第一次commit的时候
Flashback complete.
SQL> alter database open resetlogs;
Database altered.
SQL> select * from t;  ---闪回数据库测试正常
         A          B
---------- ----------
         1          1
SQL> 
---------------------------------------
TO timestamp---例子
 flashback database to timestamp to_date('2011-07-12 10:20:59','yyyy-mm-dd hh24:mi:ss');








《《《《《《
---当你删除一张表,数据库不是立刻删除表所占的空间,数据库会重命名表并把它和相关的对象放在回收站里面,防止表被误删除之后,能够进行恢复,这个特征就叫做闪回删除,使用
flashbackup table继续表的恢复


如果想要开启闪回删除表功能,需在数据库开始回收站功能。
SQL> alter system set recyclebin=on ;
System altered.
SQL> show parameter recyclebin
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      ON


回收站中的对象命名格式:
BIN$unique_id$version
SQL> select object_name,original_name from recyclebin;
OBJECT_NAME                    ORIGINAL_NAME
------------------------------ --------------------------------
BIN$9JC9w+cttHDgQKjAN/lQpQ==$0 T


删除回收站
purge命令能够永久的从回收站中删除对象,从回收站删除的对象就不能再用flashback命令恢复
语法:Purge {table |index }
语法:purge tablespace [user ]
语法:purge [USER_|DBA_]recyclebin
PURGE TABLESPACE  清除指定表空间内的所有回收站对象。存在于其他表空间的互相关联的对象也会被清除。也可以指定USER清除相应用户的对象。
--PURGE TABLESPACE example USER oe;
PURGE RECYCLEBIN  清除当前用户的所有对象。
PURGE DBA_RECYCLEBIN 清除所有对象,需要有足够的系统权限或者SYSDBA的权限。
》》》》》




----------------查询回收站,恢复-----------------------------
SQL> create table t(a number,b number);
Table created.
SQL> insert into t values(1,1);
1 row created.
SQL> commit;
Commit complete.
SQL> drop table t;
Table dropped.
SQL> create table t(a number,b number);
Table created.
SQL> insert into t values(2,2);
1 row created.
SQL> commit;
Commit complete.
SQL> drop table t;
Table dropped.
SQL> select object_name,droptime from recyclebin; 


OBJECT_NAME                    DROPTIME
------------------------------ -------------------
BIN$9JC9w+cwtHDgQKjAN/lQpQ==$0 2014-03-14:22:30:10
BIN$9JC9w+cvtHDgQKjAN/lQpQ==$0 2014-03-14:22:31:10




SQL> flashback table "BIN$9JC9w+cvtHDgQKjAN/lQpQ==$0" to before drop;-----表恢复完成
Flashback complete.


SQL> select * from t;


        A          B
---------- ----------
         1          1
SQL> 
0 0
原创粉丝点击