实验1 :关于FLASHBACK DATABASE  …

来源:互联网 发布:xpaper电子报软件 编辑:程序博客网 时间:2024/05/16 14:06
#######drop tablespace 前查看数据文件的信息
SQL> select file_name, bytes fromdba_data_files;
行将被截断


FILE_NAME
--------------------------------------------------------------------------------

E:\ORACLE11G\APP\HP\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE11G\APP\HP\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE11G\APP\HP\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE11G\APP\HP\ORADATA\ORCL\USERS01.DBF
E:\ORACLE11G\APP\HP\ORADATA\TEST21.DBF
E:\ORACLE11G\APP\HP\NEW_TS.ORA
E:\ORACLE11G\APP\HP\ORADATA\RCATTS.DBF

已选择7行。


查询表空间RCATTS的信息
SQL>  SELECT T.TABLESPACE_NAME,ROUND(SUM(BYTES/(1024 * 1024)), 0) TS_SIZE
  FROM DBA_TABLESPACES T,DBA_DATA_FILES D
  WHERE T.TABLESPACE_NAME =D.TABLESPACE_NAME
  GROUP BYT.TABLESPACE_NAME;

TABLESPACE_NAME                  TS_SIZE
------------------------------ ----------
SYSAUX                               600
UNDOTBS1                             770
USERS                                  5
SYSTEM                               700
TEST21                                 2
new_ts
##RCATTS##                               ## 50##

已选择7行。

查询RACTTS的数据文件的信息
SQL>
SQL>  SELECTTABLESPACE_NAME,FILE_ID,FILE_NAME,ROUND(BYTES / (1024 * 1024), 0)T
OTAL_SPACE
  FROM DBA_DATA_FILES
  ORDER BYTABLESPACE_NAME;
行将被截断


TABLESPACE_NAME                  FILE_ID FILE_NAME
------------------------------ ------------------------------------------------

RCATTS                                 7 E:\ORACLE11G\APP\HP\ORADATA\RCATTS.DBF

SYSAUX                                 2 E:\ORACLE11G\APP\HP\ORADATA\ORCL\SYSAU

SYSTEM                                 1 E:\ORACLE11G\APP\HP\ORADATA\ORCL\SYSTE

TEST21                                 5 E:\ORACLE11G\APP\HP\ORADATA\TEST21.DBF

UNDOTBS1                               3 E:\ORACLE11G\APP\HP\ORADATA\ORCL\UNDOT

USERS                                  4 E:\ORACLE11G\APP\HP\ORADATA\ORCL\USERS

new_ts                                 6 E:\ORACLE11G\APP\HP\NEW_TS.ORA

已选择7行。

##查询当前 scn 号
SQL> select current_scn from v$database;

CURRENT_SCN
-----------
   3362700

SQL>

##执行drop tablespace操作

SQL> DROP TABLESPACE RCATTS;

表空间已删除。

SQL>
SQL>
SQL>   SELECTT.TABLESPACE_NAME, ROUND(SUM(BYTES/(1024 * 1024)), 0) TS_SIZE
   FROMDBA_TABLESPACES T, DBA_DATA_FILES D
   WHERET.TABLESPACE_NAME = D.TABLESPACE_NAME
   GROUP BYT.TABLESPACE_NAME;

TABLESPACE_NAME                  TS_SIZE
------------------------------ ----------
SYSAUX                               600
UNDOTBS1                             770
USERS                                  5
SYSTEM                               700
TEST21                                 2
new_ts

已选择6行。

###执行闪回操作
SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP MOUNT
ORACLE 例程已经启动。

Total System Global Area  535662592 bytes
FixedSize                 1375792 bytes
VariableSize            398459344 bytes
DatabaseBuffers         130023424 bytes
RedoBuffers               5804032 bytes
数据库装载完毕。


SQL> flashback database to scn 3362700;

闪回完成。

SQL>


SQL> alter database open resetlogs;

数据库已更改。

##再次查询表空间RACTTS 的信息
SQL>
SQL>   SELECTT.TABLESPACE_NAME, ROUND(SUM(BYTES/(1024 * 1024)), 0) TS_SIZE
   FROMDBA_TABLESPACES T, DBA_DATA_FILES D
   WHERET.TABLESPACE_NAME = D.TABLESPACE_NAME
   GROUP BYT.TABLESPACE_NAME;

