介绍一下回滚段,它分为三种系统、非系统、延迟回滚段
回滚段的管理方式有二:AUTO 和MANUL
自动管理的条件有二:UNDO_MANAGEMENT=AUTO和UNDO_TABLESPACE=?
延迟回滚段:当包含有未提交事务的表空间OFFLINE、数据文件OFFLINE时,会在系统表空间建立一个延迟回滚段。这个由系统自己维护
系统回滚段在系统表空间,用于记录系统数据字典的UNDO,如DDL、对象新增等。如果没得UNDO和ROLLBACK表空间,普通的UNDO将存放在系统回滚段
[3.13.2]控制文件丢失,UNDO文件丢失,(实例/介质恢复起点大于丢失文件的起始SCN),丢失的UNDO文件没有活动事务
这个是恢复不成功的,会出现MISSING数据文件。但是因为没有活动事务,所以可以打开
[oracle@RHEL5 backup_dir]$ vi /u01/backup_dir/hot_backup.sql
set heading off
set feedback on
set linesize 121
set termout on
set serveroutput on
begin
for x in ( select tablespace_name from dba_tablespaces where contents <> 'TEMPORARY' )
loop
dbms_output.put_line( 'alter tablespace ' || x.tablespace_name || ' begin backup');
execute immediate 'alter tablespace ' || x.tablespace_name || ' begin backup';
end loop;
end;
/
set heading off
set feedback off
set linesize 121
set termout off
--生成备份的sql
spool /u01/backup_dir/01.log
select '--'||ts.name tsname,'host cp '||df.name||' /u01/backup_dir/' ||substr(df.name,instr(df.name,'/',-1) + 1) from v$datafile df,v$tablespace ts where ts.ts# not in (select distinct ts# from v$tempfile) and df.ts# = ts.ts# order by 1;
select 'host cp '||name||' /u01/backup_dir/' from v$controlfile;
spool off
--生成恢复的sql
spool /u01/02.log
select '--'||ts.name tsname,'host cp /u01/backup_script/'||substr(df.name,instr(df.name,'/',-1) + 1)||' '||df.name from v$datafile df,v$tablespace ts where ts.ts# not in (select distinct ts# from v$tempfile) and df.ts# = ts.ts# order by 1;
select 'host cp /u01/backup_dir/'||substr(name,instr(name,'/',-1) + 1)||' '||name from v$controlfile;
spool off
--执行自动热备份
@/u01/backup_dir/01.log
set termout on
begin
for x in ( select tablespace_name from dba_tablespaces where contents <> 'TEMPORARY' )
loop
dbms_output.put_line( 'alter tablespace ' || x.tablespace_name || ' end backup');
execute immediate 'alter tablespace ' || x.tablespace_name || ' end backup';
end loop;
end;
/
先做一个热备份和一个控制文件的备份撒
[oracle@RHEL5 backup_dir]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jun 1 21:22:38 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> @/u01/backup_dir/hot_backup.sql
alter tablespace SYSTEM begin backup
alter tablespace UNDOTBS1 begin backup
alter tablespace SYSAUX begin backup
alter tablespace USERS begin backup
alter tablespace UNDOTBS2 begin backup
alter tablespace TBS01 begin backup
alter tablespace TEST2 begin backup
alter tablespace TBS1 begin backup
PL/SQL procedure successfully completed.
alter tablespace SYSTEM end backup
alter tablespace UNDOTBS1 end backup
alter tablespace SYSAUX end backup
alter tablespace USERS end backup
alter tablespace UNDOTBS2 end backup
alter tablespace TBS01 end backup
alter tablespace TEST2 end backup
alter tablespace TBS1 end backup
SQL> alter tablespace undotbs1 add datafile '/u01/app/oracle/oradata/shujukuai/undotbs01_1.dbf' size 10m;
SQL> set feedback on
SQL> alter database backup controlfile to trace as '/u01/backup_dir/ctl.sql';
Database altered.
SQL> alter tablespace undotbs1 add datafile '/u01/app/oracle/oradata/shujukuai/undotbs01_2.dbf' size 10m;
Tablespace altered.
SQL> SELECT GROUP#,BYTES,ARCHIVED,FIRST_CHANGE#,SEQUENCE#,STATUS FROM V$LOG;
1 52428800 YES 712950 1 INACTIVE
2 52428800 NO 737220 2 CURRENT
3 52428800 YES 0 0 UNUSED
3 rows selected.
SQL> set head on
SQL> select file#,status$,CRSCNBAS from file$;
FILE# STATUS$ CRSCNBAS
---------- ---------- ----------
1 2 5
2 2 600647
3 2 6678
4 2 10685
5 2 631813
6 2 673840
8 2 715465
7 2 712861
9 2 740690
10 2 740809 这个数据文件的生日哈
10 rows selected.
SQL> set linesize 180
SQL> select substr(name,1,40) dname, recover, fuzzy, checkpoint_change#,CHECKPOINT_COUNT from v$datafile_header;
DNAME REC FUZ CHECKPOINT_CHANGE# CHECKPOINT_COUNT
-------------------------------------------------------------------------------- --- --- ------------------ ----------------
/u01/app/oracle/oradata/shujukuai/system NO YES 740452 118
/u01/app/oracle/oradata/shujukuai/undotb NO YES 740458 78
/u01/app/oracle/oradata/shujukuai/sysaux NO YES 740464 118
/u01/app/oracle/oradata/shujukuai/users0 NO YES 740470 117
/u01/app/oracle/oradata/shujukuai/tbs01. NO YES 740482 61
/u01/app/oracle/oradata/shujukuai/test2. NO YES 740488 40
/u01/app/oracle/oradata/shujukuai/tbs1.d NO YES 740494 9
/u01/app/oracle/oradata/shujukuai/undotb NO YES 740476 7
/u01/app/oracle/oradata/shujukuai/undotb NO YES 740691 2
/u01/app/oracle/oradata/shujukuai/undotb NO YES 740812 2
10 rows selected.
SQL> create table undotbs as select * from dict where 1=2;
Table created.
SQL> insert into undotbs select * from dict;
1875 rows created.
SQL> commit;
Commit complete.
SQL> delete from undotbs;
1875 rows deleted.
SQL> insert into undotbs select * from dict where rownum < 1000;
999 rows created.
SQL> commit;
Commit complete.
SQL> alter system switch logfile;
System altered.
SQL> select count(*)from undotbs;
COUNT(*)
----------
999
1 row selected.
SQL> insert into undotbs select * from dict where rownum = 1;
1 row created.
我们再打开一个新的SESSION
[oracle@RHEL5 ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jun 1 21:37:58 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> set sqlp 'SQL B> '
SQL B> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL B> host mv /u01/app/oracle/oradata/shujukuai/undotbs01_2.dbf /u01/app/oracle/oradata/shujukuai/undotbs01_2.bak
SQL B> host rm -rf /u01/app/oracle/oradata/shujukuai/control01.ctl
SQL B> host rm -rf /u01/app/oracle/oradata/shujukuai/control02.ctl
SQL B> host rm -rf /u01/app/oracle/oradata/shujukuai/control03.ctl
SQL B> host vi /u01/backup_dir/ctl.sql
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "SHUJUKUA" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/shujukuai/redo01.log' SIZE 50M,
GROUP 2 '/u01/app/oracle/oradata/shujukuai/redo02.log' SIZE 50M,
GROUP 3 '/u01/app/oracle/oradata/shujukuai/redo03.log' SIZE 50M
DATAFILE
'/u01/app/oracle/oradata/shujukuai/system01.dbf',
'/u01/app/oracle/oradata/shujukuai/undotbs01.dbf',
'/u01/app/oracle/oradata/shujukuai/sysaux01.dbf',
'/u01/app/oracle/oradata/shujukuai/users01.dbf',
'/u01/app/oracle/oradata/shujukuai/tbs01.dbf',
'/u01/app/oracle/oradata/shujukuai/test2.dbf',
'/u01/app/oracle/oradata/shujukuai/tbs1.dbf',
'/u01/app/oracle/oradata/shujukuai/undotbs02.dbf',
'/u01/app/oracle/oradata/shujukuai/undotbs01_1.dbf'
CHARACTER SET ZHS16GBK
;
用TRACE备份的控制文件来创建控制文件
SQL B> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL B> @/u01/backup_dir/ctl.sql
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 2083368 bytes
Variable Size 125830616 bytes
Database Buffers 150994944 bytes
Redo Buffers 6303744 bytes
Control file created.
SQL B> recover database;
SQL B> alter database open; 这里因为丢失的UNDO文件没有活动事务,所以能够OPEN。回想一下,刚刚是SHUTDOWN IMMEDIATE的撒
Database altered.
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
748827
SQL B> select substr(name, 1, 40) dname, CHECKPOINT_CHANGE#,LAST_CHANGE# ,OFFLINE_CHANGE#,CREATION_CHANGE#,status from v$datafile;
DNAME CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# CREATION_CHANGE# STATUS
-------------------------------------------------- ------------------ ------------ --------------- ---------------- -------
/u01/app/oracle/oradata/shujukuai/system 741438 0 5 SYSTEM
/u01/app/oracle/oradata/shujukuai/undotb 741438 0 600647 ONLINE
/u01/app/oracle/oradata/shujukuai/sysaux 741438 0 6678 ONLINE
/u01/app/oracle/oradata/shujukuai/users0 741438 0 10685 ONLINE
/u01/app/oracle/oradata/shujukuai/tbs01. 741438 0 631813 ONLINE
/u01/app/oracle/oradata/shujukuai/test2. 741438 0 673840 ONLINE
/u01/app/oracle/oradata/shujukuai/tbs1.d 741438 0 712861 ONLINE
/u01/app/oracle/oradata/shujukuai/undotb 741438 0 715465 ONLINE
/u01/app/oracle/oradata/shujukuai/undotb 741438 0 740690 ONLINE
/u01/app/oracle/product/10.2.0/db_1/dbs/MISSING00010 0 741463 0 740809 RECOVER 注意看这里哈,这个文件MISSING了,我们来创建一下这个文件试试看
10 rows selected.
SQL B> alter database create datafile '/u01/app/oracle/product/10.2.0/db_1/dbs/MISSING00010' as '/u01/app/oracle/oradata/shujukuai/undotbs01_2.dbf';
alter database create datafile '/u01/app/oracle/product/10.2.0/db_1/dbs/MISSING00010' as '/u01/app/oracle/oradata/shujukuai/undotbs01_2.dbf'
*
ERROR at line 1:
ORA-01178: file 10 created before last CREATE CONTROLFILE, cannot recreate
ORA-01111: name for data file 10 is unknown - rename to correct file
ORA-01110: data file 10: '/u01/app/oracle/product/10.2.0/db_1/dbs/MISSING00010' 哈哈,这个当然是不行的,控制文件SCN 748827 也就是恢复的起点SCN大于丢失文件的SCN 740809
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21158541/viewspace-666912/ ,如需转载,请注明出处,否则将追究法律责任。