备份与恢复(一)


查看当前实例信息(包括实例名,实例所在主机,实例状态 )
SQL> col host_name format a15
SQL> select instance_name,host_name,thread#,status from v$instance;

INSTANCE_NAME  HOST_NAME     THREAD# STATUS
---------------- --------------- ---------- ------------
demo   myhome     1 OPEN

查看当前数据信息(包括数据库名,日志操作模式,当前SCN)
SQL> select dbid,name,log_mode,current_scn from v$database;

      DBID NAME      LOG_MODE   CURRENT_SCN
---------- --------- ------------ -----------
3495298417 DEMO      ARCHIVELOG        481136

查看当前数据库表空间(包括名称,状态,内容)
SQL> select tablespace_name,status,contents from dba_tablespaces;

TABLESPACE_NAME         STATUS  CONTENTS
------------------------------ --------- ---------
SYSTEM          ONLINE  PERMANENT
UNDOTBS1         ONLINE  UNDO
SYSAUX          ONLINE  PERMANENT
TEMP          ONLINE  TEMPORARY
USERS          ONLINE  PERMANENT
EXAMPLE          ONLINE  PERMANENT

6 rows selected.

查看表空间数据文件
SQL> select file_name,bytes,autoextensible from dba_data_files
  2  where tablespace_name='USERS';

FILE_NAME    BYTES AUT
-------------------- ---------- ---
/u01/app/oracle/orad 5242880 YES
ata/demo/users01.dbf

查看数据文件起始SCN值和结束SCN值
SQL> col name format a30
SQL> select a.name,a.checkpoint_change# "起始SCN值",
  2  b.checkpoint_change# "结束SCN值"
  3  from v$datafile_header a,v$datafile b
  4  where a.file#=b.file#;

NAME    起始SCN值  结束SCN值
------------------------------ ---------- ----------
/u01/app/oracle/oradata/demo/s    480705     480705
ystem01.dbf

/u01/app/oracle/oradata/demo/u    480705     480705
ndotbs01.dbf

/u01/app/oracle/oradata/demo/s    480705     480705
ysaux01.dbf

/u01/app/oracle/oradata/demo/u    480705     480705
sers01.dbf

/u01/app/oracle/oradata/demo/e    480705     480705
xample01.dbf
在备份恢复过程中,v$datafile_header中SCN值恢复开始SCN,v$datafile为恢复结束SCN

查看重做日志组, 单实例环境中,只有一个重做线程
SQL> col status format a8
SQL> select group#,members,sequence#,status,bytes,first_change# from v$log where thread#=1;

    GROUP#    MEMBERS  SEQUENCE# STATUS        BYTES FIRST_CHANGE#
---------- ---------- ---------- -------- ---------- -------------
  1     1        2 CURRENT    52428800     472710
  2     1        0 UNUSED     52428800   0
  3     1        1 INACTIVE   52428800     446075

查看重做日志组成员
SQL> col member format a30
SQL> select member,status from v$logfile;

MEMBER          STATUS
------------------------------ --------
/u01/app/oracle/oradata/demo/redo03.log

/u01/app/oracle/oradata/demo/redo02.log

/u01/app/oracle/oradata/demo/redo01.log

增加重做日志组成员
SQL> alter database add logfile member
  2  '/u01/app/oracle/oradata/demo/REDOo1_2.log' to group 1,
  3  '/u01/app/oracle/oradata/demo/REDOo2_2.log' to group 2,
  4  '/u01/app/oracle/oradata/demo/REDOo3_2.log' to group 3;

Database altered.

查询控制文件所在位置
SQL> select name from v$controlfile;

NAME
------------------------------
/u01/app/oracle/oradata/demo/control01.ctl

/u01/app/oracle/oradata/demo/control02.ctl

/u01/app/oracle/oradata/demo/control03.ctl


日志切换
SQL> alter system switch logfile;


查看归档日志
SQL> col name format a42
SQL> select name,first_change#,next_change# from v$archived_log where thread#=1;
no rows selected

查询口令文件
SQL> select * from v$pwfile_users;

USERNAME         SYSDB SYSOP
------------------------------ ----- -----
SYS          TRUE  TRUE


