[20140425]11GR2 truncate后恢复测试.txt

[20140425]11GR2 truncate后恢复测试.txt

--做一个truncate后恢复测试在11GR2下,我的测试环境使用使用dataguard。备用库打开flashback。
--可以利用在备用库flashback到truncate前,然后在传输到主库的方式看看。

1.建立测试环境:
-- 我的测试环境:primary的tnsnames别名test,standby主机的tnsnames别名testdg。数据库版本:11GR2.
-- 备用库打开在read only模式,并且real-time apply 应用日志。

DGMGRL> show configuration
Configuration - study
  Protection Mode: MaxPerformance
  Databases:
    test   - Primary database
    testdg - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS

SYS@test> @ver
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

SCOTT@testdg> select database_role,open_mode,protection_mode,force_logging,FLASHBACK_ON from v$database;
DATABASE_ROLE    OPEN_MODE            PROTECTION_MODE      FOR FLASHBACK_ON
---------------- -------------------- -------------------- --- ------------------
PHYSICAL STANDBY READ ONLY WITH APPLY MAXIMUM PERFORMANCE  YES YES

SCOTT@test> create table t1 as select rownum id,'test' name from dual connect by levelSCOTT@test> select current_scn ,sysdate from v$database;

CURRENT_SCN SYSDATE
----------- -------------------
3269885933 2014-04-25 09:32:39
--记下当前SCN,以及时间.如果生产系统出现,可以查询logminer确定时间以及scn.

SCOTT@test> truncate table t1;
Table truncated.

SCOTT@testdg> select count(*) from t1;
  COUNT(*)
----------
         0

2.现在开始恢复:
--首先停止日志应用。注意这个日志依旧在传输到备用库,只不过不apply。

DGMGRL> edit database testdg set state='APPLY-OFF';
Succeeded.

--关闭备用库
SYS@testdg> shutdown immediate ;
Database closed.
Database dismounted.
ORACLE instance shut down.

SYS@testdg> startup mount
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size                  2228784 bytes
Variable Size             939527632 bytes
Database Buffers          654311424 bytes
Redo Buffers                7344128 bytes
Database mounted.

SYS@testdg> select open_mode from v$database;
OPEN_MODE
--------------------
MOUNTED

SYS@testdg> select process,pid,status,group#,thread#,sequence#,block#,blocks,delay_mins from v$managed_standby order by thread#,group# ;
PROCESS       PID STATUS       GROUP#     THREAD#  SEQUENCE#     BLOCK#     BLOCKS DELAY_MINS
--------- ------- ------------ ------- ---------- ---------- ---------- ---------- ----------
ARCH        13806 CONNECTED    N/A              0          0          0          0          0
ARCH        13808 CONNECTED    N/A              0          0          0          0          0
ARCH        13812 CONNECTED    N/A              0          0          0          0          0
RFS         13831 IDLE         N/A              0          0          0          0          0
RFS         13823 IDLE         N/A              0          0          0          0          0
RFS         13821 IDLE         1                1         43         37          1          0
ARCH        13810 CLOSING      5                1         42      26624       1247          0

7 rows selected.

--观察rfs依旧在接收日志,但是不应用.

SYS@testdg> flashback database to scn 3269885933;
Flashback complete.

SYS@testdg> alter database open read only ;
Database altered.

SYS@testdg> select count(*) from scott.t1;
  COUNT(*)
----------
      1000
--可以发现现在在备用机器已经看的见.

3.取回数据到主库:
--建立db-link.

SCOTT@test> CREATE PUBLIC DATABASE LINK "TESTDG.COM" CONNECT TO scott IDENTIFIED BY btbtms  USING '192.168.101.115:1521/testdg.com';
Database link created.

SCOTT@test> select count(*) from scott.t1@testdg.com;
  COUNT(*)
----------
      1000

