oracle恢复数据(解决Oracle数据恢复方案)
一、oracle数据库恢复方法(oracle数据库恢复数据)
第一种:
首先,备份数据库(X:oracleoradata)下的数据文件,重新命名即可(否则装数据库的时候会提示sid已存在)。重新安装数据库,当然数据库的名字就是你要恢复的名字。安装完成后,打开控制面板,停止oracle的服务。把(X:oracleoradata)下新生成的文件改名,把原先目录下的文件恢复名字。再重新启动oracle服务和监听。用sys/asdba登陆数据库,可能会提示权限不够(ora-01031)修改(X:oracleora92etworkadmin)文件夹下的sqlnet.ora文件,添加SQLNET._SERVICES=(NTS),增加权限。登陆进去后,打开table提示不能打开。打开common页,执行命令alertdatabaseopen;这时再刷新table,发现原先的表可以打开了。恢复成功了。再用原先数据库的普通用户进入。发现一切正常。
第二种:
1、首先,将原来的ORACLE文件夹改名,原来的路径是D:/oracle.我暂时改成D:/oracle_old.找来ORACLE(我用的是ORACLE9I)安装光盘,将ORACLE安装在原来安装的目录下,这样恢复起来更加方便,主要是注册表的内容不用修改。
2、安装完了之后,系统中又有一个可以使用的ORACLE了。这个时候要做的就是将原来的文件和数据恢复过来。第一步,先关闭ORACLE的所有已经启动的项目,在"服务"里面逐一关闭。然后,将安装目录改名。(例如D:/oracle.改成D:/oracle_new,再将D:/oracle_old改成D:/oracle.)这样理论上说从物理层面恢复了ORACLE了。但是现在还不能启动ORACLE的监听程序和服务程序,还要从逻辑上解决。
3、在dos环境下执行一个删除命令:oradim-delete-sidmm,其中mm为创建oracle时候创建的实例建议执行这个命令后重新启动机器,重启后就可以建立和原来实例名相同的实例。当然你懒,不重新启动也可以,但是你的实例名就不能和原来的一样了。
4、在dos环境下执行命令oradim-new-sidmm-startmodea-pfile"D:oracleadminmmpfileinitmm.ora"创建一个新的实例,其中"mm"为新数据库的名称。
5、启动服务,先打开数据库,然后可以用以前的用户名和密码登陆进去。要补充的是,一般的ORACLE数据库的监听程序都是用电脑的名称来识别地址的,而不是127.0.0.1或者localhost.所以,如果我们安装系统的时候用的是不同的电脑名称(比如我原来用的是wm_mm.重新安装后用的是wenming_mm),那么还有一个工作要做,就是修改文件listener.ora.将里面的相关的东西改过来就可以了。
需要耐心、细心,可能在一步里有一个细小的差别就会出些古怪的错误提示,有时需要根据错误提示采取策略,总之原理是,先装一个一模一样的ORACLE,安装目录、数据库名称都一样,这样保证注册表里不用更改;再覆盖物理文件,最后重新实例化,打开数据库就可以进去了。
注:恢复必须要有以下文件a、初始化参数文件INIT.ORAb、所有数据文件.dbfc、所有重做日志文件(联机日志、归档日志)redod、所有控制文件crtle、internal密码文件。
二、如何从完好的数据文件恢复oracle数据库
一。有数据文件、控制文件和日志文件的备份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就可以
三、Oracle数据被删除后,如何恢复
第一步,获得当前scn
select dbms_flashback.get_system_change_number from dual;
第二步,根据第三步返回的scn不停地尝试查询直到所有记录都存在为止。
select count(*) from t1 as of scn 10670000;--10670000为返回的scn
第三步,当第二步返回的值为所删除的记录数时执行
insert into t1 select* from t1 as of scn 10670000;
commite;
到此数据恢复完毕!
----------------------------------------------------------------------------------------------------
闪回查询可恢复较近的数据。
SCN(系统改变号),它的英文全拼为:System Change Number,它是数据库中非常重要的一个数据结构。SCN是 Oracle内部的时钟机制, Oracle通过 SCN来维护数据库的一致性,并通过SCN实施 Oracle至关重要的恢复机制。
闪回查询无法恢复到表结构改变之前,因为闪回查询使用的当前的数据字典。
1、在oracle9i中闪回数据先要看是否设置了闪回功能,具体如何判断可根据步骤一来查看。
2、在数据成功闪回后一定要先检验数据质量这个是很重要的一步。
3、Flaslhback是9i推出的新特性,但9i只提供闪回查询;而10g提供了闪回查询(Flashback Query)、闪回表(Flashback Table)以及闪回数据库(Flashback Database)等更强大的功能。
可以直接查询该表半天左右前的数据情况
select* from t1 as of timestamp sysdate-1/2;
比较两集合不同找出不同数据
select* from t1 as of timestamp sysdate-1/2
minus select* from t1;
但是在某些情况下,建议使用as of scn的方式执行flashback query,比如需要对多个相互有主外键约束的表进行恢复时,如果使用as of timestamp的方式,可能会由于时间点不统一的缘故造成数据选择或插入失败,通过scn方式则能够确保记录的约束一致性
--------------------------------------------------------------------------------------------------------