一。有数据文件、控制文件和日志文件的备份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起来,有时会提示没有口令文件PWDdemoora文件找不到。查看对应的目录(database下)会发现该文件是存在的。此时需要注意,该口令文件是新安装数据库后创建实例时生成的口令文件,不是以前所用数据库的口令文件,而现在,我们是用以前数据库的控制文件和数据文件来打开以前的数据库,所以此时需要重新创建一个口令文件。
Sql>shutdown immediate
Sql>host orapwd file=c:/oracle9i/database/PWDdemoora 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/CONTROL01CTL", "c:/demo/oradata/demo/CONTROL02CTL", "c:/demo/oradata/demo/CONTROL03CTL")
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
SQLPlus: Release 92010 - 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/initdemoora
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:/controlfilesql
控制文件已创建
Controlfilesql内容如下:(此处也可以直接在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/redo01log' SIZE 50M,
GROUP 2 'c:/demo/oradata/demo/redo02log' SIZE 50M,
GROUP 3 'c:/demo/oradata/demo/redo03log' SIZE 50M
DATAFILE
'c:/demo/oradata/demo/system01dbf',
'c:/demo/oradata/demo/odm01dbf',
'c:/demo/oradata/demo/indx01dbf',
'c:/demo/oradata/demo/tools01dbf',
'c:/demo/oradata/demo/undotbs01dbf',
'c:/demo/oradata/demo/users01dbf',
'c:/demo/oradata/demo/xdb01dbf',
'c:/demo/oradata/demo/cwmlite01dbf',
'c:/demo/oradata/demo/drsys01dbf',
'c:/demo/oradata/demo/example01dbf'
CHARACTER SET zhs16gbk
说明:此时没有日志文件,所以只能进行reserlogs,如果是有logfile,则此处不需要resetlogs,noresetlogs就可以
你可以试试PRM-DUL for Oracle。
ParnassusData Recovery Manager(以下简称PRM-DUL)是企业级ORACLE数据灾难恢复软件,可直接从Oracle9i,10g,11g,12c的数据库数据文件(datafile)中抽取还原数据表上的数据,而不需要通过ORACLE数据库实例上执行SQL来拯救数据。ParnassusDataRecovery Manager是一款基于JAVA开发的绿色软件,无需安装,下载解压后便可直接使用。
恢复场景1 误Truncate表的常规恢复
D公司的业务维护人员由于误将产品数据库当做测试环境库导致错误地TRUNCATE了一张表上的所有数据,DBA尝试恢复但是发觉最近的备份不可用,导致无法从备份中恢复出该数据表上的记录。 此时DBA决定采用PRM来恢复已经被TRUNCATE掉的数据。
由于该环境中 所有数据库文件均是可用且健康的,用户仅需要 字典模式下加载SYSTEM表空间的数据文件以及被TRUNCATED表的数据文件即可,例如:
create table ParnassusDatatorderdetail_his1 tablespace users asselect from parnassusdatatorderdetail_his;SQL> desc ParnassusDataTORDERDETAIL_HIS
Name Null Type
----------------------- -------- --------------SEQ_ID NOT NULL NUMBER(10)SI_STATUS NUMBER(38)D_CREATEDATE CHAR(20)D_UPDATEDATE CHAR(20)B_ISDELETE CHAR(1)
N_SHOPID NUMBER(10)N_ORDERID NUMBER(10)C_ORDERCODE CHAR(20)N_MEMBERID NUMBER(10)N_SKUID NUMBER(10)C_PROMOTION NVARCHAR2(5)N_AMOUNT NUMBER(7,2)N_UNITPRICE NUMBER(7,2)N_UNITSELLINGPRICE NUMBER(7,2)N_QTY NUMBER(7,2)N_QTYFREE NUMBER(7,2)N_POINTSGET NUMBER(7,2)N_OPERATOR NUMBER(10)C_TIMESTAMP VARCHAR2(20)H_SEQID NUMBER(10)N_RETQTY NUMBER(7,2)N_QTYPOS NUMBER(7,2)select count() from ParnassusDataTORDERDETAIL_HIS;COUNT()
----------
984359
select bytes/1024/1024 from dba_segments where segment_name='TORDERDETAIL_HIS' and owner='PARNASSUSDATA';BYTES/1024/1024
---------------
18971875
SQL> truncate table ParnassusDataTORDERDETAIL_HIS;Table truncated
SQL> select count() from ParnassusDataTORDERDETAIL_HIS;COUNT()
----------
0
启动PRM ,并选择 Tools => Recovery Wizard点击Next
在此TRUNCATE场景中并未采用ASM存储,所以仅需要选择 《Dictionary Mode》字典模式即可
以上就是关于如何从完好的数据文件恢复oracle数据库全部的内容,包括:如何从完好的数据文件恢复oracle数据库、oracle数据库怎样还原到以前某个正确的状态、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)