Oracle非重要文件恢复,redo、暂时文件、索引文件、password文件

增量备份的应用在recovery阶段。不再restore阶段

了解数据库设置表:
SQL>desc database_properties
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 PROPERTY_NAME                             NOT NULL VARCHAR2(30)
 PROPERTY_VALUE                                     VARCHAR2(4000)
 DESCRIPTION                                        VARCHAR2(4000)

关键性与非关键性
    非关键性文件是指数据库和大多数应用程序没有它也能继续执行的文件。比如,假设数据库丢失了一个多路复用重做日志文

件。仍可使用其他重做日志文件副本来保持数据库持续执行。
    尽管丢失非关键性文件不会导致数据库崩溃,但它会削弱数据库的功能。比如:


丢失索引表空间会导致应用程序和查询的执行速度大幅减慢,或者,假设这些索引用于强制实施约束,则丢失后甚至会导致应用

程序无法使用。
丢失联机重做日志组(仅仅要不是当前联机日志组)会导致在 LGWR 下一次尝试写入组时数据库操作被挂起,直到生成新的日志文

件为止。


丢失暂时表空间会使用户无法执行查询或创建索引,直到将这些用户分配到新的暂时表空间为止。
 --10g时丢失暂时表空间,数据库不能启动,当11g时,丢失了暂时文件,数据库会自己主动创建一个同名同位的暂时文件。
 --11g中发生此情时发生这样的情况时,启动过程中会在预警日志中显示类似以下的消息:
 --
Re-creating tempfile /u01/app/oracle/oradata/orcl/temp01.dbf
----------------------------------------------------------------------------------------------------------------

-

一、日志成员丢失:
    要处理重做日志文件的丢失问题,了解重做日志组的可能状态很重要。在 Oracle DB 正常执行过程中,重做日志组会循

环经历三种不同的状态。依照循环的顺序,状态各自是:

CURRENT:此状态表明 LGWR 正在向重做日志组写入数据,以记录数据库中正在进行的全部事务处理的重做数据。该日志组将保

持此状态,直到切换至其他日志组为止。

ACTIVE:重做日志组仍包括恢复实例所需的重做数据。这是尚未运行检查点期间重做日志组所处的状态,重做日志组中出现的所

有数据更改都将写出到数据文件。

INACTIVE:上述检查点已经运行,这表示不再须要该重做日志组来恢复实例。它能够变为下一个 CURRENT 日志组。

对在线redo log的操作:

查看日志组的状态:
SQL>select GROUP#,SEQUENCE#,MEMBERS,ARCHIVED,STATUS from v$log;

    GROUP#  SEQUENCE#    MEMBERS ARC STATUS
---------- ---------- ---------- --- ----------------
         1          7          2 YES INACTIVE
         2          8          2 NO  CURRENT
         3          6          2 YES INACTIVE
查看日志文件的状态:
SQL>select GROUP# ,TYPE,MEMBER from v$logfile;

    GROUP# TYPE       MEMBER
---------- -----------------------------------------------------------------
         3 ONLINE
/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_3_b22567o2_.log

         3 ONLINE
/u01/app/oracle/fast_recovery_area/PROD/onlinelog/o1_mf_3_b2256827_.log

         2 ONLINE
/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_2_b2255zsg_.log

         2 ONLINE
/u01/app/oracle/fast_recovery_area/PROD/onlinelog/o1_mf_2_b22560gb_.log

         1 ONLINE
/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_1_b2255npg_.log

         1 ONLINE
/u01/app/oracle/fast_recovery_area/PROD/onlinelog/o1_mf_1_b2255nxl_.log

  --删除原有的日志组;(仅仅操作状态为inactive的日志组)
  --若要操作日志组为current时,需先进行日志切换:alter system switch logfile;
  --若为active时。则可强制进行检查点:alter system checkpoint;

1.操作日志文件。

1).当某个日志组中的一个数据文件丢失。对其在线操作。先加入,再删除;