TABLESPACE_NAME                  TS_SIZE
------------------------------ ----------
SYSAUX                               600
UNDOTBS1                             770
USERS                                  5
SYSTEM                               700
TEST21                                 2
new_ts
###RCATTS###

已选择7行。

SQL>
SQL> SELECTTABLESPACE_NAME,FILE_ID,FILE_NAME,ROUND(BYTES / (1024 * 1024),0)
AL_SPACE
  FROM DBA_DATA_FILES ORDER BYTABLESPACE_NAME;
行将被截断


TABLESPACE_NAME                  FILE_ID FILE_NAME
------------------------------ ---------------------------------------------

RCATTS                                 7 E:\ORACLE11G\APP\HP\PRODUCT\11.2.0\

SYSAUX                                 2 E:\ORACLE11G\APP\HP\ORADATA\ORCL\SY

SYSTEM                                 1 E:\ORACLE11G\APP\HP\ORADATA\ORCL\SY

TEST21                                 5 E:\ORACLE11G\APP\HP\ORADATA\TEST21.

UNDOTBS1                               3 E:\ORACLE11G\APP\HP\ORADATA\ORCL\UN

USERS                                  4 E:\ORACLE11G\APP\HP\ORADATA\ORCL\US

new_ts                                 6 E:\ORACLE11G\APP\HP\NEW_TS.ORA

已选择7行。

SQL> CREATE TABLE TRIAL (ID NUMBER)
  TABLESPACE RCATTS;
CREATE TABLE TRIAL (ID NUMBER)
*
第 1 行出现错误:
ORA-01658: 无法为表空间 RCATTS 中的段创建 INITIAL 区




###检查控制文件
sql>ALTER DATABASE BACKUP CONTROLFILE TOTRACE;
SQL>SHOW PARAMETER user_dump_dest;




发现如下:
.........
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL"RESETLOGS  ARCHIVELOG
    MAXLOGFILES16
   MAXLOGMEMBERS 3
    MAXDATAFILES100
    MAXINSTANCES8
   MAXLOGHISTORY 292
LOGFILE
  GROUP 1'E:\ORACLE11G\APP\HP\ORADATA\ORCL\REDO01.LOG' SIZE 50M BLOCKSIZE 512,
  GROUP 2'E:\ORACLE11G\APP\HP\ORADATA\ORCL\REDO02.LOG' SIZE 50M BLOCKSIZE 512,
  GROUP 3'E:\ORACLE11G\APP\HP\ORADATA\ORCL\REDO03.LOG' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
 'E:\ORACLE11G\APP\HP\ORADATA\ORCL\SYSTEM01.DBF',
 'E:\ORACLE11G\APP\HP\ORADATA\ORCL\SYSAUX01.DBF',
 'E:\ORACLE11G\APP\HP\ORADATA\ORCL\UNDOTBS01.DBF',
 'E:\ORACLE11G\APP\HP\ORADATA\ORCL\USERS01.DBF',
  'E:\ORACLE11G\APP\HP\ORADATA\TEST21.DBF',
  'E:\ORACLE11G\APP\HP\NEW_TS.ORA',
  'E:\ORACLE11G\APP\HP\PRODUCT\11.2.0\DBHOME_1\DATABASE\UNNAMED00007'
CHARACTER SET ZHS16GBK
;
-- Configure RMAN configuration record 1
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILEAUTOBACKUP','ON');
-- 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'E:\ORACLE11G\APP\HP\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2012_02_15\O1_MF_1_1_%U_.ARC';
-- ALTER DATABASE REGISTER LOGFILE'E:\ORACLE11G\APP\HP\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2012_02_15\O1_MF_1_1_%U_.ARC';
-- Recovery is required if any of the datafiles are restoredbackups,
-- 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;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE'E:\ORACLE11G\APP\HP\ORADATA\ORCL\TEMP01.DBF'
    SIZE 209715200  REUSE AUTOEXTEND ON NEXT655360  MAXSIZE 32767M;
-- End of tempfile additions.
--



可以看到有这么一个文件'E:\ORACLE11G\APP\HP\PRODUCT\11.2.0\DBHOME_1\DATABASE\UNNAMED00007'
但发现此文件不是之前文件的大小《E:\ORACLE11G\APP\HP\ORADATA\RCATTS.DBF》,并且发现在ractts的物理原文件处RCATTS.DBF 依然存在,