查看后台进程
SQL> select name|| ' ' || description from v$bgprocess where paddr<>'00';

NAME||''||DESCRIPTION
----------------------------------------------------------------------
PMON process cleanup
PSP0 process spawner 0
MMAN Memory Manager
DBW0 db writer process 0
ARC0 Archival Process 0
ARC1 Archival Process 1
ARC2 Archival Process 2
LGWR Redo etc.
CKPT checkpoint
SMON System Monitor Process
RECO distributed recovery
CJQ0 Job Queue Coordinator
QMNC AQ Coordinator
MMON Manageability Monitor Process
MMNL Manageability Monitor Process 2

查看重做线程日志组信息
SQL> select thread#,status,groups,sequence# from v$thread;

   THREAD# STATUS GROUPS SEQUENCE#
---------- -------- ---------- ----------
  1 OPEN       3  8

查看当前SCN值
SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     482129

改变日志操作模式
1.检查当前日志操作模式
myhome-> sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Sun May 15 19:12:33 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect /as sysdba
Connected.
SQL> select log_mode from v$database;

LOG_MODE
------------
NOARCHIVELOG

2.关闭数据库,重启动数据库至MOUNT状态
SQL> shutdown immediate

SQL> startup mount

3.改变日志操作模式
SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

4.查看归档进程
myhome-> ps -ef|grep arc
oracle   15703     1  0 19:17 ?        00:00:00 ora_arc0_demo
oracle   15705     1  0 19:17 ?        00:00:00 ora_arc1_demo
oracle   15721     1  0 19:17 ?        00:00:00 ora_arc2_demo
oracle   20415 17653  0 19:18 pts/3    00:00:00 grep arc
归档模式下,会看到数据库归档进程

5.查看归档日志所在目录

SQL> show parameter db_recovery_file_dest

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest       string  /u01/app/oracle/flash_recovery_area
db_recovery_file_dest_size      big integer 2G


查看系统实例恢复活动信息
SQL> select actual_redo_blks,target_redo_blks,estimated_mttr from v$instance_recovery;

ACTUAL_REDO_BLKS TARGET_REDO_BLKS ESTIMATED_MTTR
---------------- ---------------- --------------
     1187    184320       12
ACTUAL_REDO_BLKS 用于标识当前情况下实例恢复实际需要应用的重做块个数
TARGET_REDO_BLKS 用于标识当前情况下实例恢复名最多需应用的重做块个数
ESTIMATED_MTTR 用于标识预计恢复时间

调整REDO时间,指定REDO Slave进程的个数
SQL> alter system set recovery_parallelism=3 scope=spfile;

System altered.

调整UNDO时间,指定UNDO Slave进程的个数
SQL> alter system set fast_start_parallel_rollback=high;

System altered.

查看恢复信息
SQL> select pid,undoblocksdone,undoblockstotal from v$fast_start_transactions;

使用log_archive_dest_n配置归档位置,该参数可配置本地归档位置和远程归档位置
SQL> alter system set log_archive_dest_1='location=/u01/demo_arch';

System altered.

SQL> alter system set log_archive_dest_2='location=/u01/demo_arch2';

System altered.

SQL> alter system set log_archive_dest_3='service=standby';

System altered.

location选项指定本地归档位置,service指定远程归档位置.

设置归档位置可用性

SQL> ALTER system set log_archive_dest_state_1=ENABLE;

显示归档信息
SQL> archive log list
Database log mode        Archive Mode
Automatic archival        Enabled
Archive destination        /u01/demo_arch2
Oldest online log sequence     14
Next log sequence to archive   16
Current log sequence        16

查看归档详细信息
SQL> col name format a40
SQL> select name,sequence#,first_change# from v$archived_log;

NAME       SEQUENCE# FIRST_CHANGE#
---------------------------------------- ---------- -------------
/u01/app/oracle/flash_recovery_area/DEMO   2    472710
/archivelog/2011_05_15/o1_mf_1_2_6wzhy87
o_.arc

/u01/app/oracle/flash_recovery_area/DEMO   3    481842
/archivelog/2011_05_15/o1_mf_1_3_6wzhyd6
g_.arc

