文件丢失的原因

  • 用户错误:管理员可能会因疏忽删除或覆盖了操作系统必需的文件

  • 应用程序错误:应用程序或脚本也可能包含逻辑错误,当它处理数据库文件时,会导致文件丢失或损坏。

  • 介质故障:磁盘驱动器或控制器可能会发生完全或部分故障,从而导致文件损坏,甚至文件完全丢失。
  • 非关键性丢失
  • 数据库仍可继续运行
  • 处理方法
  • 创建一个新文件。
  • 重建文件。
  • 恢复丢失或损坏的文件

丢失 和恢复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