--实际上取回的方法很多,使用insert into t1 select * from t1;或者copy都可以.
SCOTT@test> help copy
COPY
----
Copies data from a query to a table in the same or another
database. COPY supports CHAR, DATE, LONG, NUMBER and VARCHAR2.
COPY {FROM database | TO database | FROM database TO database}
            {APPEND|CREATE|INSERT|REPLACE} destination_table
            [(column, column, column, ...)] USING query
where database has the following syntax:
     username[/password]@connect_identifier

4.测试使用impdp测试看看.这样大数据比较快一些.
CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS '/u01/app/oracle11g/admin/test/dpdump/';
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO EXP_FULL_DATABASE;
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO IMP_FULL_DATABASE;
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO SCOTT;

--方法1
$ impdp scott/btbtms DIRECTORY=DATA_PUMP_DIR LOGFILE=t1.log NETWORK_LINK=testdg.com TABLES=t1 content=data_only
Import: Release 11.2.0.3.0 - Production on Fri Apr 25 09:55:49 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SCOTT"."SYS_IMPORT_TABLE_01":  scott/******** DIRECTORY=DATA_PUMP_DIR LOGFILE=t1.log NETWORK_LINK=testdg.com TABLES=t1 content=data_only */
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
. . imported "SCOTT"."T1"                                  1000 rows
Job "SCOTT"."SYS_IMPORT_TABLE_01" successfully completed at 09:56:09

SCOTT@test> select count(*) from scott.t1;
  COUNT(*)
----------
      1000
--可以发现已经恢复.

--方法2,因为正常生产系统不能停,先放入另外一张表t1_rec.

$ impdp scott/btbtms DIRECTORY=DATA_PUMP_DIR LOGFILE=t1.log NETWORK_LINK=testdg.com TABLES=t1 REMAP_TABLE=t1:t1_rec

Import: Release 11.2.0.3.0 - Production on Fri Apr 25 09:59:15 2014

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SCOTT"."SYS_IMPORT_TABLE_01":  scott/******** DIRECTORY=DATA_PUMP_DIR LOGFILE=t1.log NETWORK_LINK=testdg.com TABLES=t1 REMAP_TABLE=t1:t1_rec */
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . imported "SCOTT"."T1_REC"                              1000 rows
Job "SCOTT"."SYS_IMPORT_TABLE_01" successfully completed at 09:59:24

SCOTT@test> select count(*) from scott.t1_rec;
  COUNT(*)
----------
      1000

5.恢复现场:
DGMGRL> edit database testdg set state='apply-on';
Succeeded.

SYS@testdg> select process,pid,status,group#,thread#,sequence#,block#,blocks,delay_mins from v$managed_standby order by thread#,group# ;
PROCESS       PID STATUS       GROUP#     THREAD#  SEQUENCE#     BLOCK#     BLOCKS DELAY_MINS
--------- ------- ------------ ------- ---------- ---------- ---------- ---------- ----------
ARCH        13806 CONNECTED    N/A              0          0          0          0          0
ARCH        13808 CONNECTED    N/A              0          0          0          0          0
ARCH        13812 CONNECTED    N/A              0          0          0          0          0
RFS         13823 IDLE         N/A              0          0          0          0          0
RFS         13831 IDLE         N/A              0          0          0          0          0
RFS         13821 IDLE         1                1         43      14594          1          0
ARCH        13810 CLOSING      5                1         42      26624       1247          0
MRP0        14044 APPLYING_LOG N/A              1         43      14594     102400          0

8 rows selected.
--可以发现MRP进程已经起来,并且在应用.

SCOTT@test> insert into t1 values (1001,'aaaa');
1 row created.

SCOTT@test> commit ;
Commit complete.

SYS@testdg> select * from scott.t1 where id=1001;
        ID NAME
---------- --------------------
      1001 aaaa
--OK!正确.

DGMGRL> show configuration
Configuration - study
  Protection Mode: MaxPerformance
  Databases:
    test   - Primary database
    testdg - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS

总结:
自己做一个workshop,主要目的为了以后出现问题,不会手忙脚乱.

时间: 2024-11-04 00:07:37

