侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

日志挖掘和基于时间点的克隆恢复

2023-12-05 星期二 / 0 评论 / 0 点赞 / 79 阅读 / 18962 字

之前我们演示过完全恢复和不完全恢复,在实际生产中往往用户误操作之后并不能准确提供误操作的时间点,所以在这种情况下用上面的不完全恢复就无法操作了。 作为dba可以使用日志挖掘来根据用户提供的部分信息比如

    之前我们演示过完全恢复和不完全恢复,在实际生产中往往用户误操作之后并不能准确提供误操作的时间点,所以在这种情况下用上面的不完全恢复就无法操作了。

    作为dba可以使用日志挖掘来根据用户提供的部分信息比如表名,表空间名称来找出误操作的时间点或者scn号。

    而且在实际生产环境中大部分都是7*24小时运行的,不允许我们对数据库做关闭操作,所以可以使用克隆来操作。

1    先rman 全库备份

RMAN> backup database;Starting backup at 14-DEC-16using target database control file instead of recovery catalogallocated channel: ORA_DISK_1channel ORA_DISK_1: SID=41 device type=DISKchannel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00002 name=/data/vdb/u01/product/oracle/oradata/myyun1/sysaux01.dbfinput datafile file number=00001 name=/data/vdb/u01/product/oracle/oradata/myyun1/system01.dbfinput datafile file number=00003 name=/data/vdb/u01/product/oracle/oradata/myyun1/undotbs01.dbfinput datafile file number=00005 name=/data/vdb/u01/product/oracle/oradata/myyun1/test.dbfinput datafile file number=00006 name=/data/vdb/u01/product/oracle/oradata/myyun1/test2.dbfinput datafile file number=00004 name=/data/vdb/u01/product/oracle/oradata/myyun1/users01.dbfinput datafile file number=00007 name=/data/vdb/u01/product/oracle/oradata/myyun1/space2.dbfchannel ORA_DISK_1: starting piece 1 at 14-DEC-16channel ORA_DISK_1: finished piece 1 at 14-DEC-16piece handle=/data/vdb/u01/product/oracle/fast_recovery_area/MYYUN1/backupset/2016_12_14/o1_mf_nnndf_TAG20161214T211757_d52kn5vb_.bkp tag=TAG20161214T211757 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:15channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setincluding current control file in backup setincluding current SPFILE in backup setchannel ORA_DISK_1: starting piece 1 at 14-DEC-16channel ORA_DISK_1: finished piece 1 at 14-DEC-16piece handle=/data/vdb/u01/product/oracle/fast_recovery_area/MYYUN1/backupset/2016_12_14/o1_mf_ncsnf_TAG20161214T211757_d52know4_.bkp tag=TAG20161214T211757 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 14-DEC-16

2    删除原来的表

select * from tmp_wzl_20161214_1;EMPNO	ENAME	JOB	MGR	HIREDATE	SAL	COMM	DEPTNO7369	SMITH	CLERK	7902	1980-12-17	800.00		207499	ALLEN	SALESMAN	7698	1981-02-20	1600.00	300.00	307521	WARD	SALESMAN	7698	1981-02-22	1250.00	500.00	307566	JONES	MANAGER	7839	1981-04-02	3570.00		207654	MARTIN	SALESMAN	7698	1981-09-28	1250.00	1400.00	307698	BLAKE	MANAGER	7839	1981-05-01	2850.00		307782	CLARK	MANAGER	7839	1981-06-09	2450.00		107788	SCOTT	ANALYST	7566	1987-04-19	3500.00		207839	KING	PRESIDENT		1981-11-17	6000.00		107844	TURNER	SALESMAN	7698	1981-09-08	1500.00	0.00	307876	ADAMS	CLERK	7788	1987-05-23	1500.00		207900	JAMES	CLERK	7698	1981-12-03	950.00		307902	FORD	ANALYST	7566	1981-12-03	3500.00		207934	MILLER	CLERK	7782	1982-01-23	1300.00		10drop table tmp_wzl_20161214_1 purge;# 表已经删除

3    查看当前使用的是哪个日志文件

select group#,status from v$log;

select * from v$logfile;

4    日志挖掘

    4.1 设置挖掘的日志文件

    

SQL> exec dbms_logmnr.add_logfile('/data/vdb/u01/product/oracle/oradata/myyun1/redo01.log');PL/SQL procedure successfully completed.

    4.2 开始分析日志数据

SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);PL/SQL procedure successfully completed.

    4.3    查看日志分析后的数据

