Oracle 数据库备份与恢复 flashback database

来源:互联网 发布:亿网域名 编辑:程序博客网 时间:2024/04/29 19:48
1. 检查归档和闪回是否已开启(sysdba 身份)
SQL> select name, log_mode, flashback_on from v$database;NAME      LOG_MODE     FLASHBACK_ON--------- ------------ ------------------ORCL      NOARCHIVELOG NOSQL> archive log list;数据库日志模式             非存档模式自动存档             禁用存档终点            USE_DB_RECOVERY_FILE_DEST最早的联机日志序列     8当前日志序列           10SQL> show parameter db_recovery_file_dest;NAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest                string      D:\oracle\product\10.2.0/flash_recovery_areadb_recovery_file_dest_size           big integer 1GSQL>  
2. 如果归档和闪回没有开启,则需要开启(sysdba 身份)
SQL> select name, log_mode, flashback_on from v$database;NAME      LOG_MODE     FLASHBACK_ON--------- ------------ ------------------ORCL      NOARCHIVELOG NOSQL> shutdown immediate;数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。SQL> startup mount;ORACLE 例程已经启动。Total System Global Area  452984832 bytesFixed Size                  1249512 bytesVariable Size             130027288 bytesDatabase Buffers          314572800 bytesRedo Buffers                7135232 bytes数据库装载完毕。SQL> alter database archivelog;数据库已更改。SQL> alter database flashback on;数据库已更改。SQL> alter system set db_recovery_file_dest='D:/Oracle/flash_recovery_area' scope=both;系统已更改。SQL> alter system set db_recovery_file_dest_size=2G scope=both;系统已更改。SQL> alter system set db_flashback_retention_target=2880 scope=both;系统已更改。SQL> select name, log_mode, flashback_on from v$database;NAME      LOG_MODE     FLASHBACK_ON--------- ------------ ------------------ORCL      ARCHIVELOG   YESSQL> archive log list;数据库日志模式            存档模式自动存档             启用存档终点            USE_DB_RECOVERY_FILE_DEST最早的联机日志序列     9下一个存档日志序列   11当前日志序列           11SQL> show parameter db_recovery_file_dest;NAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest                string      D:/Oracle/flash_recovery_areadb_recovery_file_dest_size           big integer 2GSQL> show parameter db_flashback;NAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------db_flashback_retention_target        integer     2880SQL> alter database open;数据库已更改。SQL>  
# 备注
db_recovery_file_dest : 指定闪回恢复区的位置,需要提前手动创建好目录
db_recovery_file_dest_size : 指定闪回恢复区的可用空间大小
db_flashback_retention_target : 指定数据库可以回退的时间,单位为分钟,默认1天(1440分钟),配合db_recovery_file_dest_size一起使用,也就是说闪回恢复区要能够放得下在这段时间内所产生的需要回退的数据
3. 添加测试数据  
SQL> conn scott/tiger已连接。SQL> create table t1(id int, name varchar2(10));表已创建。SQL> create table t2(id int, name varchar2(10));表已创建。SQL> insert into t1(id, name) values(1, 'a');已创建 1 行。SQL> insert into t2(id, name) values(2, 'b');已创建 1 行。SQL> commit;提交完成。SQL> create or replace procedure p1  2  is  3  begin  4    dbms_output.put_line('======= p1 =======');  5  end;  6  /过程已创建。SQL> select * from t1;        ID NAME---------- ----------         1 aSQL> select * from t2;        ID NAME---------- ----------         2 bSQL> set serveroutput on;SQL> execute p1;======= p1 =======PL/SQL 过程已成功完成。SQL>  
4. 修改测试数据
SQL> conn scott/tiger已连接。SQL> select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') time from dual;TIME-------------------2014-09-06 12:17:26SQL> delete from t1;已删除 1 行。SQL> alter table t2 add age int default 20;表已更改。SQL> drop procedure p1;过程已删除。SQL> commit;提交完成。SQL> select * from t1;未选定行SQL> select * from t2;        ID NAME              AGE---------- ---------- ----------         2 b                  20SQL> set serveroutput on;SQL> execute p1;BEGIN p1; END;      *第 1 行出现错误:ORA-06550: 第 1 行, 第 7 列:PLS-00201: 必须声明标识符 'P1'ORA-06550: 第 1 行, 第 7 列:PL/SQL: Statement ignoredSQL>  
5. 恢复数据库到修改之前
SQL> conn / as sysdba已连接。SQL> shutdown immediate;数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。SQL> startup mount;ORACLE 例程已经启动。Total System Global Area  452984832 bytesFixed Size                  1249512 bytesVariable Size             134221592 bytesDatabase Buffers          310378496 bytesRedo Buffers                7135232 bytes数据库装载完毕。SQL> select sum(percent_space_used)/100 from v$flash_recovery_area_usage;SUM(PERCENT_SPACE_USED)/100---------------------------                      .0131SQL> flashback database to timestamp to_timestamp('2014-09-06 12:17:26', 'yyyy-mm-dd hh24:mi:ss');闪回完成。SQL> alter database open resetlogs;数据库已更改。SQL> conn scott/tiger已连接。SQL> select * from t1;        ID NAME---------- ----------         1 aSQL> select * from t2;        ID NAME---------- ----------         2 bSQL> set serveroutput on;SQL> execute p1;======= p1 =======PL/SQL 过程已成功完成。SQL>  
6. 关闭闪回和归档
SQL> conn / as sysdba已连接。SQL> shutdown immediate;数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。SQL> startup mount;ORACLE 例程已经启动。Total System Global Area  452984832 bytesFixed Size                  1249512 bytesVariable Size             134221592 bytesDatabase Buffers          310378496 bytesRedo Buffers                7135232 bytes数据库装载完毕。SQL> alter database flashback off;数据库已更改。SQL> alter database noarchivelog;数据库已更改。SQL> select name, log_mode, flashback_on from v$database;NAME      LOG_MODE     FLASHBACK_ON--------- ------------ ------------------ORCL      NOARCHIVELOG NOSQL> alter database open;数据库已更改。SQL>  

# 参考  
Oracle Flashback 技术 总结   
ORA-00265: 要求实例恢复, 无法设置 ARCHIVELOG 模式
    
0 0
原创粉丝点击