/u01/app/oracle/flash_recovery_area/DEMO   4    481844
/archivelog/2011_05_15/o1_mf_1_4_6wzhyo4
8_.arc
name用于标识归档日志文件名
sequence#用于标识归档日志对应的日志序列
first_change#用于标识归档日志的起始SCN值


显示日志历史信息
假定当SCN值为2456932时进行了数据库备份,当SCN值为2476392时某个数据文件出现了损坏,如果数据处于归档模式下,oracle恢复过程如下:
复制数据文件备份之后,通过检查数据文件头部可以获取备份时间的SCN,即2456932,接下来获取当前重做日志的SCN信息,然后根据SCN差值确定完全恢复时需要用到哪能些归档日志和重做日志,最后重新执行归档日志和重做日志的事务变化,并将数据文件恢复到失败点。通过V$LOGHIST确定恢复所需要的归档日志:
SQL> select * from v$loghist;
   THREAD#  SEQUENCE# FIRST_CHANGE# FIRST_TIM SWITCH_CHANGE#
---------- ---------- ------------- --------- --------------
  1     1      446075 15-MAY-11       472710
  1     2      472710 15-MAY-11       481842
  1     3      481842 15-MAY-11       481844
  1     4      481844 15-MAY-11       481849
  1     5      481849 15-MAY-11       481851
  1     6      481851 15-MAY-11       481856
  1     7      481856 15-MAY-11       481858
  1     8      481858 15-MAY-11       503519
  1     9      503519 15-MAY-11       507131
  1    10      507131 15-MAY-11       507133
  1    11      507133 15-MAY-11       507136
  1    12      507136 15-MAY-11       507138
  1    13      507138 15-MAY-11       507140
  1    14      507140 15-MAY-11       507150
  1    15      507150 15-MAY-11       527640

15 rows selected.

SWICTH_CHANG#用于标识日志切换时的SCN值

显示归档进程信息
SQL> select * from v$archive_processes;

   PROCESS STATUS     LOG_SEQUENCE STAT
---------- ---------- ------------ ----
  0 ACTIVE   0 IDLE
  1 ACTIVE   0 IDLE
  2 STOPPED   0 IDLE
  3 STOPPED   0 IDLE
  4 STOPPED   0 IDLE
  5 STOPPED   0 IDLE
  6 STOPPED   0 IDLE
  7 STOPPED   0 IDLE
  8 STOPPED   0 IDLE
  9 STOPPED   0 IDLE
 10 STOPPED   0 IDLE
 11 STOPPED   0 IDLE
 12 STOPPED   0 IDLE
 13 STOPPED   0 IDLE
 14 STOPPED   0 IDLE
 15 STOPPED   0 IDLE
 16 STOPPED   0 IDLE
 17 STOPPED   0 IDLE
 18 STOPPED   0 IDLE
 19 STOPPED   0 IDLE
 20 STOPPED   0 IDLE
 21 STOPPED   0 IDLE
 22 STOPPED   0 IDLE
 23 STOPPED   0 IDLE
 24 STOPPED   0 IDLE
 25 STOPPED   0 IDLE
 26 STOPPED   0 IDLE
 27 STOPPED   0 IDLE
 28 STOPPED   0 IDLE
 29 STOPPED   0 IDLE

30 rows selected.

数据库一致性备份:是指正常关闭数据库之后的备份,所有数据文件和当前SCN值完全一致,所以关闭后的数据库备份称为数据库一致性备份或冷备份,操作步骤如下:
1.列出要备份的数据文件和控制文件

SQL> select name from v$datafile
  2  union
  3  select name from v$controlfile;

NAME
----------------------------------------
/u01/app/oracle/oradata/demo/control01.ctl

/u01/app/oracle/oradata/demo/control02.ctl

/u01/app/oracle/oradata/demo/control03.ctl

/u01/app/oracle/oradata/demo/example01.dbf

/u01/app/oracle/oradata/demo/sysaux01.dbf

/u01/app/oracle/oradata/demo/system01.dbf

/u01/app/oracle/oradata/demo/undotbs01.dbf

/u01/app/oracle/oradata/demo/users01.dbf

8 rows selected.


2.正常关闭数据库
SQL> shutdown immediate

