暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

计算controlfile size,dd 迁移raw device中的controlfile

原创 Anbob 2012-09-11
559
dd 转移RAW(裸设备)上的控制文件时如果不加count默认是if (input file)全部大小,如果RAW分配很大,比如当AIX 转到文件系统或其它操作系统下时,要设bs=4k,调过aix在RAW头保留的4k大小,复制
全部大小就会让费很长时间,当然可以计算出controlfile大小就可以增加count参数指定块数

先看下文件系统下的大小
[oracle@rac1 controlfile]$ ll
-rw-r----- 1 oracle asmadmin 9748480 Sep 11 00:42 anbob01.ctl
-rw-r----- 1 oracle asmadmin 9748480 Sep 11 00:42 anbob02.ctl
[oracle@rac1 controlfile]$ dd if=anbob01.ctl of=ctl.bak bs=4k
2380+0 records in
2380+0 records out
9748480 bytes (9.7 MB) copied, 0.394434 seconds, 24.7 MB/s
[oracle@rac1 controlfile]$ ll
total 28620
-rw-r----- 1 oracle asmadmin 9748480 Sep 11 00:42 anbob01.ctl
-rw-r----- 1 oracle asmadmin 9748480 Sep 11 00:42 anbob02.ctl
-rw-r--r-- 1 oracle oinstall 9748480 Sep 11 00:42 ctl.bak
--默认是全部大小
[oracle@rac1 controlfile]$ dbfsize /u01/app/oracle/admin/anbob/controlfile/anbob01.ctl
Database file: /u01/app/oracle/admin/anbob/controlfile/anbob01.ctl
Database file type: file system
Database file size: 594 16384 byte blocks
--用oracle的工具dbfsize 查看 (594+1)*16384
[oracle@rac1 controlfile]$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
595*16384
9748480
--和上面查看的文件大小一样,595个16k大小的block ,也可以用event转储生成trace

SQL> ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME CONTROLF LEVEL 10';
Session altered.
SQL> oradebug setmypid;
Statement processed.
SQL> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/anbob/anbob/trace/anbob_ora_32204.trc

[oracle@rac1 controlfile]$ vi /u01/app/oracle/diag/rdbms/anbob/anbob/trace/anbob_ora_32204.trc
DUMP OF CONTROL FILES, Seq # 53995 = 0xd2eb
V10 STYLE FILE HEADER:
Compatibility Vsn = 186646528=0xb200000
Db ID=1158650278=0x450f99a6, Db Name='ANBOB'
Activation ID=0=0x0
Control Seq=53995=0xd2eb, File size=594=0x252
File Number=0, Blksiz=16384, File Type=1 CONTROL
Logical block number 1 (header block)
Dump of memory from 0x00F0AE00 to 0x00F0EE00
F0AE00 0000C215 00000001 00000000 04010000 [................]
F0AE10 00008EF4 00000000 0B200000 450F99A6 [.......... ....E]

--File size=594=0x252 Blksiz=16384,也能对上
最简单的在v$controlfile视图(x$kcccf)也有字段可以直接查询
如果dd 后database open的时候遇到ORA-00202,ORA-27047,ORA-205 ,是在AIX上操作系统没有改变,只改存储的情况,这样的情况确实有发生
老杨有遇到过, ,最后是改用了rman, 其实rman 是可以,不过restore controlfile后,要resetlogs选项打开数据库,还要记的立马做个full database backup,如果数据库海量那就有点惨。
今天一网友也遇到了这个问题,环境几乎一样,我看现共性是都是dd if= of= 而未限制大小count,怀疑是前后RAW大小不一样或其它未知原因,最后建议使用如下脚本

dd if=xx of=xxx bs=4k skip=1 seek=1 count=10000

(仅限AIX)结果网友反馈DATABASE成功OPEN!

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论