幾種backup小結
來源:程序員人生 發(fā)布時間:2015-06-25 08:14:46 閱讀次數(shù):4161次
[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
下面介紹的是冷備份(完全脫機備份),部份脫機備份,部份聯(lián)機備份,對RMAN和邏輯備份(exp,imp|expdp,impdp)后面的篇幅會觸及。
完全脫機備份:(歸檔和非歸檔都適用,針對全部數(shù)據(jù)庫備份)
這個不用多說了,http://blog.itpub.net/29876893/viewspace⑴607155/這篇說的很清楚
但是這類備份很有很多缺點:
1.要shutdown以后才可以,生產(chǎn)庫是絕對不允許的
2.需要通過操作系統(tǒng)命令拷貝,這個對很大的文件,很影響數(shù)據(jù)庫性能,有時候不是1般的慢!
3.如果數(shù)據(jù)庫的存儲采取ASM,不可以直接拷貝,我們看不到文件系統(tǒng)的分區(qū)。
部份脫機備份:(針對表空間)
我們可以改變表空間的offline,online(需要歸檔)
SQL> select username,default_tablespace from dba_users where username='HR';
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
HR USERS
SQL> alter tablespace users offline;
表空間已更改。
此時拷貝走users下的數(shù)據(jù)文件就好了。
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;
表空間已更改。
固然你也能夠直接把數(shù)據(jù)文件離線:
SQL> alter database datafile 4 offline;
數(shù)據(jù)庫已更改。
SQL> truncate table tt;
表被截斷。
SQL> insert into tt values(1,dbms_flashback.get_system_change_number);
已創(chuàng)建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系統(tǒng)已更改。
SQL> insert into tt values(2,dbms_flashback.get_system_change_number);
已創(chuàng)建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系統(tǒng)已更改。
SQL> insert into tt values(3,dbms_flashback.get_system_change_number);
已創(chuàng)建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系統(tǒng)已更改。
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⑷月 ⑴5 7312279 28⑷月 ⑴5
2 1 440 52428800 512 1 NO CURRENT 7312279 28⑷月 ⑴5 2.8147E+14
3 1 438 52428800 512 1 YES ACTIVE 7312248 28⑷月 ⑴5 7312260 28⑷月 ⑴5
此時我們刪除表空間user里的數(shù)據(jù)文件
此時只能啟動到mount.
具體怎樣恢復參考http://blog.itpub.net/29876893/viewspace⑴607155/
可以先不恢復,把表空間離線,打開數(shù)據(jù)庫,后恢復。
該種備份比較好的是不用shutdown備份表空間,但是我們不能離線system,undo,redo,temp表空間,很大的遺憾:
SQL> alter tablespace system offline;
alter tablespace system offline
*
第 1 行出現(xiàn)毛病:
ORA-01541: 系統(tǒng)表空間沒法脫機; 如有必要請關閉
注意是不能離線當前undo表空間!
SQL> alter tablespace UNDOTBS1 offline;
alter tablespace UNDOTBS1 offline
*
第 1 行出現(xiàn)毛病:
ORA⑶0042: 沒法使還原表空間脫機
如果不是當前使用的undo表空間:
SQL> alter tablespace UNDO_W online;
表空間已更改。
這類方式的缺點還有:
2.需要通過操作系統(tǒng)命令拷貝,這個對很大的文件,很影響數(shù)據(jù)庫性能,有時候不是1般的慢!
3.如果數(shù)據(jù)庫的存儲采取ASM,不可以直接拷貝,我們看不到文件系統(tǒng)的分區(qū)。
部份聯(lián)機備份:這類方式的備份適用于歸檔模式。
oracle做了很大的改進,在聯(lián)機狀態(tài)就能夠備份:
如:
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行。
此時這些文件都不是活動狀態(tài)
SQL> alter tablespace CHAO begin backup;
表空間已更改。
SQL> alter tablespace SYSTEM begin backup;
表空間已更改。
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 ACTIVE 7420181 29⑷月 ⑴5
2 NOT ACTIVE 0
3 NOT ACTIVE 0
5 NOT ACTIVE 0
6 NOT ACTIVE 0
7 ACTIVE 7420021 29⑷月 ⑴5
8 NOT ACTIVE 0
9 NOT ACTIVE 0
11 NOT ACTIVE 0
12 NOT ACTIVE 0
已選擇10行。
此時1號和7號文件處于活動的狀態(tài),并且記錄此時SCN,作為下1次恢復的出發(fā)點!
備份就是直接拷走備份的數(shù)據(jù)文件。
關閉數(shù)據(jù)文件7的活動狀態(tài):
SQL> alter tablespace CHAO end backup;
表空間已更改。
SQL> select * from v$backup where file#=7;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
7 NOT ACTIVE 7420021 29⑷月 ⑴5
如果要完全備份,這樣操作是否是能把人弄瘋!
SQL> alter database begin backup;
alter database begin backup
*
第 1 行出現(xiàn)毛病:
ORA-01146: 沒法啟動聯(lián)機備份 - 文件 1 已在備份中 ORA-01110:
數(shù)據(jù)文件 1: '/u01/app/oracle/oradata/orcl3939/system01.dbf'
SQL> alter tablespace system end backup;
表空間已更改。
這個地方感覺不是太爽!需要關閉之前的熱狀態(tài)!
SQL> alter database begin backup;
數(shù)據(jù)庫已更改。
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 ACTIVE 7420464 29⑷月 ⑴5
2 ACTIVE 7420464 29⑷月 ⑴5
3 ACTIVE 7420464 29⑷月 ⑴5
5 ACTIVE 7420464 29⑷月 ⑴5
6 ACTIVE 7420464 29⑷月 ⑴5
7 ACTIVE 7420464 29⑷月 ⑴5
8 ACTIVE 7420464 29⑷月 ⑴5
9 ACTIVE 7420464 29⑷月 ⑴5
11 ACTIVE 7420464 29⑷月 ⑴5
12 ACTIVE 7420464 29⑷月 ⑴5
已選擇10行。
結束備份的話直接alter database end backup;
這類備份的缺點:
1.會產(chǎn)生大量的redo log,是甚么緣由呢?
SQL> show parameter db_block_size
db_block_size integer 8192
[oracle@localhost ~]$ dumpe2fs /dev/sda1
bash: dumpe2fs: command not found
[oracle@localhost ~]$ su - root
口令:
[root@localhost ~]# dumpe2fs /dev/sda1
Block size: 1024
SQL> select 8*1024/1024 from dual;
8*1024/1024
-----------
8
8個操作系統(tǒng)塊構成了1個數(shù)據(jù)塊:
此時用os命令拷貝這個塊,讀取是依照os塊讀取,但是此時oracle1個事務正在修改這個塊。終究 我們恢復時,oracle辨認不了這個塊 !
oracle為了解決這個問題,只要在熱備份狀態(tài)下的塊,操作這個數(shù)據(jù)塊都會以日志方式記錄下來,所以操作1個塊會多8k日志量。
大概簡述摹擬這個進程:
select * from v$statname where name like '%redo%';統(tǒng)計了很多關于redo的信息,里面有redo size.
SQL> select * from v$sesstat where sid=159;
SQL> select * from v$sesstat where statistic#=169 and sid=159;
可以插入1條數(shù)據(jù),然后看產(chǎn)生多少日志(大概估計)。
然后履行表空間熱備份下:
看下日志量
然后插入相同數(shù)據(jù),查看日志量
感興趣可以自行摹擬。
生活不易,碼農辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