SQL> select scn,sql_redo,sql_undo from v$logmnr_contents where table_name ='TMP_WZL_20161214_1';       SCN SQL_REDO								  SQL_UNDO---------- ---------------------------------------------------------------------- ------------------------------------------------------------------------------------------   2604438 create table tmp_wzl_20161214_1 as select * from scott.emp	   ;   2604749 drop table tmp_wzl_20161214_1 purge# 能看出来删除表的动作的scn号是2604749 ,克隆恢复的时候从2604748开始

    4.4 关闭日志挖掘,回收内存

SQL> exec dbms_logmnr.end_logmnr;PL/SQL procedure successfully completed.

5    配置克隆新数据库所需要的环境

    5.1 配置监听

保存

监听配置的代码:

[oracle@myyun1 admin]$ cat listener.ora # listener.ora Network Configuration File: /data/vdb/u01/product/oracle/11g/network/admin/listener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER =  (SID_LIST =    (SID_DESC =      (GLOBAL_DBNAME = base1)      (ORACLE_HOME = /data/vdb/u01/product/oracle/11g)      (SID_NAME = myyun1)    )    (SID_DESC =      (GLOBAL_DBNAME = base2)      (ORACLE_HOME = /data/vdb/u01/product/oracle/11g)      (SID_NAME = tmyyun1)    )  )LISTENER =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = myyun1)(PORT = 1521))  )ADR_BASE_LISTENER = /data/vdb/u01/product/oracle

tnsnames.ora 文件如下:

[oracle@myyun1 admin]$ cat tnsnames.ora # tnsnames.ora Network Configuration File: /data/vdb/u01/product/oracle/11g/network/admin/tnsnames.ora# Generated by Oracle configuration tools.b1 =  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = TCP)(HOST = myyun1)(PORT = 1521))    )    (CONNECT_DATA =      (SERVICE_NAME = base1)    )  )b2 =  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = TCP)(HOST = myyun1)(PORT = 1521))    )    (CONNECT_DATA =      (SERVICE_NAME = base2)    )  )

    启动监听

[oracle@myyun1 admin]$ lsnrctl start[oracle@myyun1 admin]$ lsnrctl statusLSNRCTL for Linux: Version 11.2.0.3.0 - Production on 14-DEC-2016 23:19:42Copyright (c) 1991, 2011, Oracle.  All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myyun1)(PORT=1521)))STATUS of the LISTENER------------------------Alias                     LISTENERVersion                   TNSLSNR for Linux: Version 11.2.0.3.0 - ProductionStart Date                14-DEC-2016 23:04:12Uptime                    0 days 0 hr. 15 min. 30 secTrace Level               offSecurity                  ON: Local OS AuthenticationSNMP                      OFFListener Parameter File   /data/vdb/u01/product/oracle/11g/network/admin/listener.oraListener Log File         /data/vdb/u01/product/oracle/diag/tnslsnr/myyun1/listener/alert/log.xmlListening Endpoints Summary...  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=myyun1)(PORT=1521)))Services Summary...Service "base1" has 1 instance(s).  Instance "myyun1", status UNKNOWN, has 1 handler(s) for this service...Service "base2" has 1 instance(s).  Instance "tmyyun1", status UNKNOWN, has 1 handler(s) for this service...Service "myyun1.orcl" has 1 instance(s).  Instance "myyun1", status READY, has 1 handler(s) for this service...Service "myyun1XDB.orcl" has 1 instance(s).  Instance "myyun1", status READY, has 1 handler(s) for this service...The command completed successfully# 新建的两个监听当前显示UNKNOWN 静态监听启动成功

    检查tns文件是否可用

[oracle@myyun1 admin]$ tnsping b1TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 14-DEC-2016 23:21:22Copyright (c) 1997, 2011, Oracle.  All rights reserved.Used parameter files:Used TNSNAMES adapter to resolve the aliasAttempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = myyun1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = base1)))OK (0 msec)# 实例1 域名拼成功[oracle@myyun1 admin]$ tnsping b2TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 14-DEC-2016 23:22:09Copyright (c) 1997, 2011, Oracle.  All rights reserved.Used parameter files:Used TNSNAMES adapter to resolve the aliasAttempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = myyun1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = base2)))OK (0 msec)#实例2 tnsping 成功

6    配置新数据库路径和参数

    6.1 新建存放数据文件的路径

[oracle@myyun1 oradata]$ mkdir tmyyun[oracle@myyun1 fast_recovery_area]$ mkdir tmyyun1[oracle@myyun1 admin]$ mkdir tmyyun1[oracle@myyun1 admin]$ ll tmyyun1/总用量 8drwxr-xr-x 2 oracle dba 4096 12月 14 23:17 adumpdrwxr-xr-x 2 oracle dba 4096 12月 14 23:14 dpdump

    6.2 新建密码文件

            密码文件在./11g/dbs/ 里面

