当前位置: 首页 > 图文教程 > 数据库 > Oracle > 如何从完好的数据文件恢复oracle数据库

Oracle
常见的一些Oracle初学者的问题
ORACLE认证系统概述
数据库考试简介:Oracle认证
Oracle认证基础知识介绍
ADO连接Oracle Access示例及记录集处理源码
SQL Server和MySQL的安全性分析
用Oracle和SQL Server数据库组合利弊分析
Oracle 11g分区功能新革命
Flashback Query 恢复误删除的数据
基于Oracle高性能动态SQL程序开发
怎样在Oracle 9i中正确的转换时区
Oracle 10g导出的数据库能否导入Oracle 9i?
增加Distinct后查询效率反而提高
Oracle限制返回结果集的大小
Java语言数据库操作的基本流程
美国甲骨文(ORACLE)公司入驻渝中区大都会商厦
RHEL AS4上安装oracle 10R2 的方法
DB中如何查询Table占用空间的大小
编写高质量高性能的MySQL语法
Oracle数据库自动备份的具体实现步骤

Oracle 中的 如何从完好的数据文件恢复oracle数据库


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 214 ::
收藏到网摘: n/a

一。有数据文件、控制文件和日志文件的备份1.服务器重装了操作系统,oracle也重装了。如果重装的oracle和以前损坏的数据库是一模一样的结构,那么此时的恢复是比较简单的。

    1)删除掉新建数据库的所有数据文件、控制文件和日志文件。Copy原数据库的数据文件、控制文件和日志文件到对应目录下。

    2)

    Cmd>sqlplus /nolog

    Sql>conn as sysdba

    用户名:system

    密码:(此处密码为新创建数据库的密码)

    Sql>shutdown immediate

    Sql>startup nomount

    Sql>alter database mount

    此时看数据库是不是能mount起来,有时会提示没有口令文件PWDdemo.ora文件找不到。查看对应的目录(database下)会发现该文件是存在的。此时需要注意,该口令文件是新安装数据库后创建实例时生成的口令文件,不是以前所用数据库的口令文件,而现在,我们是用以前数据库的控制文件和数据文件来打开以前的数据库,所以此时需要重新创建一个口令文件。

    Sql>shutdown immediate

    Sql>host orapwd file=c:\oracle9i\database\PWDdemo.ora password=oracle

    Entries=10 (放在database 目录下)

    Sql>startup nomount

    Sql>alter database mount

    Sql>alter database open

    打开数据库

    2.如果新数据库的安装目录和原有数据库的目录不一样,那么此时可以重建控制文件来打开数据库。因为原控制文件中记录的数据文件地址和现有的数据文件位置不一样。此时和下面第二中情况一样。当然,此时也可以创建和原数据库一样的目录结构(前提是要记得原数据库的目录结构),需要注意的就是参数文件中记录的控制文件位置和控制文件中记录的数据文件位置。

    说明:我们需要清楚数据库在打开的三个阶段中,需要读取的文件

    Sql>startup nomount (此时读取参数文件)

    Sql>alter database mount (根据参数文件中记录的控制文件地址,去读取控制文件)

    Sql>alter database open (根据控制文件中记录的数据文件地址,读取数据文件,打开数据库)

    二。只有数据文件备份,没有控制文件和日志文件

    由于只有数据文件备份,没有控制文件和日志文件,此时只能采用重建控制文件来恢复数据库。以下通过两中方法来介绍如何通过重建控制文件来进行数据库的恢复。

    1)仅安装数据库软件,通过新建oracle服务,引用数据文件来创建一个实例。下面以实例名为demo为例进行说明。

    1.创建存储demo相关文件的目录。即::各类文件的存放地址。

    C:\documents and settings\mkdir c:\demo

    C:\documents and settings\mkdir c:\demo\bdump

    C:\documents and settings\mkdir c:\demo\udump

    C:\documents and settings\mkdir c:\demo\cdump

    C:\documents and settings\mkdir c:\demo\pfile

    C:\documents and settings\mkdir c:\demo\create

    C:\documents and settings\mkdir c:\demo\oradata

    C:\documents and settings\mkdir c:\demo\oradata\demo (放置datafile、logfile、controlfile)

    2.创建初始化参数文件(pfile)

    此处pfile文件可以从其他能正常运行的数据库上copy一个过来进行修改。(判断其他正常运行的数据库使用的是pfile还是spfile,如是pfile可以直接copy,如是spfile,则可根据spfile创建一个pfile文件)

    Copy过来的pfile需要修改的地方:

 background_dump_dest=c:\demo\bdump