alter database add logfile member '/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_2_b_.log' to group 2;

alter database drop logfile member '/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_1_b2255npg_.log' to group 2;

2).在线加入一个组,再加入一个成员;

SQL>alter database add logfile group 4 '/u01/app/oracle/oradata/ORCL/onlinelog/redo04.log'size 100m;

SQL>alter database add logfile member'/u01/app/oracle/oradata/ORCL/onlinelog/redo04_b.log' to group 4;

3).查看日志组及成员;
SQL>select GROUP#,members,BYTES/1024/1024 size_M,STATUS,ARCHIVED from v$log;


2.日志文件丢失,重新启动或alter system switch logfile 触发报错;生产库中通常是日志切换触发错误;

1)丢失非current redo日志组

select a.group#, a.status, a.archived,b.member from v$log a,v$logfile b where a.group#=b.group#;
   --查看日志组状态及文件虽在位置

$rm /u01/app/oracle/oradata/ENMOEDU/redo09*
     --删除第九组的所有文件
$ls /u01/app/oracle/oradata/ENMOEDU/redo09*
     --查看是否删除成功
   
Sql> shutdown immediate
Sql> startup
     --重新启动数据库触发出错
Sql> startup mount
Sql> alter database clear logfile group 9;
     --重建了第九组的了两个文件,两个文件都是空的。
Sql> alter database open;

 cat  /u01/app/oracle/oradata/ENMOEDU/redo03*。
     --查看物理地址,查看是否生成文件


SQL>select GROUP#,members,BYTES/1024/1024 size_M,STATUS,ARCHIVED from v$log;
     --查看日志组及成员


Alert日志中的错误:
Errors in file

/u01/app/oracle/diag/rdbms/enmoedu/ENMOEDU/trace/ENMOEDU_lgwr_35031.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/ENMOEDU/redo01.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Errors in file /u01/app/oracle/diag/rdbms/enmoedu/ENMOEDU/trace/ENMOEDU_lgwr_35031.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/ENMOEDU/redo01.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

2).丢失当前redo日志组

select a.group#, a.status, a.archived,b.member
from v$log a,v$logfile b
where a.group#=b.group#;

$rm /u01/app/oracle/oradata/ENMOEDU/redo09*。

alter system switch logfile;
/
/
数据库出现hanging现象,在alert.log中报错。

或重新启动数据库触发错误:
Sql> shutdown immediate
Sql> startup
   --触发出错
SQL> startup mount
ORACLE instance started.

Total System Global Area  237998080 bytes
Fixed Size                  2227216 bytes
Variable Size             192938992 bytes
Database Buffers           37748736 bytes
Redo Buffers                5083136 bytes
Database mounted.

SQL> alter database clear logfile group 9;
     --丢失current状态日志组,不能这样恢复

alter database clear logfile group 9
*
ERROR at line 1:
ORA-00350: log 9 of instance ENMOEDU (thread 1) needs to be archived
ORA-00312: online log 9 thread 1: '/u01/app/oracle/oradata/ENMOEDU/redo03.log'


SQL> alter database clear unarchived logfile group 9;
    --无归档恢复
Database altered.

验证:

!ls /u01/app/oracle/oradata/ENMOEDU/
 
SQL> select GROUP#,members,BYTES/1024/1024 size_M,STATUS,ARCHIVED from v$log;


----------------------------------------------------------------------------------------------------------------


二、丢失暂时文件:

1.--查看暂时文件的位置及名称
SYS>select name from v$tempfile;
/u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b22570tq_.tmp

2.--删除暂时文件
SYS>!rm /u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b22570tq_.tmp

3.--触发错误。暂时文件未找到
SYS>create global temporary table tab_temp as select * from dba_objects;
create global temporary table tab_temp as select * from dba_objects
                                                        *
ERROR at line 1:
ORA-01116: error in opening database file 201
ORA-01110: data file 201:
'/u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b22570tq_.tmp'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

