假设在windows服务器下,oracle数据库使用过程中突然出现了操作系统不可用(病毒,资源不足)/工作人员不知情情形下重装了操作系统,导致的oracle不可用但是之前的oracle相关文件都还存在,可以通过文件恢复的方式来重新拉起数据库服务。
下面的示例为windows服务器中的oracle库文件恢复到另一台windows服务器,
windows》windows,
sid=orcl,
版本Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
ORACLE_BASE C:\app\Administrator
ORACLE_HOME C:\app\Administrator\product\11.2.0\dbhome_1
参考
https://blog.csdn.net/kelvin1985/article/details/79552077
1。在新的服务器上安装号数据库,各种参数/路径和之前的oracle保持一致,不用创建数据库。
2。将之前服务器上的admin、flash_recovery_area、oradata这几个文件夹中数据库相关的所有文件拷贝到新服务器上的相同目录下,如admin/orcl,flash_recovery_area/orcl,oradata/orcl。将老服务器上ORACLE_HOME/dbs/initorcl.ora也拷贝到新服务器相同目录下,如果没有这个文件,可以将新服务器中ORACLE_HOME/dbs/init.ora文件复制为initorcl.ora,文件内默认数据库名是orcl,其他数据库名称的改为一致。
3。启动实例
set ORACLE_SID=ORCL
SQLPLUS / AS SYSDBA
SQL>STARTUP NOMOUNT
构建控制文件:
SQL>CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'C:\app\Administrator\oradata\orcl\redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 'C:\app\Administrator\oradata\orcl\redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 'C:\app\Administrator\oradata\orcl\redo03.log' SIZE 50M BLOCKSIZE 512
DATAFILE
'C:\app\Administrator\oradata\orcl\system01.dbf',
'C:\app\Administrator\oradata\orcl\sysaux01.dbf',
'C:\app\Administrator\oradata\orcl\undotbs01.dbf',
'C:\app\Administrator\oradata\orcl\users01.dbf',
'C:\app\Administrator\oradata\orcl\MFW333.ORA'
CHARACTER SET ZHS16GBK
;
修改的地方:把NOARCHIVELOG改成ARCHIVELOG,并增加自己的DATAFILE配置,只增加数据文件(_DATA.DBF),临时表空间不要加(_TEMP.DBF)往后面增加即可,注意最后一个不要留逗号。
此一步可能在执行时会出现一个版本的错误,将第2步中initorcl.ora文件内compatible参数改为它提示中的第一个版本compatible ='11.2.0.4',下图66行。
SQL>recover database;
SQL>alter database open;
本次实验过程中这条语句提示了ORA-00283,ORA-00264,大致意思是不需要进行恢复操作,不管它,继续下一步。
SQL> alter database open;
这一条看它提示是否要加RESETLOGS 或 NORESETLOGS 选项。
到这里数据库已经打开可以进行相应查询操作了,但是上面的构建控制文件过程中没有构建到临时表空间,需要手动创建:
SQL> CREATE TEMPORARY TABLESPACE temp2 TEMPFILE '/oradata/orcl/TEMP2.DBF' SIZE 200m AUTOEXTEND ON;
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;
重新启动实例看与没有问题:
SQL>SHUTDOWN
SQL>STARTUP
4.网络配置,配置监听和服务名
$ORACLE_HOME/network/admin/tnsname.ora和$ORACLE_HOME/network/admin/listener.ora
文件内容可参照下面,中间的路径C:\app\Administrator\product\11.2.0\dbhome_1,服务名ORCL,主机名WIN-H3TAS0CD3J2改成你自己的:
《《《《《《《《《《《《《《《《《《《《listener.ora》》》》》》》》》》》》》》》》》》》》》
# listener.ora Network Configuration File: C:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN-H3TAS0CD3J2)(PORT = 1521))
)
)
ADR_BASE_LISTENER = C:\app\Administrator
《《《《《《《《《《《《《《《《《《tnsname.ora》》》》》》》》》》》》》》》
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
重新启动监听,连接测试:
lsnrctl stop
lsnrctl start
sqlplus sys/oracle@127.0.0.1/orcl as sysdba
到此数据库已经可以正常连接使用了。
5。服务自启动
windows就是图方便,自启动当然要跟上。
通过上述方式恢复数据库之后,系统开机之后实例不会随服务启动,服务会启动,但是实例不会启动,需要做一些设置:
a.将系统服务中的OracleOraDb11g_home1TNSListener和OracleServiceorcl服务设为自动启动;
b1.开始->程序->Oracle->Configuration and Migration Tools->Oracle Administration Assistant for Windows NT,数据库->orcl->启动关闭选项->服务启动时启动例程,把该项取消就可以了。
b2.打开注册表regedit,HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE,设置字符串参数ORACLE_SID值ORCL;HKEY_LOCAL_MACHINE/SOFTWARE/ORACLEKEY_OraDb11g_home1,设置ORA_orcl_AUTOSTART为TRUE,ORA_orcl_AUTOSTART为true。
重启下系统,服务和实例都自动起来了,完美!
######################################################
记一次系统重装后恢复2021.3.3
系统越来越卡了,安装了太多软件,打算重新装下系统,拷完C盘资料后关机重启进PE安装系统。
系统重装前信息:win10 x64系统,oracle11.2.0.4 64位单机,库名orcl,安装位置'E:\app\Administrator,归档。
1.安装好win10专业版系统,除C盘外其他盘信息未变动。安装vc++2005sp1、vc++2008,将E:\app备份为E:\app1, 安装oracle11.2.0.4 64,安装路径同之前一样E:\app,创建相同名称数据库orcl,sqlplus登录正常。
2.在系统服务中关闭所有oracle相关服务,也可cmd关闭oracle服务和监听服务。将备份文件夹E:\app1下的(dmin/orcl,flash_recovery_area/orcl,oradata/orcl)这几个目录中文件覆盖到本次安装目录E:\app下相应文件夹,启动数据库,提示无法定位数据文件MFW333.ORA,原因为此文件原位置在E:\app\Administrator\product\11.2.0\dbhome_1\database\MFW333.ORA,本次复制该文件到了E:\app\Administrator\oradata\orcl\MFW333.ORA。关闭数据库然后启动到nomount状态,以下为按照本文档前述方法的后续操作记录。
Microsoft Windows [版本 10.0.19042.804]
(c) 2020 Microsoft Corporation. 保留所有权利。
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on 星期三 3月 3 20:07:46 2021
Copyright (c) 1982, 2013, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'E:\app\Administrator\oradata\orcl\redo01.log','E:\app\Administrator\fast_recovery_area\orcl\REDO01_1.LOG' SIZE 50M BLOCKSIZE 512,
9 GROUP 2 'E:\app\Administrator\oradata\orcl\redo02.log','E:\app\Administrator\fast_recovery_area\orcl\REDO02_1.LOG' SIZE 50M BLOCKSIZE 512,
10 GROUP 3 'E:\app\Administrator\oradata\orcl\redo03.log','E:\app\Administrator\fast_recovery_area\orcl\REDO03_1.LOG' SIZE 50M BLOCKSIZE 512
11 DATAFILE
12 'E:\app\Administrator\oradata\orcl\system01.dbf',
13 'E:\app\Administrator\oradata\orcl\sysaux01.dbf',
14 'E:\app\Administrator\oradata\orcl\undotbs01.dbf',
15 'E:\app\Administrator\oradata\orcl\users01.dbf',
16 'E:\app\Administrator\oradata\orcl\MFW333.ORA'
17 CHARACTER SET ZHS16GBK
18 ;
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
*
第 1 行出现错误:
ORA-01503: CREATE CONTROLFILE 失败
ORA-01167: 这两个文件为相同的文件/组号或相同的文件
ORA-01517: 日志成员:
'E:\app\Administrator\fast_recovery_area\orcl\REDO01_1.LOG'
ORA-01517: 日志成员: 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG'
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 ('E:\app\Administrator\oradata\orcl\redo01.log','E:\app\Administrator\fast_recovery_area\orcl\REDO01_1.LOG') SIZE 50M BLOCKSIZE 512,
9 GROUP 2 ('E:\app\Administrator\oradata\orcl\redo02.log','E:\app\Administrator\fast_recovery_area\orcl\REDO02_1.LOG') SIZE 50M BLOCKSIZE 512,
10 GROUP 3 ('E:\app\Administrator\oradata\orcl\redo03.log','E:\app\Administrator\fast_recovery_area\orcl\REDO03_1.LOG') SIZE 50M BLOCKSIZE 512
11 DATAFILE
12 'E:\app\Administrator\oradata\orcl\system01.dbf',
13 'E:\app\Administrator\oradata\orcl\sysaux01.dbf',
14 'E:\app\Administrator\oradata\orcl\undotbs01.dbf',
15 'E:\app\Administrator\oradata\orcl\users01.dbf',
16 'E:\app\Administrator\oradata\orcl\MFW333.ORA'
17 CHARACTER SET ZHS16GBK
18 ;
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
*
第 1 行出现错误:
ORA-01503: CREATE CONTROLFILE 失败
ORA-01565: 标识文件 'E:\app\Administrator\fast_recovery_area\orcl\REDO02_1.LOG'
时出错
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 ('E:\app\Administrator\oradata\orcl\redo01.log','E:\app\Administrator\fast_recovery_area\orcl\REDO01_1.LOG') SIZE 50M BLOCKSIZE 512,
9 GROUP 2 ('E:\app\Administrator\oradata\orcl\redo02.log','E:\app\Administrator\fast_recovery_area\orcl\REDO02_1.LOG') SIZE 50M BLOCKSIZE 512,
10 GROUP 3 ('E:\app\Administrator\oradata\orcl\redo03.log','E:\app\Administrator\fast_recovery_area\orcl\REDO03_1.LOG') SIZE 50M BLOCKSIZE 512
11 DATAFILE
12 'E:\app\Administrator\oradata\orcl\system01.dbf',
13 'E:\app\Administrator\oradata\orcl\sysaux01.dbf',
14 'E:\app\Administrator\oradata\orcl\undotbs01.dbf',
15 'E:\app\Administrator\oradata\orcl\users01.dbf',
16 'E:\app\Administrator\oradata\orcl\MFW333.ORA'
17 CHARACTER SET ZHS16GBK
18 ;
控制文件已创建。
SQL>
SQL>
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF'
SQL> recover database;
完成介质恢复。
SQL>
SQL> alter database open;
数据库已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 5127602176 bytes
Fixed Size 2290120 bytes
Variable Size 1040191032 bytes
Database Buffers 4076863488 bytes
Redo Buffers 8257536 bytes
数据库装载完毕。
数据库已经打开。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for 64-bit Windows: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 329
下一个存档日志序列 331
当前日志序列 331
SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
C:\Users\Administrator>rman target /
恢复管理器: Release 11.2.0.4.0 - Production on 星期三 3月 3 20:19:25 2021
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: ORCL (DBID=1566391699)
RMAN> list backup
2> ;
使用目标数据库控制文件替代恢复目录
说明与资料档案库中的任何备份都不匹配
RMAN>
通过以上步骤,归档信息还存在,但是rman备份的信息不在了,之前是通过rman做过几次备份的。按照本文档前端所述添加临时表空间提示临时表空间文件已是数据库一部分,跳过。监听和服务名部分未操作。重启了数据库服务和操作系统测试暂未出现问题。
本次恢复没有特殊情况,如断电或介质损坏,数据库服务也是随系统正常关闭,整体情况比较理想。通过以上恢复,数据库是恢复了,用户、表都还在,但是没有验证是否有数据丢失问题。
最后,想起之前有通过rman进行过全备份,且数据库处于归档模式下,归档文件和redo文件也是存在的,不通过以上方式应该也是可以做恢复的。
############################大条分割线############################