[oracle@myyun1 dbs]$ orapwd file=orapwtmyyun1 password=oracle

    6.3 新建参数文件

        参数文件可以用已经有的参数文件复制一份修改就可以了

[oracle@myyun1 dbs]$ cp initmyyun1.ora inittmyyun1.ora[oracle@myyun1 dbs]$ cat inittmyyun1.ora db_block_size=8192db_name=tmyyun1control_files=('/data/vdb/u01/product/oracle/oradata/tmyyun1/control01.ctl')db_recovery_file_dest='/data/vdb/u01/product/oracle/fast_recovery_area'db_recovery_file_dest_size=4gundo_tablespace=undotbs1

7    rman 下进行恢复

    7.1 克隆据库启动到nomount状态下

[oracle@myyun1 dbs]$ sqlplus sys/oracle@b2 as sysdbaSQL*Plus: Release 11.2.0.3.0 Production on Wed Dec 14 23:43:58 2016Copyright (c) 1982, 2011, Oracle.  All rights reserved.Connected to an idle instance.SQL> startup nomount;ORACLE instance started.Total System Global Area  238034944 bytesFixed Size		    2227136 bytesVariable Size		  180356160 bytesDatabase Buffers	   50331648 bytesRedo Buffers		    5120000 bytes

    7.2 rman中对两个数据库进行连接

[oracle@myyun1 dbs]$ rman target sys/oracle@b1 auxiliary sys/oracle@b2;Recovery Manager: Release 11.2.0.3.0 - Production on Wed Dec 14 23:42:03 2016Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.connected to target database: MYYUN1 (not mounted)connected to auxiliary database (not started)

    7.3 在rman 中运行下面的脚本

run{set until scn 2604748;duplicate target database to tmporcldb_file_name_convert=('/data/vdb/u01/product/oracle/oradata/myyun1','/data/vdb/u01/product/oracle/oradata/tmyyun1')logfilegroup 1 ('/data/vdb/u01/product/oracle/oradata/tmyyun1/redo01.log') size 50M,group 2 ('/data/vdb/u01/product/oracle/oradata/tmyyun1/redo02.log') size 50M,group 3 ('/data/vdb/u01/product/oracle/oradata/tmyyun1/redo03.log') size 50M;}

    其中datafile 可以在v$datafile 中查询,logfile 可以在v$logfile中查询

    select name from v$datafile;
    select * from v$logfile;

        等运行完上面编写的脚本(不能出现错误)克隆数据库应该克隆成功了

    7.4 检查克隆数据库是否成功

[oracle@myyun1 ~]$ sqlplus sys/oracle@b2 as sysdbaSQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 15 00:12:10 2016Copyright (c) 1982, 2011, Oracle.  All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> sart;SP2-0042: unknown command "sart" - rest of line ignored.SQL> start ;SP2-1506: START, @ or @@ command has no argumentsSQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> startupORACLE instance started.Total System Global Area  238034944 bytesFixed Size		    2227136 bytesVariable Size		  180356160 bytesDatabase Buffers	   50331648 bytesRedo Buffers		    5120000 bytesDatabase mounted.Database opened.# 数据库挂载,打开成功
SQL> select tablespace_name from user_tablespaces;TABLESPACE_NAME------------------------------SYSTEMSYSAUXUNDOTBS1TEMPUSERSTESTTEST2SPACE28 rows selected.SQL> select instance_name from v$instance;INSTANCE_NAME----------------tmyyun1SQL> # 数据库克隆成功
SQL> select tablespace_name,table_name from user_tables where tablespace_name = 'SPACE2';TABLESPACE_NAME 	       TABLE_NAME------------------------------ ------------------------------SPACE2			       TMP_20SQL> select tablespace_name,table_name from user_tables where table_name like 'TMP_WZL%';TABLESPACE_NAME 	       TABLE_NAME------------------------------ ------------------------------SYSTEM			       TMP_WZL_20161214_1# 表TMP_WZL_20161214_1 之前是被删除的,现在克隆复原了  1* select * from TMP_WZL_20161214_1SQL> /     EMPNO ENAME      JOB	       MGR HIREDATE	    SAL       COMM     DEPTNO---------- ---------- --------- ---------- --------- ---------- ---------- ----------      7369 SMITH      CLERK	      7902 17-DEC-80	    800 		   20      7499 ALLEN      SALESMAN	      7698 20-FEB-81	   1600        300	   30      7521 WARD       SALESMAN	      7698 22-FEB-81	   1250        500	   30      7566 JONES      MANAGER	      7839 02-APR-81	   3570 		   20      7654 MARTIN     SALESMAN	      7698 28-SEP-81	   1250       1400	   30      7698 BLAKE      MANAGER	      7839 01-MAY-81	   2850 		   30      7782 CLARK      MANAGER	      7839 09-JUN-81	   2450 		   10      7788 SCOTT      ANALYST	      7566 19-APR-87	   3500 		   20      7839 KING       PRESIDENT 	   17-NOV-81	   6000 		   10      7844 TURNER     SALESMAN	      7698 08-SEP-81	   1500 	 0	   30      7876 ADAMS      CLERK	      7788 23-MAY-87	   1500 		   20     EMPNO ENAME      JOB	       MGR HIREDATE	    SAL       COMM     DEPTNO---------- ---------- --------- ---------- --------- ---------- ---------- ----------      7900 JAMES      CLERK	      7698 03-DEC-81	    950 		   30      7902 FORD       ANALYST	      7566 03-DEC-81	   3500 		   20      7934 MILLER     CLERK	      7782 23-JAN-82	   1300 		   1014 rows selected.# 数据也还原可以访问