4.在知道暂时数据文件丢失时。能够不须要又一次启动数据库就能够在丢失了暂时文件后进行恢复;

SQL> ALTER TABLESPACE temp ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp02.dbf' SIZE 20M;
 Tablespace altered.

SQL> ALTER TABLESPACE temp DROP TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf';
 

Tablespace altered.
 

5. 1)在11g中还能够重新启动数据库。数据库会自己主动重建暂时数据文件,能够查看alert日志看相关信息(一般直接第4步就能够了)

shutdown immediate;

SYS>startup
ORACLE instance started.
Total System Global Area  839282688 bytes
Fixed Size                  2257880 bytes
Variable Size             545262632 bytes
Database Buffers          289406976 bytes
Redo Buffers                2355200 bytes
Database mounted.
Database opened.

SYS>select name from v$tempfile;
/u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b29o0g6r_.tmp

1 row selected.
   --数据库重建

2)在11g曾经,如数据库不能重起。能够创建新的暂时表空间:

create temporary tablespace temp2 tempfile
'/u01/app/oracle/oradata/orcl/temp2.dbf' size 10m reuse autoextend on  maxsize  200m;

SQL>alter database default temporary tablespace temp2;
   --将新的表空间设置为默认的暂时表空间

SQL>drop tablespace temp including contents and datafiles;
   --删除旧的表空间及其数据

SQL>ALTER TABLESPACE temp ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp2.dbf' SIZE 20M;
   --给暂时表空间加入文件

SYS>select * from database_properties
        where property_name='DEFAILT_TEMP_TABLESPACE';  --查看当前数据库默认数据库


----------------------------------------------------------------------------------------------------------------

-
三、重建索引、丢失了索引表空间后进行恢复

又一次创建索引

使用下面选项可缩短创建索引所花费的时间:

PARALLEL NOLOGGING

   PARALLEL(NOPARALLEL 是默认值):多个进程能够同一时候协同工作来创建索引。与单个server进程按顺序创建索引相比,通过

在多个server进程之间分配创建索引所需的工作,Oracle server能够更高速地创建索引。将随机对表取样并找到一组索引关键

字,这些索引keyword依照指定的并行度将索引平均分为同样数目的片段。

第一组查询进程将扫描表,提取keyword、行 ID 对并基

于keyword将每一个对发送到第二组查询进程中的一个进程中。第二组中的每一个进程都对keyword进行排序并按常规方式构建索引。所

有索引片段构建完毕后。并行协调程序会将这些片段(已进行排序)级联以形成终于的索引。

SQL> CREATE INDEX rname_idx 
  ON hr.regions (region_name)
   PARALLEL 4;

  
   NOLOGGING:使用此keyword会加快索引的创建速度,由于创建进程创建的重做日志 条目极少。

这样的工作量大幅减小的重做生

成也适用于直接路径插入和 Direct Loader (SQL*Loader) 插入。这是永久性属性,因此将显示在数据字典中。能够随时使用

ALTER INDEX NOLOGGING/LOGGING 命令来加以更新。
注:若数据库在nologging状态时,所操作的数据应该备份。再将nologging改回来,以免重大失误难以恢复
 
丢失了索引表空间后进行恢复:
   索引丢失时,更为高速、简单的方法是又一次创建而不是尝试恢复索引。


 
 索引是计算得到的对象,由于它们不提供不论什么原始数据,仅仅是已存在数据的还有一表示形式。

因此,在大多数情况下。能够非常

easy地又一次创建索引。
假设您的表空间仅包括索引,则能够简化在丢失了属于该表空间的数据文件后的恢复工作。
假设丢失了此类数据文件,则能够

运行下面步骤:

1.删除数据文件。

2.删除表空间。

3.又一次创建索引表空间。

4.又一次创建包括在表空间中的索引。
1.能够在不运行 RECOVER 任务的情况下恢复仅包括索引的表空间。