SQL>  SELECT
      a.tablespace_name,
      a.file_name,
      a.bytes allocated_bytes,
      b.free_bytes
    FROM
      dba_data_files a,
      (SELECT file_id, SUM(bytes) free_bytes
       FROM dba_free_space b GROUP BY file_id) b
 10   WHERE
 11      a.file_id=b.file_id
 12   ORDER BY
 13      a.tablespace_name;


TABLESPACE_NAME               FILE_NAME
-------------------------------------------------------------------------------

SYSAUX                        E:\ORACLE11G\APP\HP\ORADATA\ORCL\SYSAUX01.DBF
SYSTEM                        E:\ORACLE11G\APP\HP\ORADATA\ORCL\SYSTEM01.DBF
TEST21                        E:\ORACLE11G\APP\HP\ORADATA\TEST21.DBF
UNDOTBS1                      E:\ORACLE11G\APP\HP\ORADATA\ORCL\UNDOTBS01.DBF
USERS                         E:\ORACLE11G\APP\HP\ORADATA\ORCL\USERS01.DBF


SQL> SELECT FILE#,ONLINE_STATUS,ERROR FROMV$RECOVER_FILE;

    FILE# ONLINE_ ERROR
---------- ------- --------------------
       OFFLINE FILE NOT FOUND



SQL> SELECT NAME FROM V$DATAFILE WHEREFILE#=7;



NAME
-----------------------------------------------------------------

E:\ORACLE\11_2_0\DATABASE\UNNAMED0007


验证是否为之前的数据文件#7
SQL> HOST DIRE:\ORACLE\11_2_0\DATABASE\UNNAMED0007
 驱动器 E 中的卷没有标签。
 卷的序列号是 38D0-2A35

 E:\ORACLE\11_2_0\DATABASE 的目录

找不到文件

SQL> ALTER DATABASE CREATE DATAFILE 7 AS'E:\ORACLE11G\APP\HP\ORADATA\RCATTS.DBF'; 

    ##数据文件#7的操作系统中的文件位置##

数据库已更改。

SQL> HOST DIRE:\ORACLE\11_2_0\DATABASE\UNNAMED0007
 驱动器 E 中的卷没有标签。
 卷的序列号是 38D0-2A35

 E:\ORACLE\11_2_0\DATABASE 的目录





SQL> recover datafile 7;
ORA-00279: 更改 2737656 (在 08/03/2011 10:56:12 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:\ORACLE11G\APP\HP\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_08_03\O1_MF_1_138_7

3KVLDH0_.ARC
ORA-00280: 更改 2737656 (用于线程 1) 在序列 #138 中


指定日志: {<RET>=suggested | filename |AUTO | CANCEL}
auto
....
....
已应用的日志。
完成介质恢复。
SQL> alter database datafile 7 online;

数据库已更改。



SQL>  SELECT
      a.tablespace_name,
      a.file_name,
      a.bytes allocated_bytes,
      b.free_bytes
    FROM
      dba_data_files a,
      (SELECT file_id, SUM(bytes) free_bytes
       FROM dba_free_space b GROUP BY file_id) b
 10   WHERE
 11      a.file_id=b.file_id
 12   ORDER BY
 13      a.tablespace_name;
行将被截断

行将被截断


TABLESPACE_NAME               FILE_NAME
-------------------------------------------------------------------------------

RCATTS                        E:\ORACLE11G\APP\HP\ORADATA\RCATTS.DBF
SYSAUX                        E:\ORACLE11G\APP\HP\ORADATA\ORCL\SYSAUX01.DBF
SYSTEM                        E:\ORACLE11G\APP\HP\ORADATA\ORCL\SYSTEM01.DBF
TEST21                        E:\ORACLE11G\APP\HP\ORADATA\TEST21.DBF
UNDOTBS1                      E:\ORACLE11G\APP\HP\ORADATA\ORCL\UNDOTBS01.DBF
USERS                         E:\ORACLE11G\APP\HP\ORADATA\ORCL\USERS01.DBF

已选择6行。


SQL> CREATE TABLE TRIAL (ID NUMBER)
  TABLESPACE RCATTS;

表已创建。



到这里之前丢失的数据文件rcatts 成功找回。


总结:1.由此可见数据库的一些操作一般都是先在逻辑层面进行操作 ,只要物理文件还在,以及日志还在,就可以恢复数据库.
2.由于操作前后相隔了一段时间 ,系统的scn 发生了改变,故需要归档日志来恢复scn 。