8    用数据传输把克隆数据库里面的删除的数据重新插入到源数据库就可以了。

SQL> select tablespace_name,table_name from user_tables where table_name = 'TMP_WZL_20161214_1';TABLESPACE_NAME 	       TABLE_NAME------------------------------ ------------------------------SYSTEM			       TMP_WZL_20161214_1

    用exp 导出表 TMP_WZL_20161214_1 的数据

[oracle@myyun1 document]$ export ORACLE_SID=tmyyun1[oracle@myyun1 document]$ exp /'/ as sysdba/' file='/tmp/table1.sql' tables=TMP_WZL_20161214_1;Export: Release 11.2.0.3.0 - Production on Thu Dec 15 21:04:28 2016Copyright (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 ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsExport done in US7ASCII character set and UTF8 NCHAR character setserver uses AL32UTF8 character set (possible charset conversion)About to export specified tables via Conventional Path .... . exporting table             TMP_WZL_20161214_1         14 rows exportedEXP-00091: Exporting questionable statistics.Export terminated successfully with warnings.# 表导出成功

    用imp 导入到原来的数据库中

[oracle@myyun1 document]$ export ORACLE_SID=myyun1[oracle@myyun1 document]$ imp /'/ as sysdba/' file='/tmp/table1.sql' tables=TMP_WZL_20161214_1;Import: Release 11.2.0.3.0 - Production on Thu Dec 15 21:06:34 2016Copyright (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 ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsExport file created by EXPORT:V11.02.00 via conventional pathimport done in US7ASCII character set and UTF8 NCHAR character setimport server uses AL32UTF8 character set (possible charset conversion). importing SYS's objects into SYS. importing SYS's objects into SYS. . importing table           "TMP_WZL_20161214_1"         14 rows importedImport terminated successfully without warnings.

    检查原来数据库中是否把表TMP_WZL_20161214_1 恢复了

SQL> l  1* select * from TMP_WZL_20161214_1SQL> /     EMPNO ENAME      JOB	       MGR HIREDATE	    SAL       COMM     DEPTNO---------- ---------- --------- ---------- --------- ---------- ---------- ----------      7369 SMITH      CLERK	      7902 17-DEC-80	    800 		   20      7499 ALLEN      SALESMAN	      7698 20-FEB-81	   1600        300	   30      7521 WARD       SALESMAN	      7698 22-FEB-81	   1250        500	   30      7566 JONES      MANAGER	      7839 02-APR-81	   3570 		   20      7654 MARTIN     SALESMAN	      7698 28-SEP-81	   1250       1400	   30      7698 BLAKE      MANAGER	      7839 01-MAY-81	   2850 		   30      7782 CLARK      MANAGER	      7839 09-JUN-81	   2450 		   10      7788 SCOTT      ANALYST	      7566 19-APR-87	   3500 		   20      7839 KING       PRESIDENT 	   17-NOV-81	   6000 		   10      7844 TURNER     SALESMAN	      7698 08-SEP-81	   1500 	 0	   30      7876 ADAMS      CLERK	      7788 23-MAY-87	   1500 		   20     EMPNO ENAME      JOB	       MGR HIREDATE	    SAL       COMM     DEPTNO---------- ---------- --------- ---------- --------- ---------- ---------- ----------      7900 JAMES      CLERK	      7698 03-DEC-81	    950 		   30      7902 FORD       ANALYST	      7566 03-DEC-81	   3500 		   20      7934 MILLER     CLERK	      7782 23-JAN-82	   1300 		   1014 rows selected.SQL> select instance_name from v$instance;INSTANCE_NAME----------------myyun1# 删除的表已经恢复成功

 

广告 广告

评论区