3.复制所有数据文件和控制文件到备份目录
myhome-> cp /u01/app/oracle/oradata/demo/control01.ctl .
myhome-> cp /u01/app/oracle/oradata/demo/control02.ctl .
myhome-> cp /u01/app/oracle/oradata/demo/control03.ctl .
myhome-> cp /u01/app/oracle/oradata/demo/example01.dbf .
myhome-> cp /u01/app/oracle/oradata/demo/sysaux01.dbf .
myhome-> cp /u01/app/oracle/oradata/demo/system01.dbf .
myhome-> cp /u01/app/oracle/oradata/demo/undotbs01.dbf .
myhome-> cp /u01/app/oracle/oradata/demo/users01.dbf .

4.启动数据实例
SQL> startup
ORACLE instance started.

Total System Global Area  184549376 bytes
Fixed Size      1218412 bytes
Variable Size     62916756 bytes
Database Buffers   117440512 bytes
Redo Buffers      2973696 bytes
Database mounted.
Database opened.

数据库非一致性备份
数据库非一致性备份是指在OPEN状态下备份数据库所有数据文件和控制文件的方法,因为在OPEN状态下数据内容随时都会改变,从而导致不同数据文件的当前SCN值完全不同,数据一致性备份需要关闭数据会中断业务操作,而数据库非一致性备份只适用于归档模式。操作步骤如下:
1.列出要备份的数据文件
SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/demo/system01.dbf
/u01/app/oracle/oradata/demo/undotbs01.dbf
/u01/app/oracle/oradata/demo/sysaux01.dbf
/u01/app/oracle/oradata/demo/users01.dbf
/u01/app/oracle/oradata/demo/example01.dbf
2.将数据库设置为备份模式,当将数据库设置为备份模式之后,会在数据块发出全局检查点,并且会在所有数据文件头块上加锁,以确保在备份期间数据文件的头块内容不会改变
SQL> alter database begin backup;

Database altered.

3.备份所有数据文件和控制文件
SQL> host cp /u01/app/oracle/oradata/demo/system01.dbf /u01/demo_bak2

SQL> host cp /u01/app/oracle/oradata/demo/undotbs01.dbf /u01/demo_bak2

SQL> host cp /u01/app/oracle/oradata/demo/sysaux01.dbf /u01/demo_bak2

SQL> host cp /u01/app/oracle/oradata/demo/sysaux01.dbf /u01/demo_bak2

SQL> host cp /u01/app/oracle/oradata/demo/users01.dbf /u01/demo_bak2

SQL> host cp /u01/app/oracle/oradata/demo/example01.dbf /u01/demo_bak

SQL> alter database backup controlfile to '/u01/demo_bak2/demo.ctl'
  2  ;

Database altered.

4.结束数据库备份,为了确保数据文件备份的同步性,还应该归档当前日志组
SQL> alter database end backup;

Database altered.

SQL> alter system archive log current;

System altered.


备份表空间:是指在数据库处于OPEN状态时备份其数据文件的方法,表空间备份只适用于归档模式,即可以备份表空间的所有数据文件,也可以备份表空间的某个数据文件

脱机备份:是指当表空间处于OFFLINE状态时,备份表空间所有数据文件或单个数据文件,与联机备份相比,这种备份方法会生成较少的重做信息,但缺点是会影响表空间上的业务操作。操作步骤如下:
1.确定表空间所包含的数据文件.
SQL> select file_name from dba_data_files where tablespace_name='USERS';

FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/demo/users01.dbf

2.设置表空间为脱机状态
SQL> alter tablespace users offline;

Tablespace altered.

3.复制数据文件
SQL> host cp /u01/app/oracle/oradata/demo/users01.dbf /u01/demo_bak3

4.设置表空间为联机状态
SQL> alter tablespace users online;

Tablespace altered.


61========================================================================

联机备份:是指表空间处于ONLINE状态时,备份表空间所有数据文件或单个数据文件的过程,联机备份的优点是不影响在表空间上的业务操作,
缺点是会生成更多的重做信息和归档信息。
联机备份步骤:
1.确定表空间所包含的数据文件
SQL> select file_name from dba_data_files where tablespace_name='USERS';

FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/demo/users01.dbf

