[oracle@localhost ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
SQL> select * from v$version where rownum=1; BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
下面介绍的是冷备份(完全脱机备份),部分脱机备份,部分联机备份,对于RMAN和逻辑备份(exp,imp|expdp,impdp)后面的篇幅会涉及。
完全脱机备份:(归档和非归档都适用,针对整个
数据库备份)
这个不用多说了,http://blog.itpub.net/29876893/viewspace-1607155/这篇说的很清楚
但是这种备份很有很多缺点:
1.要shutdown之后才可以,生产库是绝对不允许的
2.需要通过操作系统命令拷贝,这个对于很大的文件,很影响数据库性能,有时候不是一般的慢!
3.如果数据库的存储采取ASM,不可以直接拷贝,我们看不到文件系统的分区。
部分脱机备份:(针对表空间)
我们可以改变表空间的offline,online(需要归档)
SQL> select username,default_tablespace from dba_users where username='HR';
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
HR USERS
SQL> alter tablespace users offline;
表空间已更改。
此时拷贝走users下的数据文件就行了。
SQL> select file_id,tablespace_name,online_status from dba_data_files where tablespace_name='USERS';
FILE_ID TABLESPACE_NAME ONLINE_
---------- ------------------------------ -------
4 USERS OFFLINE
此时把users online:
SQL> alter tablespace users online;
表空间已更改。
当然你也可以直接把数据文件离线:
SQL> alter database datafile 4 offline;
数据库已更改。
SQL> truncate table tt; 表被截断。
SQL> insert into tt values(1,dbms_flashback.get_system_change_number);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into tt values(2,dbms_flashback.get_system_change_number);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into tt values(3,dbms_flashback.get_system_change_number);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------- ------------ --------------
1 1 439 52428800 512 1 YES ACTIVE 7312260 28-4月 -15 7312279 28-4月 -15
2 1 440 52428800 512 1 NO CURRENT 7312279 28-4月 -15 2.8147E+14
3 1 438 52428800 512 1 YES ACTIVE 7312248 28-4月 -15 7312260 28-4月 -15
此时我们删除表空间user里的数据文件
此时只能启动到mount.
具体怎么恢复参考http://blog.itpub.net/29876893/viewspace-1607155/
可以先不恢复,把表空间离线,打开数据库,后恢复。
该种备份比较好的是不用shutdown备份表空间,但是我们不能离线system,undo,redo,temp表空间,很大的遗憾:
SQL> alter tablespace system offline;
alter tablespace system offline
*
第 1 行出现错误:
ORA-01541: 系统表空间无法脱机; 如有必要请关闭
注意是不能离线当前undo表空间!
SQL> alter tablespace UNDOTBS1 offline;
alter tablespace UNDOTBS1 offline
*
第 1 行出现错误:
ORA-30042: 无法使还原表空间脱机
如果不是当前使用的undo表空间:
SQL> alter tablespace UNDO_W online;
表空间已更改。
这种方式的缺点还有:
2.需要通过操作系统命令拷贝,这个对于很大的文件,很影响数据库性能,有时候不是一般的慢!
3.如果数据库的存储采取ASM,不可以直接拷贝,我们看不到文件系统的分区。
部分联机备份:这种方式的备份适用于归档模式。
oracle做了很大的改进,在联机状态就可以备份:
如:
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 0
5 NOT ACTIVE 0
6 NOT ACTIVE 0
7 NOT ACTIVE 0
8 NOT ACTIVE 0
9 NOT ACTIVE 0
11 NOT ACTIVE 0
12 NOT ACTIVE 0
已选择10行。
此时这些文件都不是活动状态
SQL> alter tablespace CHAO begin backup;
表空间已更改。
SQL> alter tablespace SYSTEM begin backup;
表空间已更改。
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIM |