本文介绍一些简单的恢复情况
目标是完成:
- 恢复临时表空间
- 恢复重做日志组成员
- 恢复丢失的索引
- 重新创建口令文件
目录:
--文件丢失
----恢复临时文件
----恢复重做日志文件
----恢复索引
----恢复验证文件
相关链接:
11.09.19 备份和恢复的概念
※以下原因可能会导致文件丢失或损坏:
- 用户错误
- 应用程序错误
- 介质故障
※丢失的文件也分为
关键性文件与
非关键性文件
※非关键性文件:数据库和大多数应用程序没有它也可以继续运行的文件
例如丢失了一个多路复用重做日志文件,仍可以使用其他重做日志文件来保证数据库持续运行
※虽然丢失非关键性文件不会使数据库崩溃,但会削弱数据库功能,例如:
- 丢失索引表空间会使应用程序和查询的速度大大减慢
- 丢失联机重做日志组(只要不是当前联机日志组)会导致数据库被挂起,直到生成新的日志文件为止
- 丢失临时表空间会使得用户无法创建索引或者使用查询,直到用户分配到新的临时表空间为止
※可以采用以下办法进行非关键性文件的修复:
- 创建一个新文件
- 重建文件
- 恢复丢失或者损坏的文件
临时文件
※如果属于临时表空间的临时文件丢失或者损坏,则TEMP表空间将不可用。需要TEMP 空间来执行的SQL 语句都将失败。
※ORACLE数据库可以在临时文件缺失的情况下启动。启动数据库时如果有任何临时文件不存在,系统都会自动创建这些临时文件。
发生这种情况时,启动过程中会在预警日志中进行记录。
恢复TEMPFILE的丢失
※不需要重新启动数据库就可以恢复丢失的TEMPFILE。
※通过创建新文件恢复,示例如下:
例如在OS层面删除了属于临时表空间TEMP的数据文件temp01.dbf后,如果需要恢复数据库,可以采用以下步骤:
①在数据库临时表空间中添加一个新的数据文件
SQL> ALTER TABLESPACE temp ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp02.dbf' SIZE 20M;
②删除那个已在OS层删除的文件
SQL> ALTER TABLESPACE temp DROP TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf';
重做日志文件
※处理重做日志文件的丢失情况前,先来了解下重做日志组的可能状态:
- CURRENT:LGWR 进程当前正在向重做日志组写入重做数据,该日志组将保持此状态,直到切换至其他日志组为止。
- ACTIVE:不再向重做日志组写入数据,但其仍包含进行实例恢复所需的重做数据。
- INACTIVE:不再向重做日志组写入数据,且不再需要它来进行实例恢复,可以变成下一个CURRENT日志组。
△oracle数据库正常运行过程中,重做日志组会循环经历这三种不同的状态。
※重做数据对于恢复操作至关重要,因为它包含对数据库所有修改的记录,从而允许您在从备份还原后进行前滚操作。
※重做日志组可以包含多个成员,每个成员与组内的其他成员相同,目的是为了提供冗余。
△确保数据库的正常运行,必须至少有两个重做日志组可以用,且每组中至少有一个成员可用。
※如果缺失重做成员文件时,预警日志和归档进程(ARCn) 跟踪文件将记录一条错误消息。
※若果丢失了非当前重做日志组,则可以使用alter database clear logfile 语句重新创建组中的所有成员。
※删除
重做日志组之前,有以下注意事项:
- 实例至少需要两个重做日志文件组,而无论组中的成员数目多少
- 仅当重做日志或组成员处于不活动状态时才能将其删除
- 应在删除重做日志组前,将其归档
△查看重做日志组是否归档及其状态,可以通过查看V$LOG视图
例如
SQL>SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
GROUP# ARC STATUS
---------
---
----------------
1
YES
ACTIVE
2
NO
CURRENT
3 YES INACTIVE |
※可以通过使用有DROP LOGFILE子句的ALTER DATABASE语句来删除重做日志组
例如:
下面的语句将删除编号为3 的重做日志组:
ALTER DATABASE DROP LOGFILE GROUP 3;
※删除单独的
重做日志组成员之前,有以下注意事项:
- 实例始终至少需要两个有效重做日志文件组,而无论组中成员数目的多少。
- 删除成员前,请确保重做日志成员所属的组已经归档
- 仅当重做日志成员不是活动组或当前组的一部分时才能删除该成员
※可以通过使用有DROP LOGFILE MEMBER子句的ALTER DATABASE语句来删除重做日志组成员
※如果某个需要删除的重做日志组是处于活动状态,更改状态步骤如下:
- 强制进行日志转换
- 强制检查点(如果强制日志转换后日志组还是处于活动状态的话)
示例如下:
使当前日志组转换为活动或非活动状态:
SQL>ALTER SYSTEM SWITCH LOGFILE;
强制检查点,使活动日志组转换为非活动状态:
SQL>ALTER SYSTEM CHECKPOINT;
※重新创建重做日志组成员文件示例如下:
SQL> ALTER DATABASE DROP LOGFILE MEMBER '/u01/app/oracle/oradata/orcl/redo02b.log';
SQL> !rm /u01/app/oracle/oradata/orcl/redo02b.log
SQL> ALTER DATABASE ADD LOGFILE MEMBER
'/u01/app/oracle/oradata/orcl/redo02b.log' TO GROUP 2; |
△从数据库中删除重做日志组或重做日志成员,并未使用OMF时,将不会从磁盘上删除相应文件,仅更新控制文件。
使用ALTER DATABASE删除重做日志组或重做日志成员后,应使用适当的OS层命令来清除已删除的重做日志文件。
索引
※索引丢失时,更为快速、简单的方法是重新创建而不是尝试恢复索引。
※创建或重新创建索引时,可以使用以下关键字来缩短创建时间:
- PARALLEL:使用并行多个进程同时协同工作来创建索引
- NOLOGGING:使创建进程创建极少的重做日志条目,使索引创建速度更快
※实例如下:
使用PARALLEL关键字
SQL>CREATE INDEX idx ON table(column) PARALLEL 4;
※nologging/logging是永久属性,因此将显示在数据字典中,通过ALTER INDEX 命令可以随时更新
SQL>ALTER INDEX NOLOGGING;
SQL>ALTER INDEX LOGGING;
验证文件
※数据库验证分为OS验证与口令文件验证
△操作系统验证优先于口令文件验证
※通常,口令文件不包含在备份中,因为在大多数情况下,可在万不得已时重新创建口令文件。如果丢失了口令文件,要重新创建该文件需要至少关闭并重新启动数据库一次。为了避免不必要的停机时间,应该在备份中包含口令文件。
※如果使用REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE(或SHARED)装载了数据库或实例,请不要删除或修改口令文件。否则,将无法使用该口令文件从远程重新连接。即使替换了该文件,也无法使用新口令文件,因为时间戳和校验和将是错误的。
※Oracle 数据库提供了一个口令实用程序orapwd 来创建口令文件
orapwd语法:
$# orapwd
file=filename
password=password
entries=max_users
△参数解释:
- file--口令文件的名称
- password--SYSOPER和SYSDBA的口令
- entries--允许以SYSOPER或SYSDBA身份连接的最大相异用户数
例如:
orapwd file=$ORACLE_HOME/dbs/orapwU15
password=admin entries=5
|
※重新创建口令验证文件步骤实例如下:
- 使用OS验证登录到数据库
- 将REMOTE_LOGIN_PASSWORDFILE参数设置为NONE并重启数据库
- 使用口令实用程序orapwd创建口令文件
- 将REMOTE_LOGIN_PASSWORDFILE 参数设置为EXCLUSIVE
- 使用步骤3创建的口令文件连接到数据库,例如connect sys/admin as sysdba
- 重新启动实例
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26121819/viewspace-709668/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26121819/viewspace-709668/