ITPUB论坛-中国最专业的IT技术社区

 找回密码
 注册
查看: 3115|回复: 1

[原创] 12C bbed modify datafile header scn

[复制链接]
论坛徽章:
6
娜美
日期:2017-06-26 15:18:15目光如炬
日期:2017-08-20 22:00:00目光如炬
日期:2017-08-27 22:00:01火眼金睛
日期:2017-09-01 17:00:07目光如炬
日期:2017-09-03 22:00:01火眼金睛
日期:2017-09-30 22:00:01
发表于 2017-6-26 15:11 | 显示全部楼层 |阅读模式
本帖最后由 sunyunyi 于 2017-6-26 15:15 编辑

在系统运维中经常会遇到datafile被offline以后归档日志被删除导致datafile不能recover的case,我们需要借助bbed修改datafile header 的scn 和目前的其他datafile header scn 一致,然后recover datafile。
今天我们模拟offline datafile 然后alter system checkpoint 修改数据头SCN,然后通过bbed修改offline 的数据文件头的scn号,测试环境为 Linux 7 & oracle 12.2.0.1,bbed 的安装不在此说明。

确保归档开启否则offline datafile 报错:
SQL> alter database datafile 13 offline;
ERROR at line 1:
ORA-01145: offline immediate disallowed unless media recovery enabled
略开启归档
SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            +DATA
Oldest online log sequence     242
Next log sequence to archive   244
Current log sequence           244

a:查询数据文件名和SCN,offline,checkpoint

set lines 1200 pages 500
col name for a80
col checkpoint_change for a20
select CON_ID,file#,name,status,to_char(checkpoint_change#) checkpoint_change
from v$datafile_header order by 1;



    CON_ID      FILE# NAME                                                                             STATUS                CHECKPOINT_CHANGE
---------- ---------- -------------------------------------------------------------------------------- --------------------- --------------------
         0          4 +DATA/ORADB/DATAFILE/undotbs1.482.938191755                                      ONLINE                14919467
         3         10 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/sysaux.495.938193177       ONLINE                14920021
         3         14 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/bftbs.498.938193177        ONLINE                14920021
         3         12 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/users.493.938193177        ONLINE                14920021
         3         13 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/testbs.494.938193177       ONLINE                14920021
         3          9 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/system.496.938193177       ONLINE                14920021
         3         11 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/undotbs1.497.938193177     ONLINE                14920021

7 rows selected.

SQL> alter database datafile 13 offline;

Database altered.

SQL> alter system checkpoint;

System altered.

SQL> set lines 1200 pages 500
SQL> col name for a80
SQL> col checkpoint_change for a20
SQL> select CON_ID,file#,name,status,to_char(checkpoint_change#) checkpoint_change
  2  from v$datafile_header order by 1;

    CON_ID      FILE# NAME                                                                             STATUS                CHECKPOINT_CHANGE
---------- ---------- -------------------------------------------------------------------------------- --------------------- --------------------
         0          4 +DATA/ORADB/DATAFILE/undotbs1.482.938191755                                      ONLINE                14920187
         3         10 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/sysaux.495.938193177       ONLINE                14920187
         3         14 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/bftbs.498.938193177        ONLINE                14920187
         3         12 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/users.493.938193177        ONLINE                14920187
         3         13 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/testbs.494.938193177       OFFLINE               14920021 --没有改变
         3          9 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/system.496.938193177       ONLINE                14920187
         3         11 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/undotbs1.497.938193177     ONLINE                14920187

7 rows selected.

b: 转换asm块到filesystem

grid: sqlplus / as sysasm

SQL> @/home/grid/bbed/cp_block_to_fs.sql
Enter value for asm_file_name: +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/testbs.494.938193177
old  14: v_AsmFilename := '&ASM_File_Name';
new  14: v_AsmFilename := '+DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/testbs.494.938193177';
Enter value for block_to_extract: 1
old  15: v_offstart := '&block_to_extract';
new  15: v_offstart := '1';
Enter value for number_of_blocks_to_extract: 1
old  16: v_numblks := '&number_of_blocks_to_extract';
new  16: v_numblks := '1';
Enter value for filesystem_file_name: /home/grid/test13.dbf
old  17: v_FsFilename := '&FileSystem_File_Name';
new  17: v_FsFilename := '/home/grid/test13.dbf';

PL/SQL procedure successfully completed.

c:修改filesystem block header scn:
bbed
BBED> set filename '/home/oracle/bbed/test13.dbf' blocksize 8192 mode edit
        FILENAME        /home/oracle/bbed/test13.dbf
        BLOCKSIZE       8192
        MODE            Edit

BBED> p kcvfhckp.kcvcpscn.kscnbas
ub4 kscnbas                                 @484      0x00e3a955

