备份
    archive log list 查看归档状态
    desc v$log
    show parameter RECOVERY;查看恢复路径
    ====================================================================
    如何归档:
    startup mount
    alter database archivelog/noarchivelog;修改数据库为归档或非归档模式
    show parameter archive;查看归档日志路径
    alter system set log_archive_dest_1='location=/home/oracle/archive01' scope=both;修改归档日志路径
    alter system set log_archive_dest_2='location=/home/oracle/archive02' scope=both;镜像路径
    alter system set log_archive_max_processes=10;
    alter database open;
    alter system switch logfile;切换日志,生成新的归档日志
    ======================================================================
    如何备份:
    alter tablespace tbs_2k begin backup;开启备份,tbs_2k 为需要备份的表空间。
    select  * from v$backup;在PL/SQL下查看备份的信息,如序列号等
    select * from dba_data_files;在PL/SQL下查看数据文件信息,如所属的表空间,序列号,大小等
    select * from v$backup s,dba_data_files t where s.FILE#=t.file_id;以上两条命令的综合结果查看。
    create table t_recover tablespace tbs_2k as select * from scott.emp;创建测试表,用于删除后恢复测试。
    cp tbs_2k.dbf /home/oracle/db_bak;将需要备份的数据文件拷贝到备份目录下,以供以后数据恢复。
    inster into t_recover select * from scott.emp;插入数据
    commit;
    alter system switch logfile;手动进行一次归档
    删除/oradata/TEST下的tbs_2k.dbf文件,然后将/home/oracle/db_bak/目录下的tbs_2k.dbf的文件拷贝到/oradata/TEST下进行人工破坏数据文件后进行恢复
    alter database datafile 5 offline;将数据文件离线。
    cp /home/oracle/db_bak/tbs_2k.dbf  /oradata/TEST;把备份的文件考回到TEST目录下进行下一步的数据恢复。
    recover datafile 5;进行文件从归档日志恢复
    alter database datafile 5 online;将数据文件恢复成在线状态,此刻数据已恢复。
    alter tablespace users end backup;结束备份
    =================================================================================================
    select open_mode form v$database;查看数据库状态
    select FILE_NAME from dba_data_files;查看数据文件目录
    v$datafile查看数据文件信息,如编号和文件名
    archive log list 查看归档状态
    desc v$log
    show parameter RECOVERY;查看恢复路径
    ====================================================================
    如何归档:
    startup mount
    alter database archivelog/noarchivelog;修改数据库为归档或非归档模式
    show parameter archive;查看归档日志路径
    alter system set log_archive_dest_1='location=/home/oracle/archive01' scope=both;修改归档日志路径
    alter system set log_archive_dest_2='location=/home/oracle/archive02' scope=both;镜像路径
    alter system set log_archive_max_processes=10;
    alter database open;
    alter system switch logfile;切换日志,生成新的归档日志
    ======================================================================如何备份:
    alter tablespace tbs_2k begin backup;开启备份,tbs_2k 为需要备份的表空间。
    select  * from v$backup;在PL/SQL下查看备份的信息,如序列号等
    select * from dba_data_files;在PL/SQL下查看数据文件信息,如所属的表空间,序列号,大小等
    select * from v$backup s,dba_data_files t where s.FILE#=t.file_id;以上两条命令的综合结果查看。
    create table t_recover tablespace tbs_2k as select * from scott.emp;创建测试表,用于删除后恢复测试。
    cp tbs_2k.dbf /home/oracle/db_bak;将需要备份的数据文件拷贝到备份目录下,以供以后数据恢复。
    inster into t_recover select * from scott.emp;插入数据
    commit;
    alter system switch logfile;手动进行一次归档
    删除/oradata/TEST下的tbs_2k.dbf文件,然后将/home/oracle/db_bak/目录下的tbs_2k.dbf的文件拷贝到/oradata/TEST下进行人工破坏数据文件后进行恢复
    alter database datafile 5 offline;将数据文件离线。
    cp /home/oracle/db_bak/tbs_2k.dbf  /oradata/TEST;把备份的文件考回到TEST目录下进行下一步的数据恢复。
    recover datafile 5;进行文件从归档日志恢复
    alter database datafile 5 online;将数据文件恢复成在线状态,此刻数据已恢复。
    alter tablespace users end backup;结束备份
    =================================================================================================
    select open_mode form v$database;查看数据库状态
    select FILE_NAME from dba_data_files;查看数据文件目录
    v$datafile查看数据文件信息,如编号和文件名
    不完全数据库恢复
    select sysdate from dual;查看系统时间;
    desc dba_data_files;查看数据文件结构信息
    select file_name from dba_data_files;查看所有的数据文件信息
    show parameter undo
    select * from user_tab_partitions;查看分区信息
    select * from v$logfile;查看日志文件信息
    不完全数据库恢复
    丢失部分数据,数据库恢复到过去某一状态
    必须全库进行不完全恢复,恢复全部数据文件
    必须运行在归档模式下
    数据库在不完全恢复前必须进行冷备份
    数据库在恢复后必须进行备份
    =================================================================================================
    不完全数据库恢复过程
    startup mount;
    alter database archivelog;
    alter database open;
    alter database begin backup;
    cp /oradata/TEST/*.dbf /home/oracle/db_bak;备份数据文件
    alter database end backup;
    (使用日志挖掘技术,确定误删除表的具体时间):
    操作系统创建存储数据字典文件目录
    mkdir -p /home/oracle/logmin;
    alter system set utl_file_dir='/home/oracle/logmin' scope=spfile;
    重启数据库
    shutdown immediate;
    startup
    创建存储数据字典的文件,存储日志文件等信息
    execute dbms_logmnr_d.build('shwdict.ora','/home/oracle/logmin');
    创建在线日志文件/归档日志文件列表到数据字典中
    execute dbms_logmnr.add_logfile('/home/oracle/archive01 /1_3_720440539.dbf',dbms_logmnr.new);其中1_3_720440539.arc为数据库重启前的最新归档日志,dbms_logmnr.new为用归档日志生成的数据字典
    挖掘日志文件
    exec dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/logmin/shwdict.ora');
    alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
    select SCN,TIMESTAMP,SQL_REDO,SQL_UNDO from V$LOGMNR_CONTENTS where SQL_REDO like '%drop%';
    记录下删除表的时间,例如(2011-03-16 04:42:57);
    shutdown immediate;关闭数据库
    startup mount;
    alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
    recover database until time '2011-03-16 04:42:55';恢复时时间尽量在删除表时间的前两三秒;
    alter database open resetlogs;数据库以resetlogs的方式启动,归档日志序列号都归为0,重新开始计数,所以以前备份的东西不能再用,必须将数据库重新备份。
    =================================================================================================
    RMAN备份与恢复
    list backup;列出备份的东西
    select * from user_tables;
    rman>sql "…";
    rman 元数据存在控制文件中
    large-pool增大后利于rman的备份
    show parameter pool
    rman>sql "alter system set large_pool_size=30M";
    rman>rman target / ;登录数据库
    rman>backup tablespace tablespace-name;或
    rman>backup datafile datafile-number;或
    rman>backup database;备份整个数据库
    rman>sql "alter database datafile datafile-num offline";
    rman>restore tablespace tablespace-name;
    rman>recover datafile datafile-number;
    =================================================================================================
    show all;显示rman的配置信息
    alter database open resetlogs;进行此操作后数据库一定要重新备份,因为归档日志的序列号已归为1本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/JavaMan_KA/archive/2011/04/28/6368626.aspx

解决方案 »

  1.   

    总结得不错。
    指出一点错误:
    alter database open resetlogs;进行此操作后数据库一定要重新备份,因为归档日志的序列号已归为1
    10g以后,已经不需要这么做了。
    每次resetlogs的时候只是在那个时间点创造出一个incarnation,而备份的格式,归档文件的格式,包含%r参数就可以在创建的时候准确知道是哪个incarnation.