望哪位达人能上一个比较详细的实施方案,谢谢
3 个解决方案
#1
用rman来做备份
#2
2)热备份
@将数据库设置为归档模式
设置oracle为归档模式:
先用命令查看是否为归档模式
select log_mode from v$database;
LOG_MODE
------------------------------------------------
NOARCHIVELOG
则用以下方法设置数据库为归档模式
mkdir -p /opt/oracle/u01/app/oracle/oradata/ORCL/archive
[oracle@cqcncdb szdb]$ sqlplus /nolog
SQL> conn / as sysdba;
Connected.
SQL> startup mount;
SQL> alter database archivelog;
SQL> archive log start;
SQL> archive log list;
SQL> alter database open;
SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=/opt/oracle/u01/app/oracle/oradata/ORCL/archive'; # /oracle/oradata/szdb/archive必须和前面mkdir -p /opt/oracle/u01/app/oracle/oradata/ORCL/archive操作建立的路径一模一样
SQL> alter system set log_archive_format='ARC_S%_T%_r%_d%' scope=spfile;
SQL> alter system set log_archive_start=true scope=spfile;
重新启动数据库,使修改结果生效
SQL> shutdown immediate;
察看归档模式
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORA-19905: log_archive_format must contain %s, %t and %r
SQL> create spfile from pfile='/opt/oracle/u01/app/oracle/admin/ORCL/pfile/init.ora.8212009184542';
SQL> startup
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/oradata/szdb/archive
Oldest online log sequence 565
Next log sequence to archive 567
Current log sequence 567
以上alter system set操作会在数据库的spfile@sid.ora和init@sid.ora文件中新增以下参数
*.log_archive_dest_1='LOCATION=/oracle/oradata/szdb/archive'
*.log_archive_format='%t_%s.dbf'
*.log_archive_start=TRUE
注意:*.log_archive_dest_1定义的文件夹必须是实际存在的,并且oracle用户是有写权限的
注:@sid代表数据库的实际sid号,比如在这次实际操作中这两个文件名就是spfileszdb.ora、 initszdb.ora
用户管理的热备份,将表空间置于热备份模式下,然后用操作系统工具对文件进行复制备份,备份完成后再结束表空间的备份模式。
SQL>alter tablespace users begin backup; ----将数据库设置到备份模式。
SQL>host copy D:\oracle\oradata\orcl\user01.dbf d:\back\ ----拷贝数据文件到备份目录。
SQL>alter tablespace users end backup; ----结束备份状态。
SQL>alter system switch logfile; ----切换日志,使当前日志归档。
@在数据库上发出全局检查点,在所有的数据文件头块上加锁
sql>alter database begin backup ;
@备份数据文件及控制文件
数据文件直接拷贝至其他目录
控制文件需使用alter database backup controlfile
sql>alter database backup controlfile to 'd:\backup\demo.ctl';
@结束数据备份,为确保数据文件备份的同步性,还应该归档当前日志组
sql>alter database end backup;
sql>alter system archive log cuurent;
3)备份表空间
*脱机备份(表空间处于OFFLINE状态,SYSTEM表空间和正在使用的UNDO空间不能脱机)
@确定表空间包涵的数据文件,如空间USERS
sql>select file_name from dba_data_files
where tablespace_name = 'users';
/select file_name,tablespace_name from dba_data_files;
@设置表空间为脱机状态
sql>alter tablespace users offline;
@复制数据文件
host copy E:\oracle\product\10.2.0\oradata\orcl\USERS01.dbf C:\oracle\backup\users01.dbf;
@设置表空间联机
sql>alter tablespace users online;
*联机备份
@确定对应关系
@设置表空间为备份模式
sql>alter tablespace users begin backup ;
@复制数据文件
@设置表空间为正常模式
sql>alter tablespace users end backup ;
*处理联机备份失败
当执行联机备份时,若出现例程失败,再次打开数据库时,如果数据文件仍处于备份状态,则会出错,此时需要结束备份
@装载数据库
sql>startup force mount
@查看处于联机备份状态的所有数据文件
sql>select file# from v$backup where status = 'active';
@结束联机备份状态
sql>alter tablespace end backup
或alter tablespace datafile backup;
或recover datafile 序号
@打开数据库
sql>alter database open;
2.还原
1)完全恢复
相关命令:
recover database :恢复数据库的多个数据文件(在MOUNT状态下运行)
recover tadaspace :恢复多个表空间的所有数据文件(在open状态下运行)
recover datafile :恢复一个或多个数据文件(在mount,open状态下都可)
*在mount状态下恢复数据文件(用于SYSTEM表空间恢复)
@装载数据库 mount状态
@确定需要恢复的数据文件
sql>select file#,error from v$recover_file
@拷贝备份至原位置
@恢复数据库 recover..上述命令
@打开数据库 alter database open;
*在open状态下恢复关闭后意外对视的数据文件,此时数据库将无法打开
@装载数据库 mount
@确定需要恢复的数据文件
@使相应的数据文件脱机
sql>alter database datafile 4 offline;
@打开数据库
sql>alter database open
@复制数据备份文件
@恢复数据文件
@是数据文件联机 alter database datafile 4 online;
*在open状态下恢复打开时意外丢失的数据文件
@确定要恢复的数据文件
@使数据文件脱机
@复制数据文件
@恢复相应的表空间或数据文件
@使相应的表空间或数据文件联机
*在open状态下恢复未备份的数据文件(要求在归档模式下,新建数据文件,其从简历 开始的所有归档日志必须全部存在)
@装载数据库
@确定要恢复的数据文件
@是数据文件脱机
@打开数据库
@重新建立数据文件
sql>alter database create datafile 'd:\demo\users01.dbf';
@恢复数据文件
@使数据文件联机
2)不完全恢复
使用已备份的数据文件,归档日志,和重做日志,将数据库恢复到备份点与失败点之间 某个时刻的状态
*恢复分类
基于时间的恢复:误删除表,误截断表,提交了错误的数据
基于取笑恢复:恢复到某个日志序列号之前的状态
基于SCN的恢复:恢复到特定SCN值的状态
基于备份控制文件恢复:表空间被意外删除,或所有控制文件全部损坏
*不完全恢复指令
recover database until time
recover database until change
recover database until cancel
recover database .. using backup controlfile
*基于时间的恢复
@关闭数据库(为防止备份失败,应备份当前数据库所有文件
@装载数据库 startup mount
@复制所有备份数据文件,并确定备份文件的时间点
sql>select file#,to_char(time,'yyyy-mm-dd hh24:mi:ss)
from v$recover_file;
@执行recover database until time
sql>recover database until time "2006-09-26 16:40:33'
@以resetlogs方式打开数据库,并检查恢复结果
sql>alter database open resetlogs;
@备份数据库所有数据文件和控制文件,因为当以resetlogs方式打开数据库后 会重新建立重做日志,清空原有重做日志的所有内容,并将日志序列号复位为1
sql>select name from v$datafile;
sql>alter database begin backup;
拷贝数据文件
sql>alter database end backup;
sql>alter database backup controlfile
to 'd:\backup\demo.ctl' reuse;
sql>alter system archive log cuurent;
*基于SCN恢复
@关闭数据库
@装载数据库 mount
@复制所有备份数据文件,确定备份文件SCN值
sql>select file#,change#, from v$recover_file;
@执行recover database until change
sql>recover database until change 675978;
@以resetlogs方式打开数据库
@备份数据库所有数据文件和控制文件
*基于取消恢复
@关闭数据库
@装载数据库
@复制所有备份的数据文件,确定备份文件的SCN值
sql>select file#,change# from v$recover_file;
@执行recover database until cancle
sql>recover database until cancel
@以resetlogs方式打开数据库
@备份所有数据文件和控制文件
*基于备份控制文件的恢复
@通过查看alert文件,确定误操作时间
@关闭数据库
@复制所有备份的数据文件,控制文件
@装载数据库
@执行recover database ..using backup controlfile
sql>recover database until time '2004-09-26 19:51:06'
using backup controlfile
@以resetlogs 方式打开数据库
@备份所有数据文件和控制文件
一直都想搞清楚这个问题,这两天也看了很多资料,从网上收集了一些资料,自己也在理解过程中,
高手认为我收集的资料有问题的还请指教,
对了还一种就是RMAN,楼上所说的..还希望能够具体一些..让我这类菜鸟可以容易学习一点,呵呵.谢谢.
@将数据库设置为归档模式
设置oracle为归档模式:
先用命令查看是否为归档模式
select log_mode from v$database;
LOG_MODE
------------------------------------------------
NOARCHIVELOG
则用以下方法设置数据库为归档模式
mkdir -p /opt/oracle/u01/app/oracle/oradata/ORCL/archive
[oracle@cqcncdb szdb]$ sqlplus /nolog
SQL> conn / as sysdba;
Connected.
SQL> startup mount;
SQL> alter database archivelog;
SQL> archive log start;
SQL> archive log list;
SQL> alter database open;
SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=/opt/oracle/u01/app/oracle/oradata/ORCL/archive'; # /oracle/oradata/szdb/archive必须和前面mkdir -p /opt/oracle/u01/app/oracle/oradata/ORCL/archive操作建立的路径一模一样
SQL> alter system set log_archive_format='ARC_S%_T%_r%_d%' scope=spfile;
SQL> alter system set log_archive_start=true scope=spfile;
重新启动数据库,使修改结果生效
SQL> shutdown immediate;
察看归档模式
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORA-19905: log_archive_format must contain %s, %t and %r
SQL> create spfile from pfile='/opt/oracle/u01/app/oracle/admin/ORCL/pfile/init.ora.8212009184542';
SQL> startup
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/oradata/szdb/archive
Oldest online log sequence 565
Next log sequence to archive 567
Current log sequence 567
以上alter system set操作会在数据库的spfile@sid.ora和init@sid.ora文件中新增以下参数
*.log_archive_dest_1='LOCATION=/oracle/oradata/szdb/archive'
*.log_archive_format='%t_%s.dbf'
*.log_archive_start=TRUE
注意:*.log_archive_dest_1定义的文件夹必须是实际存在的,并且oracle用户是有写权限的
注:@sid代表数据库的实际sid号,比如在这次实际操作中这两个文件名就是spfileszdb.ora、 initszdb.ora
用户管理的热备份,将表空间置于热备份模式下,然后用操作系统工具对文件进行复制备份,备份完成后再结束表空间的备份模式。
SQL>alter tablespace users begin backup; ----将数据库设置到备份模式。
SQL>host copy D:\oracle\oradata\orcl\user01.dbf d:\back\ ----拷贝数据文件到备份目录。
SQL>alter tablespace users end backup; ----结束备份状态。
SQL>alter system switch logfile; ----切换日志,使当前日志归档。
@在数据库上发出全局检查点,在所有的数据文件头块上加锁
sql>alter database begin backup ;
@备份数据文件及控制文件
数据文件直接拷贝至其他目录
控制文件需使用alter database backup controlfile
sql>alter database backup controlfile to 'd:\backup\demo.ctl';
@结束数据备份,为确保数据文件备份的同步性,还应该归档当前日志组
sql>alter database end backup;
sql>alter system archive log cuurent;
3)备份表空间
*脱机备份(表空间处于OFFLINE状态,SYSTEM表空间和正在使用的UNDO空间不能脱机)
@确定表空间包涵的数据文件,如空间USERS
sql>select file_name from dba_data_files
where tablespace_name = 'users';
/select file_name,tablespace_name from dba_data_files;
@设置表空间为脱机状态
sql>alter tablespace users offline;
@复制数据文件
host copy E:\oracle\product\10.2.0\oradata\orcl\USERS01.dbf C:\oracle\backup\users01.dbf;
@设置表空间联机
sql>alter tablespace users online;
*联机备份
@确定对应关系
@设置表空间为备份模式
sql>alter tablespace users begin backup ;
@复制数据文件
@设置表空间为正常模式
sql>alter tablespace users end backup ;
*处理联机备份失败
当执行联机备份时,若出现例程失败,再次打开数据库时,如果数据文件仍处于备份状态,则会出错,此时需要结束备份
@装载数据库
sql>startup force mount
@查看处于联机备份状态的所有数据文件
sql>select file# from v$backup where status = 'active';
@结束联机备份状态
sql>alter tablespace end backup
或alter tablespace datafile backup;
或recover datafile 序号
@打开数据库
sql>alter database open;
2.还原
1)完全恢复
相关命令:
recover database :恢复数据库的多个数据文件(在MOUNT状态下运行)
recover tadaspace :恢复多个表空间的所有数据文件(在open状态下运行)
recover datafile :恢复一个或多个数据文件(在mount,open状态下都可)
*在mount状态下恢复数据文件(用于SYSTEM表空间恢复)
@装载数据库 mount状态
@确定需要恢复的数据文件
sql>select file#,error from v$recover_file
@拷贝备份至原位置
@恢复数据库 recover..上述命令
@打开数据库 alter database open;
*在open状态下恢复关闭后意外对视的数据文件,此时数据库将无法打开
@装载数据库 mount
@确定需要恢复的数据文件
@使相应的数据文件脱机
sql>alter database datafile 4 offline;
@打开数据库
sql>alter database open
@复制数据备份文件
@恢复数据文件
@是数据文件联机 alter database datafile 4 online;
*在open状态下恢复打开时意外丢失的数据文件
@确定要恢复的数据文件
@使数据文件脱机
@复制数据文件
@恢复相应的表空间或数据文件
@使相应的表空间或数据文件联机
*在open状态下恢复未备份的数据文件(要求在归档模式下,新建数据文件,其从简历 开始的所有归档日志必须全部存在)
@装载数据库
@确定要恢复的数据文件
@是数据文件脱机
@打开数据库
@重新建立数据文件
sql>alter database create datafile 'd:\demo\users01.dbf';
@恢复数据文件
@使数据文件联机
2)不完全恢复
使用已备份的数据文件,归档日志,和重做日志,将数据库恢复到备份点与失败点之间 某个时刻的状态
*恢复分类
基于时间的恢复:误删除表,误截断表,提交了错误的数据
基于取笑恢复:恢复到某个日志序列号之前的状态
基于SCN的恢复:恢复到特定SCN值的状态
基于备份控制文件恢复:表空间被意外删除,或所有控制文件全部损坏
*不完全恢复指令
recover database until time
recover database until change
recover database until cancel
recover database .. using backup controlfile
*基于时间的恢复
@关闭数据库(为防止备份失败,应备份当前数据库所有文件
@装载数据库 startup mount
@复制所有备份数据文件,并确定备份文件的时间点
sql>select file#,to_char(time,'yyyy-mm-dd hh24:mi:ss)
from v$recover_file;
@执行recover database until time
sql>recover database until time "2006-09-26 16:40:33'
@以resetlogs方式打开数据库,并检查恢复结果
sql>alter database open resetlogs;
@备份数据库所有数据文件和控制文件,因为当以resetlogs方式打开数据库后 会重新建立重做日志,清空原有重做日志的所有内容,并将日志序列号复位为1
sql>select name from v$datafile;
sql>alter database begin backup;
拷贝数据文件
sql>alter database end backup;
sql>alter database backup controlfile
to 'd:\backup\demo.ctl' reuse;
sql>alter system archive log cuurent;
*基于SCN恢复
@关闭数据库
@装载数据库 mount
@复制所有备份数据文件,确定备份文件SCN值
sql>select file#,change#, from v$recover_file;
@执行recover database until change
sql>recover database until change 675978;
@以resetlogs方式打开数据库
@备份数据库所有数据文件和控制文件
*基于取消恢复
@关闭数据库
@装载数据库
@复制所有备份的数据文件,确定备份文件的SCN值
sql>select file#,change# from v$recover_file;
@执行recover database until cancle
sql>recover database until cancel
@以resetlogs方式打开数据库
@备份所有数据文件和控制文件
*基于备份控制文件的恢复
@通过查看alert文件,确定误操作时间
@关闭数据库
@复制所有备份的数据文件,控制文件
@装载数据库
@执行recover database ..using backup controlfile
sql>recover database until time '2004-09-26 19:51:06'
using backup controlfile
@以resetlogs 方式打开数据库
@备份所有数据文件和控制文件
一直都想搞清楚这个问题,这两天也看了很多资料,从网上收集了一些资料,自己也在理解过程中,
高手认为我收集的资料有问题的还请指教,
对了还一种就是RMAN,楼上所说的..还希望能够具体一些..让我这类菜鸟可以容易学习一点,呵呵.谢谢.
#1
用rman来做备份
#2
2)热备份
@将数据库设置为归档模式
设置oracle为归档模式:
先用命令查看是否为归档模式
select log_mode from v$database;
LOG_MODE
------------------------------------------------
NOARCHIVELOG
则用以下方法设置数据库为归档模式
mkdir -p /opt/oracle/u01/app/oracle/oradata/ORCL/archive
[oracle@cqcncdb szdb]$ sqlplus /nolog
SQL> conn / as sysdba;
Connected.
SQL> startup mount;
SQL> alter database archivelog;
SQL> archive log start;
SQL> archive log list;
SQL> alter database open;
SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=/opt/oracle/u01/app/oracle/oradata/ORCL/archive'; # /oracle/oradata/szdb/archive必须和前面mkdir -p /opt/oracle/u01/app/oracle/oradata/ORCL/archive操作建立的路径一模一样
SQL> alter system set log_archive_format='ARC_S%_T%_r%_d%' scope=spfile;
SQL> alter system set log_archive_start=true scope=spfile;
重新启动数据库,使修改结果生效
SQL> shutdown immediate;
察看归档模式
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORA-19905: log_archive_format must contain %s, %t and %r
SQL> create spfile from pfile='/opt/oracle/u01/app/oracle/admin/ORCL/pfile/init.ora.8212009184542';
SQL> startup
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/oradata/szdb/archive
Oldest online log sequence 565
Next log sequence to archive 567
Current log sequence 567
以上alter system set操作会在数据库的spfile@sid.ora和init@sid.ora文件中新增以下参数
*.log_archive_dest_1='LOCATION=/oracle/oradata/szdb/archive'
*.log_archive_format='%t_%s.dbf'
*.log_archive_start=TRUE
注意:*.log_archive_dest_1定义的文件夹必须是实际存在的,并且oracle用户是有写权限的
注:@sid代表数据库的实际sid号,比如在这次实际操作中这两个文件名就是spfileszdb.ora、 initszdb.ora
用户管理的热备份,将表空间置于热备份模式下,然后用操作系统工具对文件进行复制备份,备份完成后再结束表空间的备份模式。
SQL>alter tablespace users begin backup; ----将数据库设置到备份模式。
SQL>host copy D:\oracle\oradata\orcl\user01.dbf d:\back\ ----拷贝数据文件到备份目录。
SQL>alter tablespace users end backup; ----结束备份状态。
SQL>alter system switch logfile; ----切换日志,使当前日志归档。
@在数据库上发出全局检查点,在所有的数据文件头块上加锁
sql>alter database begin backup ;
@备份数据文件及控制文件
数据文件直接拷贝至其他目录
控制文件需使用alter database backup controlfile
sql>alter database backup controlfile to 'd:\backup\demo.ctl';
@结束数据备份,为确保数据文件备份的同步性,还应该归档当前日志组
sql>alter database end backup;
sql>alter system archive log cuurent;
3)备份表空间
*脱机备份(表空间处于OFFLINE状态,SYSTEM表空间和正在使用的UNDO空间不能脱机)
@确定表空间包涵的数据文件,如空间USERS
sql>select file_name from dba_data_files
where tablespace_name = 'users';
/select file_name,tablespace_name from dba_data_files;
@设置表空间为脱机状态
sql>alter tablespace users offline;
@复制数据文件
host copy E:\oracle\product\10.2.0\oradata\orcl\USERS01.dbf C:\oracle\backup\users01.dbf;
@设置表空间联机
sql>alter tablespace users online;
*联机备份
@确定对应关系
@设置表空间为备份模式
sql>alter tablespace users begin backup ;
@复制数据文件
@设置表空间为正常模式
sql>alter tablespace users end backup ;
*处理联机备份失败
当执行联机备份时,若出现例程失败,再次打开数据库时,如果数据文件仍处于备份状态,则会出错,此时需要结束备份
@装载数据库
sql>startup force mount
@查看处于联机备份状态的所有数据文件
sql>select file# from v$backup where status = 'active';
@结束联机备份状态
sql>alter tablespace end backup
或alter tablespace datafile backup;
或recover datafile 序号
@打开数据库
sql>alter database open;
2.还原
1)完全恢复
相关命令:
recover database :恢复数据库的多个数据文件(在MOUNT状态下运行)
recover tadaspace :恢复多个表空间的所有数据文件(在open状态下运行)
recover datafile :恢复一个或多个数据文件(在mount,open状态下都可)
*在mount状态下恢复数据文件(用于SYSTEM表空间恢复)
@装载数据库 mount状态
@确定需要恢复的数据文件
sql>select file#,error from v$recover_file
@拷贝备份至原位置
@恢复数据库 recover..上述命令
@打开数据库 alter database open;
*在open状态下恢复关闭后意外对视的数据文件,此时数据库将无法打开
@装载数据库 mount
@确定需要恢复的数据文件
@使相应的数据文件脱机
sql>alter database datafile 4 offline;
@打开数据库
sql>alter database open
@复制数据备份文件
@恢复数据文件
@是数据文件联机 alter database datafile 4 online;
*在open状态下恢复打开时意外丢失的数据文件
@确定要恢复的数据文件
@使数据文件脱机
@复制数据文件
@恢复相应的表空间或数据文件
@使相应的表空间或数据文件联机
*在open状态下恢复未备份的数据文件(要求在归档模式下,新建数据文件,其从简历 开始的所有归档日志必须全部存在)
@装载数据库
@确定要恢复的数据文件
@是数据文件脱机
@打开数据库
@重新建立数据文件
sql>alter database create datafile 'd:\demo\users01.dbf';
@恢复数据文件
@使数据文件联机
2)不完全恢复
使用已备份的数据文件,归档日志,和重做日志,将数据库恢复到备份点与失败点之间 某个时刻的状态
*恢复分类
基于时间的恢复:误删除表,误截断表,提交了错误的数据
基于取笑恢复:恢复到某个日志序列号之前的状态
基于SCN的恢复:恢复到特定SCN值的状态
基于备份控制文件恢复:表空间被意外删除,或所有控制文件全部损坏
*不完全恢复指令
recover database until time
recover database until change
recover database until cancel
recover database .. using backup controlfile
*基于时间的恢复
@关闭数据库(为防止备份失败,应备份当前数据库所有文件
@装载数据库 startup mount
@复制所有备份数据文件,并确定备份文件的时间点
sql>select file#,to_char(time,'yyyy-mm-dd hh24:mi:ss)
from v$recover_file;
@执行recover database until time
sql>recover database until time "2006-09-26 16:40:33'
@以resetlogs方式打开数据库,并检查恢复结果
sql>alter database open resetlogs;
@备份数据库所有数据文件和控制文件,因为当以resetlogs方式打开数据库后 会重新建立重做日志,清空原有重做日志的所有内容,并将日志序列号复位为1
sql>select name from v$datafile;
sql>alter database begin backup;
拷贝数据文件
sql>alter database end backup;
sql>alter database backup controlfile
to 'd:\backup\demo.ctl' reuse;
sql>alter system archive log cuurent;
*基于SCN恢复
@关闭数据库
@装载数据库 mount
@复制所有备份数据文件,确定备份文件SCN值
sql>select file#,change#, from v$recover_file;
@执行recover database until change
sql>recover database until change 675978;
@以resetlogs方式打开数据库
@备份数据库所有数据文件和控制文件
*基于取消恢复
@关闭数据库
@装载数据库
@复制所有备份的数据文件,确定备份文件的SCN值
sql>select file#,change# from v$recover_file;
@执行recover database until cancle
sql>recover database until cancel
@以resetlogs方式打开数据库
@备份所有数据文件和控制文件
*基于备份控制文件的恢复
@通过查看alert文件,确定误操作时间
@关闭数据库
@复制所有备份的数据文件,控制文件
@装载数据库
@执行recover database ..using backup controlfile
sql>recover database until time '2004-09-26 19:51:06'
using backup controlfile
@以resetlogs 方式打开数据库
@备份所有数据文件和控制文件
一直都想搞清楚这个问题,这两天也看了很多资料,从网上收集了一些资料,自己也在理解过程中,
高手认为我收集的资料有问题的还请指教,
对了还一种就是RMAN,楼上所说的..还希望能够具体一些..让我这类菜鸟可以容易学习一点,呵呵.谢谢.
@将数据库设置为归档模式
设置oracle为归档模式:
先用命令查看是否为归档模式
select log_mode from v$database;
LOG_MODE
------------------------------------------------
NOARCHIVELOG
则用以下方法设置数据库为归档模式
mkdir -p /opt/oracle/u01/app/oracle/oradata/ORCL/archive
[oracle@cqcncdb szdb]$ sqlplus /nolog
SQL> conn / as sysdba;
Connected.
SQL> startup mount;
SQL> alter database archivelog;
SQL> archive log start;
SQL> archive log list;
SQL> alter database open;
SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=/opt/oracle/u01/app/oracle/oradata/ORCL/archive'; # /oracle/oradata/szdb/archive必须和前面mkdir -p /opt/oracle/u01/app/oracle/oradata/ORCL/archive操作建立的路径一模一样
SQL> alter system set log_archive_format='ARC_S%_T%_r%_d%' scope=spfile;
SQL> alter system set log_archive_start=true scope=spfile;
重新启动数据库,使修改结果生效
SQL> shutdown immediate;
察看归档模式
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORA-19905: log_archive_format must contain %s, %t and %r
SQL> create spfile from pfile='/opt/oracle/u01/app/oracle/admin/ORCL/pfile/init.ora.8212009184542';
SQL> startup
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/oradata/szdb/archive
Oldest online log sequence 565
Next log sequence to archive 567
Current log sequence 567
以上alter system set操作会在数据库的spfile@sid.ora和init@sid.ora文件中新增以下参数
*.log_archive_dest_1='LOCATION=/oracle/oradata/szdb/archive'
*.log_archive_format='%t_%s.dbf'
*.log_archive_start=TRUE
注意:*.log_archive_dest_1定义的文件夹必须是实际存在的,并且oracle用户是有写权限的
注:@sid代表数据库的实际sid号,比如在这次实际操作中这两个文件名就是spfileszdb.ora、 initszdb.ora
用户管理的热备份,将表空间置于热备份模式下,然后用操作系统工具对文件进行复制备份,备份完成后再结束表空间的备份模式。
SQL>alter tablespace users begin backup; ----将数据库设置到备份模式。
SQL>host copy D:\oracle\oradata\orcl\user01.dbf d:\back\ ----拷贝数据文件到备份目录。
SQL>alter tablespace users end backup; ----结束备份状态。
SQL>alter system switch logfile; ----切换日志,使当前日志归档。
@在数据库上发出全局检查点,在所有的数据文件头块上加锁
sql>alter database begin backup ;
@备份数据文件及控制文件
数据文件直接拷贝至其他目录
控制文件需使用alter database backup controlfile
sql>alter database backup controlfile to 'd:\backup\demo.ctl';
@结束数据备份,为确保数据文件备份的同步性,还应该归档当前日志组
sql>alter database end backup;
sql>alter system archive log cuurent;
3)备份表空间
*脱机备份(表空间处于OFFLINE状态,SYSTEM表空间和正在使用的UNDO空间不能脱机)
@确定表空间包涵的数据文件,如空间USERS
sql>select file_name from dba_data_files
where tablespace_name = 'users';
/select file_name,tablespace_name from dba_data_files;
@设置表空间为脱机状态
sql>alter tablespace users offline;
@复制数据文件
host copy E:\oracle\product\10.2.0\oradata\orcl\USERS01.dbf C:\oracle\backup\users01.dbf;
@设置表空间联机
sql>alter tablespace users online;
*联机备份
@确定对应关系
@设置表空间为备份模式
sql>alter tablespace users begin backup ;
@复制数据文件
@设置表空间为正常模式
sql>alter tablespace users end backup ;
*处理联机备份失败
当执行联机备份时,若出现例程失败,再次打开数据库时,如果数据文件仍处于备份状态,则会出错,此时需要结束备份
@装载数据库
sql>startup force mount
@查看处于联机备份状态的所有数据文件
sql>select file# from v$backup where status = 'active';
@结束联机备份状态
sql>alter tablespace end backup
或alter tablespace datafile backup;
或recover datafile 序号
@打开数据库
sql>alter database open;
2.还原
1)完全恢复
相关命令:
recover database :恢复数据库的多个数据文件(在MOUNT状态下运行)
recover tadaspace :恢复多个表空间的所有数据文件(在open状态下运行)
recover datafile :恢复一个或多个数据文件(在mount,open状态下都可)
*在mount状态下恢复数据文件(用于SYSTEM表空间恢复)
@装载数据库 mount状态
@确定需要恢复的数据文件
sql>select file#,error from v$recover_file
@拷贝备份至原位置
@恢复数据库 recover..上述命令
@打开数据库 alter database open;
*在open状态下恢复关闭后意外对视的数据文件,此时数据库将无法打开
@装载数据库 mount
@确定需要恢复的数据文件
@使相应的数据文件脱机
sql>alter database datafile 4 offline;
@打开数据库
sql>alter database open
@复制数据备份文件
@恢复数据文件
@是数据文件联机 alter database datafile 4 online;
*在open状态下恢复打开时意外丢失的数据文件
@确定要恢复的数据文件
@使数据文件脱机
@复制数据文件
@恢复相应的表空间或数据文件
@使相应的表空间或数据文件联机
*在open状态下恢复未备份的数据文件(要求在归档模式下,新建数据文件,其从简历 开始的所有归档日志必须全部存在)
@装载数据库
@确定要恢复的数据文件
@是数据文件脱机
@打开数据库
@重新建立数据文件
sql>alter database create datafile 'd:\demo\users01.dbf';
@恢复数据文件
@使数据文件联机
2)不完全恢复
使用已备份的数据文件,归档日志,和重做日志,将数据库恢复到备份点与失败点之间 某个时刻的状态
*恢复分类
基于时间的恢复:误删除表,误截断表,提交了错误的数据
基于取笑恢复:恢复到某个日志序列号之前的状态
基于SCN的恢复:恢复到特定SCN值的状态
基于备份控制文件恢复:表空间被意外删除,或所有控制文件全部损坏
*不完全恢复指令
recover database until time
recover database until change
recover database until cancel
recover database .. using backup controlfile
*基于时间的恢复
@关闭数据库(为防止备份失败,应备份当前数据库所有文件
@装载数据库 startup mount
@复制所有备份数据文件,并确定备份文件的时间点
sql>select file#,to_char(time,'yyyy-mm-dd hh24:mi:ss)
from v$recover_file;
@执行recover database until time
sql>recover database until time "2006-09-26 16:40:33'
@以resetlogs方式打开数据库,并检查恢复结果
sql>alter database open resetlogs;
@备份数据库所有数据文件和控制文件,因为当以resetlogs方式打开数据库后 会重新建立重做日志,清空原有重做日志的所有内容,并将日志序列号复位为1
sql>select name from v$datafile;
sql>alter database begin backup;
拷贝数据文件
sql>alter database end backup;
sql>alter database backup controlfile
to 'd:\backup\demo.ctl' reuse;
sql>alter system archive log cuurent;
*基于SCN恢复
@关闭数据库
@装载数据库 mount
@复制所有备份数据文件,确定备份文件SCN值
sql>select file#,change#, from v$recover_file;
@执行recover database until change
sql>recover database until change 675978;
@以resetlogs方式打开数据库
@备份数据库所有数据文件和控制文件
*基于取消恢复
@关闭数据库
@装载数据库
@复制所有备份的数据文件,确定备份文件的SCN值
sql>select file#,change# from v$recover_file;
@执行recover database until cancle
sql>recover database until cancel
@以resetlogs方式打开数据库
@备份所有数据文件和控制文件
*基于备份控制文件的恢复
@通过查看alert文件,确定误操作时间
@关闭数据库
@复制所有备份的数据文件,控制文件
@装载数据库
@执行recover database ..using backup controlfile
sql>recover database until time '2004-09-26 19:51:06'
using backup controlfile
@以resetlogs 方式打开数据库
@备份所有数据文件和控制文件
一直都想搞清楚这个问题,这两天也看了很多资料,从网上收集了一些资料,自己也在理解过程中,
高手认为我收集的资料有问题的还请指教,
对了还一种就是RMAN,楼上所说的..还希望能够具体一些..让我这类菜鸟可以容易学习一点,呵呵.谢谢.