2.设置表空间为备份模式,在复制表空间的数据文件之前,必须将表空间设置为备份模式。在将表空间设置为备份模式之后,会在数据文件头块上加锁,使得数据文件头块不会发生改变,并且块会记载将来进行恢复的日志序列号、SCN等信息量
SQL> alter tablespace users begin backup;

Tablespace altered.

3.复制数据文件
SQL> host cp /u01/app/oracle/oradata/demo/users01.dbf /u01/demo_online_bak

4.设置表空间为正常模式
SQL> alter tablespace users end backup;

Tablespace altered.


处理联机备份失败
1.设置表空间为备份模式
SQL> alter tablespace users begin backup;

Tablespace altered.
2.关闭数据库
不带参数关闭数据库,提示数据文件处于备份模式下,无法停止数据
SQL> shutdown     
ORA-01149: cannot shutdown - file 4 has online backup set
ORA-01110: data file 4: '/u01/app/oracle/oradata/demo/users01.dbf'
使用shutdown abort命令关闭数据库

3.启动数据库,提示数据文件需要恢复
SQL> startup
ORACLE instance started.

Total System Global Area  184549376 bytes
Fixed Size      1218412 bytes
Variable Size     62916756 bytes
Database Buffers   117440512 bytes
Redo Buffers      2973696 bytes
Database mounted.
ORA-01113: file 4 needs media recovery
ORA-01110: data file 4: '/u01/app/oracle/oradata/demo/users01.dbf'

4.确定处于联机备份状态的所有数据文件
SQL> select file# from v$backup where status='ACTIVE';

     FILE#
----------
  4
5.结束联机备份状态
-如果存在多个数据文件处于联机备份状态,那么可使用alter database end backup命令结束联机备份状态;
-如果只有某个数据文件处于联机备份状态,那么可使用alter database datafile ... end backup命令结束联机备份状态
-使用recover命令也可以结束数据文件的联机备份状态
SQL> recover datafile 4;
Media recovery complete.
6.打开数据库,结束数据文件备份状态后,可以打开数据库
SQL> alter database open;

Database altered.


备份只读表空间:只读表空间是指只能用于读取数据而不能改变数据的表空间。当将表空间转变为只读之后,用户只能查询表空间内对象的数据,而不能在表空间的对象上执行DML操作和DDL操作。因为只读表空间的数据不会发生任何改变,所以真SCN值也不会发生任何改变.
1.确定处于READ ONLY状态的表空间。
SQL> select tablespace_name from dba_tablespaces where status='READ ONLY';

TABLESPACE_NAME
------------------------------
USERS

2.确定只读表空间包含的数据文件。通过查询数据字典视图DBA_DATA_FILES,可以确定只读表空间所包含的数据文件
SQL> select file_name from dba_data_files where tablespace_name='USERS';

FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/demo/users01.dbf

3.复制只读表空间的数据文件
SQL> host cp /u01/app/oracle/oradata/demo/users01.dbf /u01/demo_readonly_bak


建立控制文件副本
SQL> alter database backup controlfile to '/u01/demo_control_file/demo.ctl';

Database altered.

建立控制文件副本时,如果备份文件已经存在,可以使用reuser参数选项复制已存副本
SQL> alter database backup controlfile to '/u01/demo_control_file/demo.ctl' reuse;

Database altered.

备份控制文件到跟踪文件
SQL> alter database backup controlfile to trace;

Database altered.
-当执行上述命令之后,服务器进程会建立文本跟踪文件,并将建立控制文件的详细命令记载到该文件中。如果控制文件被误删除了,那么DBA可以执行文本跟踪文件中的相应命令重新建立控制文件.
-确定跟踪文件位置
SQL> show parameter user_dump_dest

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest        string  /u01/app/oracle/admin/demo/udu
       mp
-确定跟踪文件名称.跟踪文件名称的格式为<SID>_ora_<SPID>.trc,其中SID为实例ID,即环境变量ORACLE_SID的值;而SPID则是服务器进程所对应的操作系统进程号,确定服务器进程所对应的操作系统进程号.
SQL> select a.spid from v$process a,v$session b where a.addr=b.paddr and b.username='SYS';

SPID
------------
4962
-查看跟踪文件内容
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "DEMO" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 (
    '/u01/app/oracle/oradata/demo/redo01.log',
    '/u01/app/oracle/oradata/demo/REDOo1_2.log'
  ) SIZE 50M,
  GROUP 2 (
    '/u01/app/oracle/oradata/demo/redo02.log',
    '/u01/app/oracle/oradata/demo/REDOo2_2.log'
  ) SIZE 50M,
  GROUP 3 (
    '/u01/app/oracle/oradata/demo/redo03.log',
    '/u01/app/oracle/oradata/demo/REDOo3_2.log'
  ) SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oradata/demo/system01.dbf',
  '/u01/app/oracle/oradata/demo/undotbs01.dbf',
  '/u01/app/oracle/oradata/demo/sysaux01.dbf',
  '/u01/app/oracle/oradata/demo/example01.dbf'
CHARACTER SET ZHS16GBK
;
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/u01/demo_arch2/1_1_562360180.log';
-- ALTER DATABASE REGISTER LOGFILE '/u01/demo_arch2/1_1_751228084.log';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE
-- All logs need archiving and a log switch is needed.
ALTER SYSTEM ARCHIVE LOG ALL;
-- Database can now be opened normally.
ALTER DATABASE OPEN;
-- Files in read-only tablespaces are now named.
ALTER DATABASE RENAME FILE 'MISSING00004'
  TO '/u01/app/oracle/oradata/demo/users01.dbf';
-- Online the files in read-only tablespaces.
ALTER TABLESPACE "USERS" ONLINE;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/demo/temp01.dbf'
     SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
-- End of tempfile additions.
--
--     Set #2. RESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- The contents of online logs will be lost and all backups will
-- be invalidated. Use this only if online logs are damaged.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
--  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "DEMO" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 (
    '/u01/app/oracle/oradata/demo/redo01.log',
    '/u01/app/oracle/oradata/demo/REDOo1_2.log'
  ) SIZE 50M,
  GROUP 2 (
    '/u01/app/oracle/oradata/demo/redo02.log',
    '/u01/app/oracle/oradata/demo/REDOo2_2.log'
  ) SIZE 50M,
  GROUP 3 (
    '/u01/app/oracle/oradata/demo/redo03.log',
    '/u01/app/oracle/oradata/demo/REDOo3_2.log'
  ) SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oradata/demo/system01.dbf',
  '/u01/app/oracle/oradata/demo/undotbs01.dbf',
  '/u01/app/oracle/oradata/demo/sysaux01.dbf',
  '/u01/app/oracle/oradata/demo/example01.dbf'
CHARACTER SET ZHS16GBK
;
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/u01/demo_arch2/1_1_562360180.log';
-- ALTER DATABASE REGISTER LOGFILE '/u01/demo_arch2/1_1_751228084.log';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE USING BACKUP CONTROLFILE
-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;
-- Files in read-only tablespaces are now named.
ALTER DATABASE RENAME FILE 'MISSING00004'
  TO '/u01/app/oracle/oradata/demo/users01.dbf';
-- Online the files in read-only tablespaces.
ALTER TABLESPACE "USERS" ONLINE;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/demo/temp01.dbf'
     SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
-- End of tempfile additions.

当将跟踪文件的说明信息,注释信息等无关信息去掉后,剩余部分就是用于重新建立控制文件的全部内容。


备份归档日志:在归档模式下,物理恢复要用到归档日志。如果在恢复数据库时发现归档日志损坏或者丢失了,那么导致丢失部分数据库数据。当备份归档日志时,首先要确定要备份的归档日志,然后使用OS命令直接复制归档日志文件到备份目录。
SQL> select name from v$archived_log where dest_id=1 and first_time>=sysdate-1;

NAME
--------------------------------------------------------------------------------
/u01/demo_arch/18_1_751228084.log

使用OS命令备份归档日志
SQL> host cp /u01/demo_arch/18_1_751228084.log /u01/demo_archive_bak


备份参数文件
SQL> create pfile='/u01/demo_pfile_bak/demo.par' from spfile='/u01/app/oracle/product/10.2.0/db_1/dbs/spfiledemo.ora';

File created.

备份口令文件
SQL> host cp /u01/app/oracle/product/10.2.0/db_1/dbs/orapwdemo /u01/demo_pwd_bak


