Oracle实例恢复

本文介绍了Oracle数据库中的实例恢复过程,包括实例恢复的发生条件、恢复机制及其自动执行的特点。此外还探讨了不同数据库关闭方式对实例恢复的影响,以及数据库启动过程中的一致性检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例恢复会在数据库没有安全关闭的情况下会发生,在数据库shutdown abort和数据库异常down掉,或者断电会发生实例恢复。实例恢复的原因就是,在数据库down掉那一刻,有部分修改过的数据没有写到磁盘上面,虽然数据在内存里面丢掉了,但是redo写到磁盘上面了,所以实例恢复用redo将丢掉的数据恢复,那么数据库就恢复了,就可以打开了。

 

在出现掉电这种情况,可能连实例恢复都恢复不了,虽然redo日志会很快的刷到磁盘上面,但是总有一个时间是还没来得及刷到磁盘上面,如果非常不恰巧,日志还没有写到磁盘的那一瞬间掉电了,那么这个时候数据也就恢复不了了,因为保护数据的redo没有写入到磁盘上面。这个情况下数据库就可能坏了。

 

实例恢复是一个自动的过程,不需要人工的干预,控制文件的一个作用就是检查数据库文件的各个版本和存储在控制文件里面的版本是不是一致,如果不一致就需要实例恢复。


SQL> conn /as sysdba

已连接。

SQL> shutdown abort;   突然间将数据库关闭,没有将内存里面的脏数据写到磁盘上面

ORACLE 例程已经关闭。

这种方式关闭数据库那么数据库在重新启动的时候就会有一个实例恢复的过程。

SQL> startup nomount;    Oracle启动的第一个过程,将实例启动(其实就是操作系统给Oracle分配了一些内存,同时Oracle将后台的一些进程启动)

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE 例程已经启动。

 

Total System Global Area 3390558208 bytes

Fixed Size                  2180464 bytes

Variable Size            2214595216 bytes

Database Buffers         1157627904 bytes

Redo Buffers               16154624 bytes

 

SQL> alter database mount;  这个阶段就是在配置文件里面去找控制文件,将控制文件挂载

 

数据库已更改。

 

第一个阶段和第二个阶段都不会发生实例恢复,都不会检查数据库的完整性,只有在第三个阶段才会去检查数据库的完整性。如果完整性有问题了就需要恢复了。

SQL> alter database open;  第三个阶段将数据库打开发生实例恢复

 

数据库已更改。


文件头:每一个数据文件头记录着文件更新的信息,在数据库里面更新的信息通常使用SCN来表示,SCN记录着Oracle的变化。

恢复实际上就是读redo log里面信息。


前滚,即redo的过程不是执行SQL的过程,实际上是一个数据块修正的过程,因为数据库还没有打开,SQL语句都没有办法解析,所以使用redo在数据块上面进行更新。在将所有可以应用的redo应用完之后,这个时候数据库就可以打开了。数据库打开就可以使用了,这个时候就有了回滚的问题,在数据库非正常关闭,有些事务还没有提交,这个时候就突然断电了,可能这个事务将数据修改了但是没有提交,重启之后就要将这些没有提交的事务回滚。回滚就将回滚段相应的数据拿回来就行了。回滚是在数据库打开之后做的,而不是先前滚再回滚最后打开数据库。


在将数据库shoutdown abort之后,在start up之后,去数据库alter文件里面看就会看到上面那些实例恢复的信息。在使用shutdown immediately就不会出现上面的信息,不需要实例恢复,因为将内存里面的脏数据写到磁盘上面了。

 

11g以前oraclealter文件是在bdump目录下呢。 oracle 11g一改常态以XML与传统的文本两种格式提供 Alert 日志。 oracle 11g新的日志的位置由Automatic Diagnostic Respository(ADR)决定。 可以通过新的初始化参数DIAGNOSTIC_DEST控制ADR BASE的位置。 显示DIAGNOSTIC_DEST的位置 show parameter DIAGNOSTIC_DEST; 查询两种日志的位置 查询xml文件的目录 select value from v$diag_info where name='Diag Alert'; 查询文本文件的目录 select value from v$diag_info where name='Diag Trace'; 也可以通过查询background_dump_dest来查看oracle的文本日志 show paramter backgound_dump_dest; 或是 select value from v$parameter where name=’background_dump_dest’;

 

 

