oracle 冷备份与恢复

oracle 冷备份与恢复
set pagesize 0 linesize 32767 feedback off verify off trimspool on termout off trimout on serveroutput on

define fil=/home/oracle/cdbk.sql
define log=/home/oracle/cdbk.log
spool &fil

prompt connect sys/oracle@clonedb as sysdba;
prompt shutdown immediate;
select 'host cp' || file_name || '/manualbak/clonedb'||substr(file_name,instr(file_name,'/',-1,1)) from dba_data_files;
prompt startup
spool off
spool &log
@&fil;
spool off;

 

linux中的alias

alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls ='ls -- color=tty'
alias rmanclonedb='uniread rman target sys/oracle@clonedb catalog rman10asm/rman@asmdemo
alias rmansm='uniread rman target/ sys/oracle@smk catalog rman10asm@asmdemo
alias sqlasm='uniread sqlplus sys/oracle@asm as sysdba'
alias sqlaskdemo = 'uniread sqlplus sys/oracle@asmdemo as sysdba'
alias sqlclonedb='uniread sqlplus sys/oracle@clonedb as sysdba'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

 

1.删除non-system tablespace数据文件
  online 恢复数据库

(切换日志)
alter system switch logfile;
alter system archive log current;

删除数据文件(模拟灾难发生)

查找non-system tablespace
select status ,name from v$datafile;

删除数据文件/oradata/clonedb/tbs_test01.dbf

查找数据文件所在的表空间(tbs_test表空间)的sql语句:
select  tablespace_name from dba_data_files where file_name='/oradata/clonedb/tbs_test01.dbf'

删除数据文件用户,数据库还是能够运行的,除非你操作已经删除的表空间


连接到一个center用户(表空间名称为center)
conn  center/center

对center表空间下面的操作时不会受影响的
select tablespace_name ,table_name from user_tables;


不能对tbs_test表空间进行操作,对 tbs_test操作会产生错误
 
 1.1拷贝数据文件到待恢复的目录
   cp /manualbak/clonedb/tbs_test01.dbf  /oradata/clonedb/tbs_test01.dbf

 1.2 select status from v$datafile;
 
     recover tablespace  tbs_test
 
   出现一个Oracle错误,ORA_01124
   在sql中查看ORACLE错误的命令是:!oerr ora 01124
 
    
   alter tablespace tbs_test online (触发Oracle去查找数据文件,这个时候发现数据文件不在了,所以就需要进行恢复)

   recove datafile 5;

   select stauts from v$datafile时,发现数据文件处于OFFLINE状态(因为数据文件是在关机的时候备的,所以出于OFFLINE状态,在数据文件的尾部有个标记,在开关机的时候进行设置)

   alter database datafile 5 online;
  

2.删除system表空间数据文件
  在mount状态恢复数据库

   system 表空间包含数据字典

   删除数据文件

   select * from v$datafile (会产生错误)
   


3.undo表空间数据文件
  在线回复UNDO表空间
 
  rm undotbs1.dbf (删除undo表空间)
 
  insert into tb_type(col1)values('你好');
  commit;
 
 
  select table_name from dictionary where table_name like '%UN%'
 
   cp /manualbak/clonedb/undotbs1.dbf /oradata/clonedb/undotbs1.dbf;
   select * from v$datafile;
   数据库没有发现undo文件已经被删除掉了,数据库怎么知道文件被删除

   做一个检查点:
   alter system checkpoint;
   数据库发现文件不存在
  
    recove datafile 2
 
    select * from v$datafile;

    alter database datafile2 online;