用户管理的完全恢复:指当数据文件出现介质失败时,使用OS命令复制数据文件备份,并使用SQL恢复命令应用归档日志和重做日志,最终将数据文件恢复到失败点的状态。因为用户管理的完全恢复需要借助OS命令转储备份文件,所以也被称为OS完全恢复。

68==============================================================

诊断数据文件介质失败
-在关闭状态下诊断数据文件介质失败:当数据库处于关闭状态时,如果数据文件被误删或者数据文件所在的磁盘损坏,那么在打开数据库时后台进程DBWR会将错误信息写入到其跟踪文件中,并且在屏幕上显示如下错误:(为了模拟这种情场,将users01.dbf数据文件复制到其它地方)
1.关闭数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
2.将user01.dbf文件复制到其它目录
myhome-> mv users01.dbf /u01/users_close_failed_bak/

3.启动数据库出错
SQL> startup
ORACLE instance started.

Total System Global Area  184549376 bytes
Fixed Size      1218412 bytes
Variable Size     62916756 bytes
Database Buffers   117440512 bytes
Redo Buffers      2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/u01/app/oracle/oradata/demo/users01.dbf'

4.将数据文件拷贝回原来的目录后,数据正常启动

-在OPEN状态下诊断数据文件丢失或损坏
1.在测试表空间上创建一张表,并插入数据
SQL> create table emp(id int,name varchar(20)) tablespace example;

Table created.

SQL> insert into emp values(1,'sss');

1 row created.

SQL> insert into emp values(2,'ddd');

1 row created.

SQL> commit;

Commit complete.

2.将表空间离线

SQL> alter tablespace example offline
  2  ;

Tablespace altered.

3.查询离线表空间上表的数据后出错
SQL> select * from emp;
select * from emp
              *
ERROR at line 1:
ORA-00376: file 5 cannot be read at this time
ORA-01110: data file 5: '/u01/app/oracle/oradata/demo/example01.dbf'

-在OPEN状态下诊断数据块损坏(略)


转储数据文件到其他磁盘
-在Mount状态下改变数据文件位置,使用alter database rename file命令可以改变数据文件位置
1.将system01.dbf移到其它位置后,启动数据库会出错
SQL> startup
ORACLE instance started.

Total System Global Area  184549376 bytes
Fixed Size      1218412 bytes
Variable Size     62916756 bytes
Database Buffers   117440512 bytes
Redo Buffers      2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u01/app/oracle/oradata/demo/system01.dbf'

2.使用alter database rename file 命令指定system01.dbf新的位置
SQL> alter database rename file '/u01/app/oracle/oradata/demo/system01.dbf' to '/u01/system01.dbf';

Database altered.

3.打开数据库
SQL> alter database open;

Database altered.

-在OPEN状态下改变数据文件位置
1.当数据库处于OPEN状态下,不能改变SYSTEM表空间的数据文件位置
2.可以使用alter tablespace rename datafile命令改变数据文件位置,也可以使用alter database rename file命令改变数据文件位置
3.在修改数据文件位置之前,必须首先使表空间或数据文件脱机
SQL> alter database datafile '/u01/app/oracle/oradata/demo/users01.dbf' offline;

Database altered.

SQL> alter tablespace users rename datafile '/u01/app/oracle/oradata/demo/users01.dbf' to '/u01/users01.dbf';

Tablespace altered.

SQL> alter database datafile '/u01/users01.dbf' online;

Database altered.


完全恢复命令
-RECOVER DATABASE,该命令只能在MOUNT状态下运行,用于恢复数据库的多个数据文件。
-RECOVER TABLESPACE,该命令用于恢复一个或多个表空间的所有数据文件,只能在OPEN状态下运行
-RECOVER DATAFILE,该命令用于恢复一个或多个数据文件,该命令不仅可以在MOUNT状态下运行,还可以在OPEN状态下运行。

应用归档日志
-使用ORACLE建议的归档日志位置
1.将example01.dbf复制到其它目录
2.在example表空间创建一张表,并插入几条数据
3.使用example01.dbf备份文件覆盖当前数据文件
4.数据启动时出错
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: '/u01/app/oracle/oradata/demo/example01.dbf'
5.使用recover datafile命令恢复数据
SQL> recover datafile 5
Media recovery complete.