core_dump_dest=c:\demo\cdump
user_dump_dest=c:\demo\udump
control_files=("c:\demo\oradata\demo\CONTROL01.CTL", "c:\demo\oradata\demo\CONTROL02.CTL", "c:\demo\oradata\demo\CONTROL03.CTL")
dispatchers="(PROTOCOL=TCP) (SERVICE=demoXDB)"(实例名)
dispatchers="(PROTOCOL=TCP) (SERVICE=demoXDB)"
db_domain=""
db_name=demo
 

    3.创建oracle服务和口令文件

    C:\documents and settings\oradim — new —sid demo —intpwd oracle

    4.配置监听和服务

    用net manager 进行配置(demo实例的配置)

    5.复制数据文件备份到指定的目录下。此处为c:\demo\oradata\demo

    6.重建controlfile  C:\Documents and Settings\hefan>sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - Production on 星期一 12月 29 10:57:07 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn as sysdba
请输入用户名: system
请输入口令:
已连接。
SQL> shutdown immediate
ORA-01507: 未安装数据库
ORACLE 例程已经关闭。
SQL> startup nomount file= c:\demo\pfile\initdemo.ora
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> @d:\controlfile.sql
控制文件已创建
Controlfile.sql内容如下:(此处也可以直接在sql>下输入以下内容进行创建controlfile)
CREATE CONTROLFILE REUSE DATABASE "demo" RESETLOGS NOARCHIVELOG
MAXLOGFILES 50
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 226
LOGFILE
GROUP 1 'c:\demo\oradata\demo\redo01.log' SIZE 50M,
GROUP 2 'c:\demo\oradata\demo\redo02.log' SIZE 50M,
GROUP 3 'c:\demo\oradata\demo\redo03.log' SIZE 50M
DATAFILE
'c:\demo\oradata\demo\system01.dbf',
'c:\demo\oradata\demo\odm01.dbf',
'c:\demo\oradata\demo\indx01.dbf',
'c:\demo\oradata\demo\tools01.dbf',
'c:\demo\oradata\demo\undotbs01.dbf',
'c:\demo\oradata\demo\users01.dbf',
'c:\demo\oradata\demo\xdb01.dbf',
'c:\demo\oradata\demo\cwmlite01.dbf',
'c:\demo\oradata\demo\drsys01.dbf',
'c:\demo\oradata\demo\example01.dbf'
CHARACTER SET zhs16gbk
说明:此时没有日志文件,所以只能进行reserlogs,如果是有logfile,则此处不需要resetlogs,noresetlogs就可以
 

7.恢复数据库  SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 523637 (? 12/23/2008 20:52:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE9I\RDBMS\ARC00005.001
ORA-00280: ?? 523637 ???? 1 ???? # 5 ???
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 523637 (? 12/23/2008 20:52:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE9I\RDBMS\ARC00005.001
ORA-00280: ?? 523637 ???? 1 ???? # 5 ???
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open resetlogs;
数据库已更改。
Resetlog后要进行数据库的全备,以前的备份不可用。
 

    2)安装数据库,创建一个实例,用备份的数据文件代替新创建实例的数据文件。

    1.删除安装目录下所有的datafile、comtrolfile、logfile.(oradata目录下的文件)

    2.Copy备份的数据文件到oradata目录下

    3.重建控制文件  C:\Documents and Settings\hefan>sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - Production on 星期一 12月 29 10:57:07 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn as sysdba


    请输入用户名: system

    请输入口令:

    已连接。

 SQL> shutdown immediate
ORA-01507: 未安装数据库
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> @d:\controlfile.sql
控制文件已创建
 
    4.恢复数据库  SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 523637 (? 12/23/2008 20:52:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE9I\RDBMS\ARC00005.001
ORA-00280: ?? 523637 ???? 1 ???? # 5 ???
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 523637 (? 12/23/2008 20:52:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE9I\RDBMS\ARC00005.001
ORA-00280: ?? 523637 ???? 1 ???? # 5 ???
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open resetlogs;
数据库已更改。
 

    进行数据库的全备份,resetlogs后以前的备份不可以用。

    说明:此处新建实例的作用就是不需要创建参数文件、oracle服务。(创建实例时,这些都已经创建好了,此时只需要用备份的数据文件代替新创建实例的数据文件)。