4.删除联机日志

  备份控制文件: select * from V$controlfile;
 
  cp control01.ctl control03.ctl

  删除所有的redoLog(RedoBuffer每三分钟、1M、commit,写到redoLog中)
  rm redo_g*
  数据库还不知道文件已经丢失
  tail -f /u01/oracle/admin/clonedb/bdump/alert_clonedb.log

  alter system checkpoint
  alter system switch logfile;
  alter system switch logfile;
  alter system switch logfile;

   shutdown abort
   startup mount
   alter database open (找不到日志)
   你的控制文件找不到联机日志

    shutdown abort
    重建控制文件(需要重建控制文件的脚本)
   
    alter database backup controlfile to trace;
    在shutdown之间找到oracleclonedb(Description=(local=yes)(address=(protocol=beq)))的PID(13957),这个PID是有用的

    shutdown abort;

    vi /u01/oracle/admin/clonedb/udump/clonedb_ora_13957.trc
    clonedb_ora_13957.trc是生产控制文件的脚本,任何找到RESETLOGS部分

    STARTUP NOMOUNT
    CREATE CONTROLFILE REUSE DATABASE 'CLONEDB' RESETLOGS ARCHIVELOG
        MAXLOGFILES 16
        MAXLOGMEMBERS 3
        MAXDATAFILES  100
        MAXINSTANCES  8
        MAXLOGHISTROY 292

    LOGFILE
    GROUP  1 '/oradata/clonedb/redo_g1_m1.ora' SIZE 5M
    GROUP  2 '/oradata/clonedb/redo_g2_m1.ora' SIZE 5M
    GROUP  3 '/oradata/clonedb/redo_g3_m1.ora' SIZE 5M
--- STANDBY LOGFILE
    DATAFILE
    '/oradata/clonedb/system01.dbf',
    '/oradata/clonedb/undotbs1.dbf',
    '/oradata/clonedb/sysaux01.dbf'
    CHARACTER  SET AL32UTF8
    
    执行建立控制文件脚本
    alter database open;
    出现一个错误,must use RESETLOGS OR NORESETLOGS OPTION
    alter database open resetlogs;
    由于通过abort关闭数据库,它告诉你有数据文件需要回复

    recover database using backup controlfile until cancel
   
    由于通过abort关闭数据库,它找不到联机重做日志来恢复数据文件


    恢复system数据文件
    rm system01.dbf
    cp /manualbak/clonedb/system01.dbf ./oradata/system01.dbf
    recover database using backup controlfile until cancel 
 
   
    对其他的数据文件进行恢复,如果不是进行abort关机,可以不对数据文件进行恢复


    alter database open resetlogs;

    select * from v$logfile,查看日志文件是否恢复成功

5.删除控制文件

  rm control01.ctl
  rm control02.ctl

  select * from v$datafile;
  select * from v$controlfile
  alter system checkpoint;
 
  重新连接到数据库,出现控制文件不存在(一般的文件操作时可以的)

  如果对控制文件进行写的话,会产生错误
  alter system switch logfile(对数据文件进行写操作)(不成功)
  控制文件记录了archivelog ,当前的redolog的序号.还记录了你的数据文件是否ONLINE

  tail -f /u01/oracle/admin/clonedb/bdump/alert_clonedb.log
  alter database datafile 5 offline/online(对控制文件进行写操作)

  恢复控制文件:
   cp control03.ctl control01.ctl
   cp control03.ctl control02.ctl
   alter database datafile 5 offline(不行)
   shutdown immediate

   conn / as sysdba;

   shutdown abort
   startup mount
   recover database using backup controlfile ;
   因为control03.ctl是在resetlog之间备份的,在resetlog之后不容许还原
  
  使用脚本来创建控制文件

   startup nomount
   @$HOME/ctlsql.sql
  
   alter database open resetlogs;
   recover database using backup controlfile;(until cancel)
   把日志也引用一下
   在Specify log:{<RET>=suggested | filename |AUTO|CANCEL}下输入
   /oradata/clonedb/redo_g1_m1.ora
   /oradata/clonedb/redo_g2_m1.ora
   /oradata/clonedb/redo_g3_m1.ora
   alter database open resetlogs;
 
6. 删除临时表空间
  
   select tablespace_name from dba_tablespace where contents=TEMPORARY
   执行一个排序,来创建一个临时表空间文件

   explain plan for select * from center.zx_gs_qyxx order by qymc;(出现临时表空间为空)

   alter tablespace temp add tempfile '/oradata/clonedb/temp01.dbf' size 100m autoextend off;

   (再次执行)explain plan for select * from center.zx_gs_qyxx order by qymc;
   select * from table(dbms_xplan.display);

   该表中有个tempspace ,在排序的时候,使用了 93M的临时表空间

   删除临时表空间的数据文件
   rm temp01.dbf
  
   在center用户下面,就报不能够找到临时表空间的数据文件temp01.dbf
  
   conn / as sysdba;

   alter tablespace temp add tempfile '/oradata/clonedb/temp02.dbf' size 100m autoextend off;
 
 alter tablespace temp drop tempfile 1;
 
  conn center/center
 
  select * from center.zx_gs_qyxx order by qymc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值