[20140425]11GR2 truncate后恢复测试.txt的相关文章

truncate后恢复包---FY_Recover_Data.pck 包的内容

truncate后恢复包---FY_Recover_Data.pck 包的内容                                                                                                                                                                                                                   

[20120813]11GR2下flashback data archive的测试.txt

[20120813]11GR2下flashback data archive的测试.txt         oracle 11GR2有一个新特性,就是flashback data archive,就是通过一个表空间记录表的一些变化,查询历史数据.自己知道这个特性,从来也没有测试过.实际上这个就是flashback table的扩展(个人认为)!. 测试如下: 1.测试环境: SQL> select * from v$version ; BANNER -----------------------

[20120925]truncate的恢复.txt

[20120925]truncate的恢复.txt 1.做好备份: RMAN> delete archivelog all completed before 'sysdate-8/24' ; RMAN> backup database format '/data/testtest/%U'; Starting backup at 2012-09-25 10:25:08using channel ORA_DISK_1channel ORA_DISK_1: starting full datafil

truncate表后恢复方法总结

truncate表后恢复方法总结   1.1  BLOG文档结构图   1.2  前言部分   1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① truncate操作后的恢复方法(重点)     Tips:        ① 若文章代码格式有错乱,推荐使用QQ.搜狗或360浏览器,也可以下载pdf格式的文档来查看,pdf文档下载地址:http://yunpan.cn/cdEQedhCs2kFz (提取码:

[20161019]数据文件offline后恢复到那个scn

[20161019]数据文件offline后恢复到那个scn号.txt --前一天别人问的问题,如果数据文件offline时,online要恢复,一般恢复到scn是多少,是offline时的scn吗? --总不见得如果长时间offline,要应用许多归档日志吧,通过测试说明问题: 1.环境: SYS@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ----------------------------

[20150408]只读表空间以及数据库恢复2.txt

[20150408]只读表空间以及数据库恢复2.txt --昨天检查时发现1个小问题,就是有1个表空间设置只读,也许某个时间打开变成读写,又设置会只读,而备份仅仅在第1次设置只读时做过1次, --按照道理如果使用原来的备份恢复会存在问题的,自己测试1下,顺便看看有什么变通的方法解决这个问题. 1.建立测试环境: SCOTT@test> @ &r/ver1 PORT_STRING                    VERSION        BANNER ----------------

[20150918]禁止用户truncate以及drop表.txt

[20150918]禁止用户truncate以及drop表.txt --一个需求要求禁止用户truncate以及drop表,实际上很简单仅仅建立一个触发器就ok了. CREATE OR REPLACE TRIGGER SYS.tri_prevent_drop_truncate    BEFORE TRUNCATE OR DROP ON DATABASE BEGIN    IF ora_dict_obj_type = 'TABLE' AND ora_dict_obj_owner = 'SCOTT'

[20150408]只读表空间以及数据库恢复3.txt

[20150408]只读表空间以及数据库恢复3.txt --昨天检查时发现1个小问题,就是有1个表空间设置只读,也许某个时间打开变成读写,又设置会只读,而备份仅仅在第1次设置只读时做过1次, --按照道理如果使用原来的备份恢复会存在问题的,自己测试1下,我上午已经测试了可以使用以前的做了来恢复,但是这里存在一些小问题, --我在第2次打开读写时,没有任何ddl,dml操作对这个表空间,如果存在这些操作会出现什么情况呢? --继续上午的测试. 1.建立测试环境: SCOTT@test> @ &

[20120926]DBFS测试.txt

[20120926]DBFS测试.txt     DBFS就是Oracle数据库11gR2中提供的能够在Linux操作系统中将Oracle数据库当成文件系统来使用的功能.在DBFS内部, 文件是以SecureFiles LOBs(对比与以前的BasicFiles LOBs)的形式存储在数据表中.        自己做一些测试:     在测试过程中参考了链接: http://juliandyke.wordpress.com/2011/11/02/dbfs/ SQL> select  * from