通过oracle文件恢复数据库实例

假设在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行。

通过oracle文件恢复数据库实例_第1张图片

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/[email protected]/orcl as sysdba

到此数据库已经可以正常连接使用了。

5。服务自启动
windows就是图方便,自启动当然要跟上。
通过上述方式恢复数据库之后,系统开机之后实例不会随服务启动,服务会启动,但是实例不会启动,需要做一些设置:
a.将系统服务中的OracleOraDb11g_home1TNSListener和OracleServiceorcl服务设为自动启动;
b1.开始->程序->Oracle->Configuration and Migration Tools->Oracle Administration Assistant for Windows NT,数据库->orcl->启动关闭选项->服务启动时启动例程,把该项取消就可以了。

通过oracle文件恢复数据库实例_第2张图片通过oracle文件恢复数据库实例_第3张图片
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。

通过oracle文件恢复数据库实例_第4张图片
重启下系统,服务和实例都自动起来了,完美!

你可能感兴趣的:(数据库,系统运维,服务器技术)