2.假设属于仅包括索引的表空间的数据文件丢失,则更为简单的方法可能是又一次创建表空间和又一次创建索引。

----------------------------------------------------------------------------------------------------------------

-
四、又一次创建口令验证文件


1.password文件丢失
cd  $ORACLE_HOME/dbs  --password文件的位置
ls -lrt|grep orapw
rm orapw...  --删除password文件

2.登陆
SQL> CONNECT sys/admin AS SYSDBA
  --登陆失败,未找到password文件

3.还有一种方式登录:
sqlplus / as sysdba
   --os级别登陆
grant sysdba to hr;
  --授权sysdba给hr。会报错;
SQL> grant sysdba to admin2;

grant sysdba to admin2

*

ERROR at line 1:

ORA-01994: GRANT failed: password file missing or disabled

4.创建password文件
[oracle@ocum ~]$ orapwd
Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>

  where
    file - name of password file (required),
    password - password for SYS will be prompted if not specified at command line,
    entries - maximum number of distinct DBA (optional),
    force - whether to overwrite existing file (optional),
    ignorecase - passwords are case-insensitive (optional),
    nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).
   
  There must be no spaces around the equal-to (=) character.

 --使用口令有用程序 orapwd 创建口令文件。
orapwd file=filename password=password entries=max_users
当中:
 --
filename 是口令文件的名称(必需)。
 --
password 是 SYS 的口令(可选)。假设未包括 password 參数。则会收到提示,要求您输入口令。
 --
Entries 是同意以 SYSDBA 或 SYSOPER 身份连接的不同用户的最大数量。假设超出了此数值,必须创建新口令文件。使用较

大的数值比較保险。
 --“等号”(=) 字符两边没有空格。


 
 --演示样例:$ orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle entries=5

5.验证password文件是否可用

SQL> CONNECT sys/admin AS SYSDBA


SQL> grant sysdba to admin2;


面向数据库管理员的验证方法  

依据是希望在数据库所在的那一台计算机上本地管理数据库,还是希望从一个远程客户机管理很多不同的数据库server,能够选

择使用操作系统验证或口令文件验证来验证数据库管理员:

假设数据库具有口令文件且您已经具有 SYSDBA 或 SYSOPER 系统权限,则能够通过口令文件进行验证。 

假设server未使用口令文件,或者您不具有 SYSDBA 或 SYSOPER 权限因而不在口令文件里,则能够使用操作系统验证。

在大多

数操作系统中,数据库管理员的验证须要将数据库管理员的操作系统username放置到一个特殊组中,一般称为 OSDBA。该组中的用

户将被授予 SYSDBA 权限。一个类似的组 OSOPER 用于向用户授予 SYSOPER 权限。

操作系统验证优先于口令文件验证。特别是。假设您是操作系统的 OSDBA 或 OSOPER 组的成员,而且以 SYSDBA 或 SYSOPER 身

份连接,则连接时您将具有相关的管理权限,而与您指定的username/口令无关。

Oracle DB 提供了一个口令有用程序 orapwd 来创建口令文件。使用 SYSDBA 权限连接时,是以 SYS 方案连接,而不是以与用

户名关联的方案连接。对于 SYSOPER。则将连接到 PUBLIC 方案。

使用口令文件訪问数据库的权限由授权用户发出的 GRANT 命

令提供。 
   通常,口令文件不包括在备份中。由于差点儿在全部情况下。均可方便地又一次创建口令文件。
保护口令文件以及标识口令文件

位置的环境变量对于系统安全性是至关重要的。对这些文件和环境变量具有訪问权限的不论什么用户都可能潜在地影响连接的安全性

。 
假设使用 REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE 或 SHARED 装载了数据库或实例。则不应删除或改动口令文件。

否则。将无

法使用该口令文件从远程又一次连接。
注:口令区分大写和小写。在又一次创建口令文件时必须考虑到这一点。


 

原文地址:https://www.cnblogs.com/yxwkf/p/5366859.html