Oracle在每一次启动的过程当中,都会去做一致性的检查,如果发现有问题会去做实例恢复。


重做操作系统后oracle数据库恢复 文件夹中文件说明: ora.reg oracle主要注册项的恢复参考文件 oraodbc.reg odbc驱动项的恢复参考文件 oraole1~4.reg ole 驱动项的恢复参考文件 恢复中重要操作说明: 1、恢复前提,数据库系统文件(初始化配置文件、数据文件、重作日志文件、控制文件)没有遭到破坏。 2、注册表的恢复 3、监听程序重新恢复,注意监听配置、tns配置中机器名的核对 4、oracle实例服务的恢复 5、注册表中本地默认实例恢复 6、计算机管理-用户组中ORA_DBA角色的恢复 操作步骤: 1、系统环境变量的恢复 在系统环境变量path项之前增加oracle系统可执行程序及动态链接库资源如"D:\oracle\ora90\bin;" 2、注册表的恢复 a、oracle数据库系统变量的恢复,ora.reg中饱含了oracle的主要系统参数,其中home项包含了不同的版本信息,导入注册表后可以根据情况修改、增加或者删除对应的home信息。 b、oracle odbc驱动参数的恢复,需要导入oraodbc.reg,此处以oracle90为例,针对不同的oracle版本需要修改相应的参数。导入后,除了检查版本及修改上述参数外还需要手工在注册表(regedit.exe)hkey_local_machine->software->odbc->odbcinst.ini->odbc drivers一项中参考其它字符串,增加一个oracle驱动程序名称(如Oracle in OraHome90)。恢复后可以通过系统odbc管理工具进行配置、测试。最后,如果不需要使用ODBC连接数据库,就不需要进行此处的恢复。 c、oracle oledb驱动参数的恢复,需要导入oraole1~4.reg,实际只需要导入1~2两个文件即可,其它两个属于注册表的副件。同样需要针对不同版本修改相应的参数。恢复后,可以通过配置一个 oledb测试,最快捷的方法为,新建一个文本文件,然后将后缀改为".udl"然后就可以继续操作了。最后,同ODBC一样,如果确定不需要使用ole驱动访问数据库,也可以不进行这部分的恢复操作。 ******此处的操作需要对windows操作系统注册表非常熟悉,对于linux平台,恢复操作类似,只不过需要对环境变量的操作熟悉。 3、监听程序的恢复 a、配置参数的恢复oracle_home\network\admin\listener.ora,检查本地机器名是否有变化,以确定监听参数中监听地址项是否需要修伽。 b、本地访问服务名tnsnames.ora的配置,同样需要检查机器名或ip地址是否有变化。此步骤可以省略 c、监听服务的恢复,运行 lsnrctl,执行start,会自动向系统服务中增加并启动监听服务。可以通过启动时的提示确定服务是否启动成功。确认服务启动成功后,在系统服务管理台里将服务启动属性从“手动”改为“自动”。 ******此处操作需要对lsnrctl工具熟悉。 4、本地默认实例恢复 在注册表hkey_local_machine->software->oracle->home0->oracle_sid项,确认内容和你要恢复实例名一致。进行这个操作,主要方便在本地sqlplus或其它客户端登录时不用指定数据库本地网络服务名。 5、系统ORA_DBA组的恢复 在"计算机管理"控制台中->系统工具->本地用户和组->组中,增加名称为"ORA_DBA",描述为"Members can connect to the Oracle database as a DBA without a password"的组,并将系统管理员用户如"Administrator"添加到组中。执行这样的操作,是为了能够在本机上不输入数据库用户名/密码,直接以dba角色登录数据库进行管理。 6、实例恢复 a、确认数据库的初始化配置文件、数据文件、重作日志文件、控制文件等没有被损坏或缺失。 b、使用oradim工具重建实例服务。如oradim -new -sid test -startmode m -pfile d:\oracle\admin\test\pfile\init.ora oradim是oracle实例管理工具,具体参数说明,可以在命令行中直接输入oradim查看帮助提示。使用它能够创建、修改、删除,启动、停止本机上的oracle实例服务,有兴趣的,可以使用它实现一个单数据库实例的案例。 c、使用sqlplus以dba身份登录确认数据库是否正常启动。 ******此处操作需要对oradim工具、oracle实例的概念熟悉。 7、恢复完成。可以打开其它应用程序了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值