-查看恢复文件
1.列出需要恢复的数据文件
SQL> col error format a20
SQL> select file#,error,change# from v$recover_file;

     FILE# ERROR     CHANGE#
---------- -------------------- ----------
  5       630674

file#用于标识数据文件编号,error用于标识错误原因,change#用于标识数据文件备份的SCN值.
2.列出日志历史信息
SQL> select sequence# from v$loghist where 630674 between first_change# and switch_change#;

通过使用该动态性能视图,可以确定恢复要从哪能个日志序列号开始应用事务变化

3.列出恢复要使用的归档日志
SQL> col archive_name format a30
SQL> select sequence#,archive_name from v$recovery_log;

72==================================================================================================

 

 

在OPEN状态下恢复打开时意外丢失的数据文件
-当数据库处于OPEN状态时,如果system表空间的数据文件出现介质失败,那么Oracle会立即终止例程,此时需要在MOUNT状态下恢复其数据文件。
-如果在OPEN状态下其他数据文件出现介质失败,那么只有介质失败所涉及到的数据文件不能访问,而不会影响其他数据文件。

1.在表空间example中创建表emp,并插入数据
2.查询emp中记录条数
SQL> select count(*) from emp;

  COUNT(*)
----------
 16
3.删除/u01/app/oracle/oradata/demo/example01.dbf
myhome-> rm -rf example01.dbf

4.手工触发检查点
SQL> alter system checkpoint;

System altered.
5.再次查询emp数据,提示错误
SQL> select count(*) from emp;
select count(*) from emp
*
ERROR at line 1:
ORA-00376: file 5 cannot be read at this time
ORA-01110: data file 5: '/u01/app/oracle/oradata/demo/example01.dbf'

6.确定需要恢复的数据文件
SQL> select file#,error from v$recover_file;

     FILE# ERROR
---------- --------------------
  5 FILE NOT FOUND
7.使数据文件脱机
SQL> alter database datafile 5 offline;

Database altered.

8.复制数据文件备份
myhome-> cp example01.dbf.21.29.bak example01.dbf

9.恢复表空间或数据文件
SQL> recover datafile 5;
Media recovery complete.
10.使用表空间或数据文件联机
SQL> alter database datafile 5 online;

Database altered.


在OPEN状态下恢复未备份数据文件

1.增加test01表空间
SQL> create tablespace test01 datafile '/u01/test01.dbf' size 1M;

Tablespace created.

2.在test01表空间中创建表
SQL> create table test(id int,name varchar(30)) tablespace test01;

Table created.

3.在数据库关闭状态下,删除/u01/test01.dbf
SQL> shutdown;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> !
myhome-> cd /u01/
myhome-> rm -rf test01.dbf

4.启动数据库出错
SQL> startup
ORACLE instance started.

Total System Global Area  184549376 bytes
Fixed Size      1218412 bytes
Variable Size     67111060 bytes
Database Buffers   113246208 bytes
Redo Buffers      2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/test01.dbf'

5.装载数据库。当在关闭状态下数据文件出现介质失败时,数据库将不能打开,此时应该首先装载数据库
SQL> startup force mount;
ORACLE instance started.

Total System Global Area  184549376 bytes
Fixed Size      1218412 bytes
Variable Size     67111060 bytes
Database Buffers   113246208 bytes
Redo Buffers      2973696 bytes
Database mounted.

6.确定需要恢复的数据文件
SQL> select file#,error from v$recover_file;

     FILE# ERROR
---------- --------------------
  6 FILE NOT FOUND

7.使用数据文件脱机
SQL> alter database datafile 6 offline;

Database altered.

8.故障介质脱机后,打开数据库
SQL> alter database open;

Database altered.

9.重新建立数据文件
SQL> alter database create datafile '/u01/test01.dbf';

Database altered.

10.恢复数据文件
SQL> recover datafile 6
Media recovery complete.

11.使数据文件test01.dbf联机
SQL> alter database datafile 6 online;

Database altered.
12.操作完成
SQL> select count(*) from test;

  COUNT(*)
----------
  0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值