首页 » ORACLE » 计算controlfile size,dd 迁移raw device中的controlfile

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

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!

打赏

对不起,这篇文章暂时关闭评论。