BBED> dump offset 484 count 8
File: /home/oracle/test13.dbf (0)
Block: 1                Offsets:  484 to  491           Dba:0x00000000
------------------------------------------------------------------------
55a9e300 00800000

<32 bytes per line> --注意字节顺序,Linux字节顺序相反!

查看正常的12 号文件头的SCN号:

BBED> set filename '/home/oracle/bbed/test12.dbf' blocksize 8192 mode edit
        FILENAME        /home/oracle/bbed/test13.dbf
        BLOCKSIZE       8192
        MODE            Edit

BBED> p kcvfhckp.kcvcpscn.kscnbas
ub4 kscnbas                                 @484      0x00e3b106


--- 转换10进制: TO_NUMBER('00E3B106','XXXXXXXXX')                       14921990

BBED>
BBED> dump offset 484 count 8
File: /home/oracle/bbed/test13.dbf (0)
Block: 1                Offsets:  484 to  491           Dba:0x00000000
------------------------------------------------------------------------
06b1e300 00800000

修改13号文件头的SCN:

BBED> m /x 06b1 offset 484
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /home/oracle/bbed/test13.dbf (0)
Block: 1                Offsets:  484 to  491           Dba:0x00000000
------------------------------------------------------------------------
06b1e300 00800000

<32 bytes per line>

BBED> sum apply
Check value for File 0, Block 1:
current = 0xd947, required = 0xd947

BBED> verify
DBVERIFY - Verification starting
FILE = /home/oracle/bbed/test13.dbf
BLOCK = 1

d: 转换filesystem block header to asm datafile header

@/home/grid/bbed/cp_block_to_asm.sql
Enter value for file_with_patched_block: /home/grid/bbed/test19.dbf
old  15: v_FsFileName := '&file_with_patched_block';
new  15: v_FsFileName := '/home/grid/bbed/test19.dbf';
Enter value for file_to_patch_in_asm: +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/testbs.494.938193177
old  16: v_AsmFileName := '&file_to_patch_in_ASM';
new  16: v_AsmFileName := '+DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/testbs.494.938193177';
Enter value for block_to_patch: 1
old  17: v_offstart := '&block_to_patch';
new  17: v_offstart := '1';

PL/SQL procedure successfully completed.

e: 查看修改后的asm datafile block header scn:

SQL> set lines 1200 pages 500
SQL> col name for a80
SQL> col checkpoint_change for a20
SQL> select CON_ID,file#,name,status,to_char(checkpoint_change#) checkpoint_change
  2  from v$datafile_header order by 1;

    CON_ID      FILE# NAME                                                                             STATUS                CHECKPOINT_CHANGE
---------- ---------- -------------------------------------------------------------------------------- --------------------- --------------------
         0          4 +DATA/ORADB/DATAFILE/undotbs1.482.938191755                                      ONLINE                14920187
         3         10 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/sysaux.495.938193177       ONLINE                14921990
         3         14 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/bftbs.498.938193177        ONLINE                14921990
         3         12 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/users.493.938193177        ONLINE                14921990
         3         13 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/testbs.494.938193177       OFFLINE               14921990   --OK 已经修改
         3          9 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/system.496.938193177       ONLINE                14921990
         3         11 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/undotbs1.497.938193177     ONLINE                14921990

7 rows selected.

f: recover datafile

SQL> alter database datafile 13 online;
alter database datafile 13 online
*
ERROR at line 1:
ORA-01113: file 13 needs media recovery
ORA-01110: data file 13: '+DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/testbs.494.938193177'

SQL> recover datafile 13;
Media recovery complete.
SQL> alter database datafile 13 online;

Database altered.

SQL> set lines 1200 pages 500
SQL> col name for a80
SQL> col checkpoint_change for a20
SQL> select CON_ID,file#,name,status,to_char(checkpoint_change#) checkpoint_change
  2  from v$datafile_header order by 1;

    CON_ID      FILE# NAME                                                                             STATUS                CHECKPOINT_CHANGE
---------- ---------- -------------------------------------------------------------------------------- --------------------- --------------------
         0          4 +DATA/ORADB/DATAFILE/undotbs1.482.938191755                                      ONLINE                14920187
         3         10 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/sysaux.495.938193177       ONLINE                14921990
         3         14 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/bftbs.498.938193177        ONLINE                14921990
         3         12 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/users.493.938193177        ONLINE                14921990
         3         13 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/testbs.494.938193177       ONLINE                14926508
         3          9 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/system.496.938193177       ONLINE                14921990
         3         11 +DATA/ORADB/4A453209EFB25340E0536538A8C08684/DATAFILE/undotbs1.497.938193177     ONLINE                14921990

7 rows selected.


数据文件正常恢复!



认证徽章
论坛徽章:
0
发表于 2017-9-7 18:59 | 显示全部楼层

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表