Oracle 11g 不同目录的冷备份解决方案
2012-08-03 16:21
369 查看
前几天,Oacle数据库启动不起来了,一启动就死机,经过多次测试差错发现是磁盘损坏,导致UNDOTBS01.DBF数据文件无法访问,访问就死机。无奈用冷备份的办法,将数据库迁移到另一台主机上。
Oracle 11g, 安装在windows XP上,只是作为平时开发用的数据库,没有多少维护,也没有开启归档日志模式。(注:由于操作时没有保存操作信息,也没有可用的测试环境了,所以都是凭记忆还原步骤,不排除有不正确的操作和命令,仅作参考。)
Step 1. 首先在目标主机上安装Oracle 11g(和源数据库相同),创建和源数据库相同SID的数据库。
Step 2. 查找源数据库里的数据文件、REDO日志文件、控制文件、启动参数文件。
EXPRD是SID
Step 3. 关闭数据库,将上面找到文件,复制到目标机器的数据库目录或自定义目录内。由于知道UNDOTBS01.DBF文件损坏,一访问就死机,所以最后复制它,做完第四步以后再复制,只能复制一部分文件,不过也可以,后面解决。
(由于我目标数据库和源数据库目录结构不同,所以需要做4,5,6步。目录结构完全一样的可以省略4,5,6步。)
Step 4. 在源数据库上,备份启动参数文件和控制文件创建sql,并拷贝到目标数据库上。
Step 5. 修改生成的backup_pfile.ora和backup_ctlfile_trace.sql文件中的目录,改成目标数据库上对应的目录结构。
Step 6. 用backup_pfile.ora启动目标数据库,并运行backup_ctlfile_trace.sql重建控制文件。最好是按照sql文件中的顺序,单条命令手动执行,这样可以方便的定位是在哪一步出的错。
在执行backup_ctlfile_trace.sql重建控制文件的时候,会报错,因为我们的UNDOTBS01.DBF拷贝不全,是损坏的文件,所以导致重建控制文件失败。错误的意思是实际文件比记录的文件小(ORA-01200: 255360 的实际文件大小小于 264960 块的正确大小 / ORA-01200: actual file size of 255360 is smaller than correct size 264960 blocks)
Step 7. 补全UNDOTBS01.DBF。
1. 首先计算缺失的字节数(264960-255360) * 8192 = 78643200
2. 生成一个指定大小的文件D:\fsutil file createnew append.dbf 78643200
3. 附加到数据文件末尾D:\type append.dbf >> <path>\UNDOTBS01.DBF
4. 再次执行backup-ctlfile_trace.sql执行成功
Step 8. 由于undotbs01.dbf文件是损坏的,所以数据库还没有圆满解决。离线UNDOTBS01.DBF, 在重建UNDO TABLESPACE
本文出自 “立子” 博客,请务必保留此出处http://leaze.blog.51cto.com/83088/952865
Oracle 11g, 安装在windows XP上,只是作为平时开发用的数据库,没有多少维护,也没有开启归档日志模式。(注:由于操作时没有保存操作信息,也没有可用的测试环境了,所以都是凭记忆还原步骤,不排除有不正确的操作和命令,仅作参考。)
Step 1. 首先在目标主机上安装Oracle 11g(和源数据库相同),创建和源数据库相同SID的数据库。
Step 2. 查找源数据库里的数据文件、REDO日志文件、控制文件、启动参数文件。
EXPRD是SID
SQL> startup mount ORACLE 例程已经启动。 Total System Global Area 770019328 bytes Fixed Size 1374780 bytes Variable Size 293602756 bytes Database Buffers 469762048 bytes Redo Buffers 5279744 bytes 数据库装载完毕。 SQL> select name from v$datafile; NAME ------------------------------------------------------ D:\APP\ADMINISTRATOR\ORADATA\EXPRD\SYSTEM01.DBF D:\APP\ADMINISTRATOR\ORADATA\EXPRD\SYSAUX01.DBF D:\APP\ADMINISTRATOR\ORADATA\EXPRD\UNDOTBS01.DBF D:\APP\ADMINISTRATOR\ORADATA\EXPRD\USERS01.DBF D:\APP\ADMINISTRATOR\ORADATA\EXPRD\EXAMPLE01.DBF D:\APP\ADMINISTRATOR\ADMIN\EXPRD\TS_YTCLT01.DBF D:\APP\ADMINISTRATOR\ADMIN\EXPRD\TS_YTEXP01.DBF SQL> select member from v$logfile; MEMBER --------------------------------------------------------------- D:\APP\ADMINISTRATOR\ORADATA\EXPRD\REDO03.LOG D:\APP\ADMINISTRATOR\ORADATA\EXPRD\REDO02.LOG D:\APP\ADMINISTRATOR\ORADATA\EXPRD\REDO01.LOG SQL> select name from v$controlfile; NAME --------------------------------------------------------------- D:\APP\ADMINISTRATOR\ORADATA\EXPRD\CONTROL01.CTL D:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\EXPRD\CONTROL02.CTL
Step 3. 关闭数据库,将上面找到文件,复制到目标机器的数据库目录或自定义目录内。由于知道UNDOTBS01.DBF文件损坏,一访问就死机,所以最后复制它,做完第四步以后再复制,只能复制一部分文件,不过也可以,后面解决。
(由于我目标数据库和源数据库目录结构不同,所以需要做4,5,6步。目录结构完全一样的可以省略4,5,6步。)
Step 4. 在源数据库上,备份启动参数文件和控制文件创建sql,并拷贝到目标数据库上。
SQL> startup mount SQL> create pfile='D:\backup_pfile.ora' from spfile; SQL> alter database backup controlfile to trace as 'D:\backup_ctlfile_trace.sql';
Step 5. 修改生成的backup_pfile.ora和backup_ctlfile_trace.sql文件中的目录,改成目标数据库上对应的目录结构。
Step 6. 用backup_pfile.ora启动目标数据库,并运行backup_ctlfile_trace.sql重建控制文件。最好是按照sql文件中的顺序,单条命令手动执行,这样可以方便的定位是在哪一步出的错。
SQL> startup nomount pfile='D:\backup_pfile.ora' SQL> create spfile from pfile='D:\backup_pfile.ora'; SQL> shutdown immediate SQL> @backup_ctlfile_trace.sql
在执行backup_ctlfile_trace.sql重建控制文件的时候,会报错,因为我们的UNDOTBS01.DBF拷贝不全,是损坏的文件,所以导致重建控制文件失败。错误的意思是实际文件比记录的文件小(ORA-01200: 255360 的实际文件大小小于 264960 块的正确大小 / ORA-01200: actual file size of 255360 is smaller than correct size 264960 blocks)
Step 7. 补全UNDOTBS01.DBF。
1. 首先计算缺失的字节数(264960-255360) * 8192 = 78643200
2. 生成一个指定大小的文件D:\fsutil file createnew append.dbf 78643200
3. 附加到数据文件末尾D:\type append.dbf >> <path>\UNDOTBS01.DBF
4. 再次执行backup-ctlfile_trace.sql执行成功
Step 8. 由于undotbs01.dbf文件是损坏的,所以数据库还没有圆满解决。离线UNDOTBS01.DBF, 在重建UNDO TABLESPACE
SQL> start mount SQL> alter database datafile 'D:\oracle11g\data\UNDOTBS01.DBF' offline drop; SQL> alter database open; SQL> alter system set undo_management='MANUAL' scope=spfile; SQL> create undo tablespace undotbs2 datafile 'D:\oracle11g\data\undotbs02.dbf' size 200M autoextend on; SQL> alter system set undo_tablespace='undotbs2' scop=spfile; SQL> alter system set undo_management='auto' scope=spfile; SQL> shutdown immediate SQL> startup
本文出自 “立子” 博客,请务必保留此出处http://leaze.blog.51cto.com/83088/952865
相关文章推荐
- Oracle11g不同目录的冷备份解决方案
- oracle 11g数据库迁移(不同目录不同主机) [复制链接]
- 创建 virtual private catalog (虚拟用户目录)(oracle 11g)
- Oracle 11g 更改归档模式、目录和日志大小
- Windows 64位下装安装Oracle 11g,PLSQL Developer的配置问题,数据库显示空白的完美解决方案(图文教程)
- IIS7多域名绑定同一物理目录,设置不同默认文档的解决方案
- Oracle 不同环境下导入解决方案
- Oracle OCP 11G 053(1-200)答案解析目录_20140304
- unittest框架,不能识别不同目录下面的.py文件解决方案
- Oracle 11g-本地连接没问题,远程连接有问题解决方案
- Oracle 11G 冷备份与恢复
- IIS7多域名绑定同一物理目录,设置不同默认文档的解决方案
- [转]oracle 11g jdbc jar包在哪个文件目录
- Oracle 11g R2版本使用exp命令导出表不全的解决方案
- 创建virtual private catalog(虚拟用户目录)(oracle 11g) 步骤
- 附加包含目录 同一个解决方案下,使用不同工程的头文件
- Oracle Application Server上不同类型的文件所在的目录
- Oracle 11g R2 Net Configuration Assistant与Net Manager的不同
- oracle_11g表+数据完美迁移到10g解决方案
- oracle 11g 对不同平台搭建DG的支持和限制.