概述
1> SQL>create tablespace test datafile '/oracle/test_fs.dbf' size 8M;创建了一个8M的数据文件
2> 在操作系统上查看刚刚创建的数据文件:$ls -l /oracle/test_fs.dbf
-rw-r----- 1 oracle dba 8396800 May 29 15:01 /oracle/test_fs.dbf
实际的OS文件大小为:8M+8K=(8*1024*1024)+(8*1024)
oracle的数据是从偏移量8K以后开始存储的。
如果数据库是关闭状态,那么用dd copy 数据文件从filesystem 到 raw logical volume:
$dd if=/oracle/test_fs.dbf of=/oracle/test_raw.dbf bs=8192
I/O error
1025+0 records in
1024+1 records out
报错是因为dd试图复制8M+8K 到8M的raw logical volume
应该在dd的时候跳过first block
$dd if=/oracle/test_fs.dbf of=/oracle/test_raw.dbf bs=8192 skip=1
然后在作mount database,rename datafile,open database
SQL>alter database rename file '/oracle/test_fs.dbf'
2> to '/oracle/test_raw.dbf';
SQL>alter database open;
ORA-01122: database file 2 failed verification check
ORA-01110: data file 2: '/oracle/test_raw.dbf'
ORA-01251: Unknown File Header Version read for file number 2
这个错误的原因是从文件系统的dd到raw的时候虽然跳过了文件系统的第一块,可是将整个8M的datafile拷贝到raw logical volume的时候却没
有跳过raw logical volume的第一块,也就是偏移量的那一块被overwrite了。
那么将上面的dd命令改正为如下,其中seek=1保证了raw logical volume 的第一块被跳过。:
$dd if=/oracle/test_fs.dbf of=/oracle/test_raw.dbf bs=8192 skip=1
I/O error
1024+0 records in
1023+1 records out
然而还是报错,原因是整个raw logical volume一共8M(包括被跳过的偏移量8K),而datafile却是8M,所以失败了。如果创建了一个较大的raw
logical volume,比如12M,那么就不会报错了,如下:
%dd if=/oracle/test_fs.dbf of=/oracle/test_raw.dbf bs=8192 skip=1 seek=1
1024+0 records in
1024+0 records out
最后就可以打开数据库了:
SQL>alter database open;
Statement processed.
最后
以上就是犹豫导师为你收集整理的aix dd oracle数据文件,dd命令总结 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区...的全部内容,希望文章能够帮你解决aix dd oracle数据文件,dd命令总结 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复