文件丢失的原因
- 用户错误:管理员可能会因疏忽删除或覆盖了操作系统必需的文件
- 应用程序错误:应用程序或脚本也可能包含逻辑错误,当它处理数据库文件时,会导致文件丢失或损坏。
- 介质故障:磁盘驱动器或控制器可能会发生完全或部分故障,从而导致文件损坏,甚至文件完全丢失。
- 非关键性丢失
- 数据库仍可继续运行
- 处理方法
- 创建一个新文件。
- 重建文件。
- 恢复丢失或损坏的文件
丢失 和恢复TEMPFILE
- 丢失TEMPFILE
- 如果缺失任何一个临时文件,则需要 TEMP 空间来执行的SQL 语句都将失败。
- Oracle 数据库可以在临时文件缺失的情况下启动。启动数据库时如果有任何临时文件不存在,系统都会自动创建这些临时文件,从而使数据库可以正常打开
- 恢复 TEMPFILE 丢失
- 示例
- 添加一个新的数据文件
-
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日志组。
- 丢失重做日志组成员
- 缺失重做成员文件时,预警日志和归档进程 (ARCn) 跟踪文件将记录一条错误消息。
- 丢失了非当前重做日志组
- ALTER DATABASE CLEAR LOGFILE 重新创建组中的所有成员
- 丢失的重做日志组在丢失前已经进行了归档,不需要进行任何操作
- 不符合以上两种情况,应该立即备份
- 重新创建重做日志文件:必须具有 ALTER DATABASE系统权限
- 限制和防范措施
- 实例至少需要两个重做日志文件组,而无论组中成员数目的多少
- 仅当重做日志组或组成员处于不活动状态时才能将其删除
- 应当在删除重做日志组前,将其归档(如果启用了归档)。若要查看是否已归档,请使用 V$LOG 视图。
-
SQL> SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG; --查询日志组状态
SQL> alter system switch logfile; --切换日志组SQL> alter system checkpoint; --使日志组状态变为inactive
- 示例
-
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; - EM:管理-->重做日志组-->编辑,查看
重新创建索引
- 示例
-
SQL> CREATE INDEX rname_idx
2 ON hr.regions (region_name)
3 PARALLEL 4; - PARALLEL :多个进程可以同时协同工作来创建索引。
- NOLOGGING:创建进程将创建极少的重做日志条目
验证
- 数据库管理员的验证方法
- 操作系统验证优先于口令文件验证。特别是,如果您是操作系统的 OSDBA 或 OSOPER组的成员,并且以 SYSDBA或 SYSOPER 身份连接,则连接时将具有相关的管理权限,而与您指定的用户名/口令无关。
- 重新创建口令验证文件
-
- 使用 OS 验证登录到数据库
- 将REMOTE_LOGIN_PASSWORDFILE 参数设置为 NONE 并重新启动数据库
- 使用口令实用程序orapwd 创建口令文件。
-
- orapwd file=filename password=password entries=max_users
- Entries 是允许以SYSDBA或 SYSOPER 身份连接的最大相异用户数
- 将REMOTE_LOGIN_PASSWORDFILE 参数设置为 EXCLUSIVE
-
- EXCLUSIVE 表示仅一个实例可以使用口令文件且口令文件包含除 SYS 之外的其它名称。
- 使用在步骤 3 中创建的口令文件连接到数据库。
-
- CONNECT sys/admin AS SYSDBA
- 重新启动实例
- 口令文件位置
-
- UNIX:$ORACLE_HOME/dbs
- Windows:%ORACLE_HOME%\database