oracle数据恢复:利用ctl,dbf,log
来源:互联网 发布:freebsd linux 编辑:程序博客网 时间:2024/05/17 02:03
任何一种技术方案都有其使用场景,我这个主要是针对没有dmp备份,卸载了数据库,但是有实例的ctl,dbf和log文件都存在的情况。其实这种情况也蛮多的。
网络上说的情况大多比较复杂,要么ctl丢失的,只有dbf,需要通过手段重建ctl和log文件,不过经过本人测试,重建ctl没有成功,由于时间有限,没来得及调研。
本人恢复oracle背景是自己卸载了oracle10g,后来想起来自己有一个数据库的数据是十分需要的,所以又折腾着恢复过来。在网络上参考了一个恢复oracle11g的文章写的,在oracle10g下亲测可以用,发到这里共享给大家。
这里顺便补充一句:我也用网上提到的aul6 进行数据恢复,它是利用字典文件system01.dbf和业务实例文件(比如笔者的etl.dbf)将业务实例里面的表恢复成建表语句和数据,不过遗憾的是,恢复的数据对中文的支持不好,有乱码,而且,有很多表的某一列数据被拆分加入多个空格,造成数据恢复时候是乱码,导致整体不可用,而我又没有找到解决乱码的方法,估计对纯英文的支持比较好,故而只好放弃该方案。幸好我卸载以后,dbf,log,ctl文件都存在,恢复也就变得简单了,因为网络上大多说的不详细,将我的操作步骤详细的给大家共享出来。
首先安装一个一模一样的oracle10g,这个大家不要嫌麻烦,这是我目前感觉最简单有效的方式了。安装目录跟以前一不一样无所谓,因为我们经常无法安装一样的目录,比如笔者,因为已经在机器安装了oracle11g,在虚拟机重装的oracle10g,只有一个c盘。新建的数据库sid跟之前的一样是有必要的。
安装好以后,将数据库服务关闭掉,建议在cmd下利用语句完成。完整操作如下:
sqlplus /nolog
conn / as sysdba
shutdown immediate
关闭数据库以后,将实例文件改个名字,比如笔者是orcl,改为orcl2,将以前的orcl拷贝到该目录下(如c:\oracle\product\10.2.0\oradata下面)。
然后cmd下启动数据库,以无挂载的方式,如下:
STARTUP NOMOUNT;
此时,我们在cmd输入如下命令:
SELECT NAME FROM V$DATAFILE;
得到结果如下:
NAME--------------------------------------------------------------------------------E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBFE:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBFE:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBFE:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBFE:\ORACLE\SWOA\SWOA\ETL.DBFE:\ORACLE\SWOA\SWOA\AVPLAN.DBF已选择6行。
由结果我们看出,得到了是我们之前建立的数据库dbf文件路径,发现跟我们安装的数据库目录(也就是刚才拷贝到c:\oracle\product\10.2.0\oradata)是不一样的。
同样执行:
SELECT NAME FROM v$controlfile;
SELECT * FROM v$logfile;
发现ctl,log文件路径也都是与安装目录文件不一致,利用以下命令修改:
alter database rename file '查询出来的路径' to '现在存放的路径';
比如我是如下修改(log,ctl修改都是该语句):
alter database rename file 'E:\ORACLE\SWOA\SWOA\etl.DBF' to 'C:\oracle\p
roduct\10.2.0\oradata\orcl\etl.DBF';
如果之前所有的dbf文件都存在,并且都拷贝到了新的数据库目录下,那么到此为止,只要重启数据库,就已经ok了。
利用:ALTER DATABASE OPEN; 打开数据库,或者shutdown,再重启数据库。
-----------------------华丽的分割线-------------
但是笔者由于业务数据的dbf习惯安装在其他目录下,不小心删掉了一个,如上面的avplan.dbf,造成此处无法修改路径,启动数据库也不成功,而事实上,这个业务库也不是我们要恢复的,但它妨碍了我们。
尝试删除该条数据,由于数据库未打开,删除不了,所以笔者想了个办法,将数据库cmd下,shutdown,然后将之前改为orcl2文件夹改回orcl,现有的orcl暂时改为其他名字(如orcl1),(即还原为安装时状态)然后启动数据库,建立了一个表空间avplan,dbf文件名字叫avplan.dbf。这时候在关闭数据库,将avplan.dbf拷贝到orcl1下,并且将orcl1再改回orcl,刚才的orcl你懂的,变为其他名字(如orcl2)。这时,cmd下输入:
STARTUP NOMOUNT;
这时数据库重启,在cmd下继续输入
alter database rename file 'E:\ORACLE\SWOA\SWOA\AVPLAN.DBF' to 'C:\oracle\p
roduct\10.2.0\oradata\orcl\AVPLAN.DBF';
ALTER DATABASE DATAFILE 'C:\oracle\p
roduct\10.2.0\oradata\orcl\AVPLAN.DBF' OFFLINE DROP;
这时候,这个影响我们的avplan.dbf就不起作用了。
这里顺便要提一下:如果不新建avplan.dbf,直接使用ALTER DATABASE DATAFILE 'C:\oracle\p
roduct\10.2.0\oradata\orcl\AVPLAN.DBF' OFFLINE DROP; 是不成功的。
还有一点是,新建的avplan.dbf只是权宜之计,不过不实行drop,启动会报
Total System Global Area 293601280 bytesFixed Size 1248624 bytesVariable Size 100663952 bytesDatabase Buffers 188743680 bytesRedo Buffers 2945024 bytes数据库装载完毕。ORA-01122: 数据库文件 6 验证失败ORA-01110: 数据文件 6: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\AVPLAN.DBF'ORA-01203: 此文件的原型错误 - 创建 SCN 错误
----------------------华丽分割线---------------------
通过以上的方式之后,数据库已经还原完成了。
shutdown
startup
成功!!
- oracle数据恢复:利用ctl,dbf,log
- 利用AUL工具恢复oracle dbf文件中的数据
- 利用PRM-DUL工具恢复oracle dbf文件中的数据
- oracle 误删 dbf 恢复
- Oracle 10g dbf文件恢复数据库
- Oracle误删除DBF文件恢复方法
- 不完全恢复-ctl-create_script
- 不完全恢复-ctl-bak
- oracle 利用闪回功能恢复数据
- 利用RMAN备份恢复ORACLE数据
- linux利用文件句柄恢复oracle数据
- 执行Oracle中的sqlldr xxx.ctl命令导入数据时,当错误无法导入时,注意查看「xxx.log信息」
- Log Explorer 恢复数据
- Oracle数据导出到DBF的问题
- oracle ctl 详解
- Linux Oracle dbf文件误删 恢复操作
- 数据恢复工具 Log Explorer
- Log Explorer 恢复DB数据
- Vmware linux虚拟机 移动后 eth0 变成 eth1 问题的解决
- 北美18名校的数据挖掘,数据分析,人工智能及机器学习课程汇总
- 泰迪杯比赛总结--关于NLP的资源
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- 第2周项目1-C/C++函数参数传递的三种方式
- oracle数据恢复:利用ctl,dbf,log
- 创建GitHub技术博客全攻略
- [C++] 智能指针与循环引用
- 如何在JavaScript捕获鼠标事件
- 生成闭区间随机指定维度数组方法
- 自然语言处理(NLP)网上资源整理
- Android Source:优雅的repo sync自动重试
- PHP基础----PHP常用功能----07PHP 字符串
- 2015.9.4 打印一个学生的成绩数组