第一篇:詳談數據庫的備份方案與策略
關于SQL SERVER數據庫 的維護和備份方案
/ 38
目錄
1、引言.............................................................................................................................................4
1.1、為什么要進行數據備份..............................................................................................4
2、數據庫的備份和還原.................................................................................................................4
2.1、幾種常見的SQL Server數據庫備份...........................................................................4 2.2、數據庫的還原.................................................................................................................7 2.3、升級...............................................................................................................................11
3、SQL Server 維護計劃實現數據庫備份...........................................1錯誤!未定義書簽。
3.1、場景設計....................................................................................1錯誤!未定義書簽。3.2、實戰操作.......................................................................................................................14
4、SQL Server 維護計劃實現數據庫備份(策略實戰方案)................................................17 4.1、最佳實踐.......................................................................................................................26 4.2、注意事項.......................................................................................................................31
5、SQL Server 數據庫最小宕機遷移方案................................................................................36 5.1、目的...............................................................................................................................36 5.2、分析與設計思路...........................................................................................................35 5.3、參考腳本2.3、升級....................................................................................................35
參考資料:http://gaizai.cnblogs.com/
SQL Server 2008編程入門經典(第3版)
/ 38
引言
1.1為什么要進行數據備份
在信息化高速發展的今天數據在人們的生活中扮演著越來越重要的角色,信息化滲透著教育、科研、醫療等等各個領域,所以為防止數據丟失的第一道防線是實行數據備份,備份就像鍛煉身體,雖然重要,但卻常常被忽視,數據備份觀念在一些企業中,甚至是在網絡管理員中仍然得不到足夠的重視。當網站更新或添加內容時,如果實行了數據備份,那么即使出現操作失誤,把有用的資訊或者重要的內容刪掉了,那么也不至于讓之前花了很長時間辛辛苦苦建立起來的數據付之東流,只要及時地通過系統備份和恢復方案就可以實現數據的安全性和可靠性了;又或者是企業網站發生災難,原始數據丟失或遭到破壞,利用備份數據就可以把原始數據恢復出來,使系統能夠繼續正常工作。可見,數據備份是何等的重要,數據備份是為了以后能夠順利地將被破壞了或丟失了的數據庫安全地恢復的基礎性工作,可以這么說,沒有數據庫的備份,就沒有數據庫的恢復,企業應當把數據備份和恢復的工作列為一項不可忽視的系統工作,為其網站選擇相應的備份設備和技術,進行經濟可靠的數據備份,從而避免可能發生的重大損失。
2、SQL Server 備份和還原
2.1、幾種常見的SQL Server數據庫備份 2.1.1、完全備份
/ 38 備份全部選中的文件夾,并不依賴文件的存檔屬性來確定備份那些文件。(在備份過程中,任何現有的標記都被清除,每個文件都被標記為已備份,換言之,清除存檔屬性)。完全備份也叫完整備份。2.1.2、差異備份
差異備份是針對完全備份:備份上一次的完全備份后發生變化的所有文件。(差異備份過程中,只備份有標記的那些選中的文件和文件夾。它不清除標記,即:備份后不標記為已備份文件,換言之,不清除存檔屬性)。2.1.3、增量備份
增量備份是針對于上一次備份(無論是哪種備份):備份上一次備份后,所有發生變化的文件。(增量備份過程中,只備份有標記的選中的文件和文件夾,它清除標記,即:備份后標記文件,換言之,清除存檔屬性。)2.1.4、事務日志備份
在特定事務日志備份之前執行的完整數據庫備份和上次差異備份(如果有)。在完整數據庫備份之后執行的所有事務日志備份或在特定事務日志備份之前執行的差異備份(如果您還原了差異備份)。如果你設置了恢復模式為【簡單】,你將無法使用【事務日志】備份。SQL Server 2000 和 SQL Server 2005: 創建事務日志備份,您必須使用完整恢復或大容量日志記錄恢復模型。2.1.5部分備份
通過指定 READ_WRITE_FILEGROUPS 創建的備份稱為“部分備份”。在簡單恢復模式下,只允許對只讀文件組執行文件組備份。還原的數據備份類型: 4 / 38 數據庫備份、部分備份或文件備份。對于數據庫備份或部分備份,日志備份序列必須從數據庫備份或部分備份的結尾處開始延續。對于一組文件備份,日志備份序列必須從整組文件備份的開頭開始延續。2.1.6文件備份
“文件備份”包含一個或多個文件(或文件組)中的所有數據。2.1.7日志鏈
連續的日志備份序列稱為“日志鏈”。日志鏈從數據庫的完整備份開始。通常,僅當第一次備份數據庫時,或者將恢復模式從簡單恢復模式切換到完整恢復模式或大容量日志恢復模式之后,才會開始一個新的日志鏈。除非在創建完整數據庫備份時選擇覆蓋現有備份集,否則現有的日志鏈將保持不變。在該日志鏈保持不變的情況下,便可從媒體集中的任何完整數據庫備份還原數據庫,然后再還原相應恢復點之前的所有后續日志備份。恢復點可以是上次日志備份的結尾,也可以是任何日志備份中的特定恢復點。2.1.8一個備份方案例子
某個站點在星期天晚上執行完整數據庫備份。在白天每隔 4 小時制作一個事務日志備份集,并用當天的備份重寫頭一天的備份。每晚則進行差異備份。如果數據庫的某個數據磁盤在星期四上午 9:12 出現故障,則該站點可以:
1)備份當前事務日志;(已經出現故障了,如何備份當前事務日志?)2)還原從星期天晚上開始的數據庫備份;
3)還原從星期三晚上開始的差異備份,將數據庫前滾到這一時刻;
/ 38 4)還原從早上 4 點到 8 點的事務日志備份,以將數據庫前滾到早上 8 點;
5)還原故障之后的日志備份。這將使數據庫前滾到故障發生的那一刻。2.2、數據庫的還原
創建一個叫TestBackup的數據庫,創建一張叫Table1的表,這個時候進行一次完整備份,備份文件為:TestBackupDB-full.bak;接著創建表Table2后進行差異備份,備份文件為:TestBackupDB-diff.bak;接著創建表Table3后進行事務日志備份(如果數據庫設置了恢復模式為【簡單】,那么在備份類型選項中將看不到【事務日志】),備份文件為:TestBackupDB-log.bak;
創建一個叫TestBackup2的數據庫,用于測試TestBackup數據庫的備份文件的還原。
(圖1:創建庫結構)
/ 38
(圖2:備份類型)
下面我們就可以對三個備份文件:TestBackupDB-full.bak、TestBackupDB-diff.bak、TestBackupDB-log.bak進行還原:
步驟1:還原完整備份文件TestBackupDB-full.bak,選項如圖
4、圖5所示,還原成功后數據列表就會如圖6所示,這是因為恢復狀態選項:不對數據庫執行任何操作,不回滾未提交的事務。可以還原其他事務日志。(RESTORE WITH NORECOVERY)
(圖3:進入SSMS還原)
/ 38
(圖4:還原常規)
(圖5:還原選項)
/ 38
(圖6:完整備份還原)
步驟2:還原差異備份文件TestBackupDB-diff.bak,操作如步驟1所示,這個時候的數據庫還是跟圖6的狀態一樣的。
步驟3:還原事務日志備份文件TestBackupDB-log.bak,如圖7進入事務日志的還原操作界面;看圖8的選項中有指定事務的時間進行還原(還原過程中的恢復狀態都是默認為RESTORE WITH RECOVERY,所以這里沒有提及這個選項)。還原后的TestBackup2數據庫,還原之后的數據庫TestBackup2如圖9所示。
(圖7:進入事務日志)
/ 38
(圖8:事務日志)
(圖9:還原后的數據庫)
/ 38 2.3、升級
通常來說文章寫到這里就應該結束了,但是很幸運,再給你介紹一下如何在對表進行分區后的還原操作,從上面的操作來看只包括了mdf和ldf文件,但如果多了幾個ndf文件,這些還原又一樣嗎?所以我稱這部分的內容為升級。
情景一:如果本來就有對應的分區文件的,只要在還原的時候修改【還原為】的文件名就可以進行還原了。
情景二:如果剛剛新建了分區文件組和文件,這個時候接著還原備份就會出現圖10的錯誤(不知道是不是在SQL Server 2005的問題);要解決這個問題有兩個方法,第一個:重啟數據庫服務再還原;第二個:設置數據庫的【限制訪問】設置為【Single】;
(圖10:錯誤)
/ 38
3、如何實現數據庫備份 3.1、場景設計
假設我們的數據庫不是很大,但是我們的數據會比較重要,大概一天一個備份就能滿足我們的業務需要,那我們應該如何設計我們的備份方案呢?
星期天晚上02:00做一次數據庫的完全備份,其它時間星期一至星期六晚上02:00做一次差異備份,基本邏輯如下圖所示:
(圖:數據庫備份文件生成邏輯)
Tips:
/ 38 1.如果你的數據庫比較大,而且流數據(就是一些記錄性的流水數據)比較多,我們的做法是把這些大表分離出一個新的數據庫(縱向切割數據庫),這樣接下來的問題,這篇文章就可以解決了;
2.如果無法把流數據分離出數據庫,那么可以考慮表分區,分區之后再對其它表進行數據備份(主分區備份);這些備份是無法使用差異備份了,每次都只能使用完全備份,而且還原的時候表分區是不可以用的,只能修改表名之后再創建新表。詳情參考:SQL Server 2008編程入門經典(第3版)
3.如果一天一次的備份滿足不了業務上的需求,那么可以考慮發布訂閱方案,在兩臺機器上進行事務復制,可以調整復制的頻率,加強數據的安全性。
3.2、實戰操作
1.數據庫-> 【管理】-> 【維護計劃】-> 【新建維護計劃】;
/ 38
(圖1)
2.勾選【備份數據庫(完整)】和【備份數據庫(差異)】;
/ 38
(圖2)
3.設置 完整備份 文件的路徑和備份文件的擴展名;注意特定數據庫的選擇;
/ 38
(圖3)
4.填寫 完整備份 作業計劃的名稱,執行間隔勾選星期日,設置執行時間;
/ 38
(圖4)
5.設置 差異備份 文件的路徑和備份文件的擴展名;注意特定數據庫的選擇;
/ 38
(圖5)
6.填寫 差異備份 作業計劃的名稱,執行間隔勾選除星期日之外的日期,設置執行時間;
/ 38
(圖6)
7.這就生成 完整備份 與 差異備份 的子計劃了,(圖7)
/ 38 8.在完整備份的設計界面中,從左邊拖拉一個【清除歷史記錄】的控件到右邊,并雙擊進行下圖的設置;
(圖8)
9.從左邊拖拉一個【清除維護】的控件到右邊,并雙擊進行下圖的設置,這里需要設置 完整備份 的路徑和文件的擴展名;
/ 38
(圖9)
10.在步驟上加上箭頭形成 完全備份 作業的流程圖;
/ 38
(圖10)
11.在差異備份的設計界面中,從左邊拖拉一個【清除歷史記錄】的控件到右邊,并雙擊進行下圖的設置;
(圖11)
/ 38 12.從左邊拖拉一個【清除維護】的控件到右邊,并雙擊進行下圖的設置,這里需要設置 差異備份 的路徑和文件的擴展名;
(圖12)
13.在步驟上加上箭頭形成 差異備份 作業的流程圖;
/ 38
(圖13)
14.在維護計劃下生成Ant_Backup,在代理中生成 完整備份與差異備份的作業;
(圖14)
/ 38
4、SQL Server 維護計劃實現數據庫備份(策略實戰方案)
上面文章使用完整備份和差異備份基本上能解決數據庫備份的問題,但是為了保障數據更加安全,我們需要再次完善我們的備份計劃;
下面這篇文章主要加入了日志備份,并對設計備份的頻率和設計命名規范等問題進行實戰; 4.1、最佳實踐 4.1.1、備份計劃
1)每周星期日的2:00:00執行數據庫的完整備份;
2)每周星期一至星期六每天的2:00:00執行數據庫的差異備份; 3)每天在8:00:00和23:59:59之間、每1小時執行數據庫的日志備份; 4)每個月的最后一個星期日的1:00:00執行數據庫的完整備份; 4.1.2、計劃講解
1.根據備份文件的不同,我創建了4個文件用于存放備份文件:(Medusa是數據庫名)
1)Medusa_Full:用于存放完整備份文件; 2)Medusa_Diff:用于存放差異備份文件; 3)Medusa_Log:用于存放日志備份文件;
/ 38 4)Medusa_Save:用于存放保留備份文件;
上面的4個文件夾與備份計劃的4個步驟是一 一對應的;
(Figure1:文件夾命名規范)
2.創建名為Medusa的維護計劃,并創建如下圖的4個子計劃:
(Figure2:子計劃列表)
3.設置【清除歷史記錄】、【清除維護】的保留時間:
1)Subplan_Full:保留完整備份文件4周;(1個*4周=4個文件)2)Subplan_Diff:保留差異備份文件2周;(6個*2周=12個文件)3)Subplan_Log:保留日志備份文件1周;(16個*7天=112個文件)4)Subplan_Save:保留備份文件1年;(1個*12月=12個文件)
上面的時間策略需要根據數據庫的安全級別、磁盤空間、業務特性等情況共同解決的,你可以根據的實際情況進行修改和調整;
/ 38 4.下面的Figure3、Figure4、Figure5、Figure6是具體設置的效果圖:
(Figure3:子計劃Full)
(Figure4:子計劃Diff)
/ 38
(Figure5:子計劃Log)
(Figure6:子計劃Save)
5.保存維護計劃后,在SQL Server代理的作業中會生成Figure7的作業列表:
/ 38
(Figure7:Job列表)
6.執行一段時間后,在各個文件夾中會生成一系列的文件:
(Figure8:Full文件)
(Figure9:Diff文件)
/ 38
(Figure10:Log文件)
(Figure11:Save文件)
7.有了這些文件之后,我們可以雖然還原到某個時間點上的數據,數據的差異為一個小時,例如你是在2012-12-11的15:48:00分誤操作了數據庫,我能回滾到最接近這個時間的是:2012-12-11的15:00:00
(Figure12:還原完整備份文件)
/ 38
(Figure13:還原差異、日志備份文件)
在使用SSMS的還原的時候,系統會幫你找到最近的備份文件,并且進行了勾選,要完成上面的還原,根據我們之前的備份計劃,我們需要文件:
1)完整備份文件:Barfoo.Medusa_backup_2012_12_09_020005_0612500.bak 2)差異備份文件:Barfoo.Medusa_backup_2012_12_11_020005_8354977.bak 3)日志備份文件:
Barfoo.Medusa_backup_2012_12_11_080005_4808937.trn Barfoo.Medusa_backup_2012_12_11_090005_4816881.trn Barfoo.Medusa_backup_2012_12_11_100005_6543553.trn Barfoo.Medusa_backup_2012_12_11_110005_7645233.trn Barfoo.Medusa_backup_2012_12_11_120005_8434417.trn Barfoo.Medusa_backup_2012_12_11_130004_9379977.trn 31 / 38 Barfoo.Medusa_backup_2012_12_11_140005_2044137.trn Barfoo.Medusa_backup_2012_12_11_150005_2208329.trn 還原的步驟就是先還原完整備份文件,接著還原差異備份文件,再依次執行日志備份文件,這樣就能回滾到你想要的時間點:2012-12-11的15:00 4.2、注意事項
1.備份計劃中“每天在8:00:00和23:59:59之間、每1小時執行數據庫的日志備份”很多人會問:這中間相差8個小時的數據不做日志備份呢?其實我是這樣考慮的,在凌晨的時候,大部分的情況這段時間是在跑定時器處理數據,如果不是程序有BUG,一般不會造成數據錯誤需要恢復,而且這個時候用戶操作頁面也不頻繁(個人認為更多數據誤操作是因為人為操作不當引起的),你可以根據自己的業務情況做些調整;
2.備份計劃中“每個月的最后一個星期日的1:00:00執行數據庫的完整備份”,這樣做的目的是盡量不影響全備份又能保留一份完整的備份文件,如果需要更加嚴謹一點,你可以把它換成“僅復制備份(COPY_ONLY)”,這需要在維護計劃中使用T-SQL進行備份,這就可以完全不影響日志鏈; 3.維護計劃的可以通過T-SQL腳本生成嘛?
sp_add_maintenance_plan sp_delete_maintenance_plan_db sp_add_maintenance_plan_db sp_delete_maintenance_plan_job 32 / 38 sp_add_maintenance_plan_job sp_help_maintenance_plan sp_delete_maintenance_plan
5、SQL Server 數據庫最小宕機遷移方案 5.1、目的
在做SQL Server數據庫維護的時候,當上司要求我們把幾十G的數據文件搬動到其它服務器,并且要求最小宕機時間的時候,我們有沒什么方案可以做到這些要求呢?
在這里我們假設這兩臺機器并不是在一個機房上,這樣看起來我們的解決方案才更有意義,如果你那么好運這兩臺機器在同一個局域網,那么恭喜你,你可以多很多的方案可以做到。5.2、分析與設計思路
其實我們假設的環境有兩個特點:第一個是數據庫文件比較大;第二個就是我們的傳送文件的速度可能會比較慢。也許這傳送速度我們是沒有辦法了,但是我們可以就從文件的大小這個問題出發,結合SQL Server的特性,這樣就有了下面的解決方案了。
為了使宕機時間最短,我們這里使用了完整備份和差異備份來遷移數據庫,在白天的時候對需要遷移的數據庫進行一次完整備份(XXX_full.bak),并把備份文件拷貝(這里可以使用FTP軟件進行斷點續傳)到目標服務器進行還原,33 / 38 等到下班時間之后再進行一次差異備份(XXX_diff.bak),再把這個差異備份拷貝到目標服務器,在完整還原的基礎上再進行差異還原。
這里的宕機時間 = 差異備份時間 + 傳送差異備份文件時間 + 還原差異備份文件時間,這宕機時間是不是讓你感覺這時間很短呢? 5.3、參考腳本
注意修改下面腳本中數據庫的名稱,還有絕對路徑。
--1:完整備份
declare @dbname varchar(100)declare @sql nvarchar(max)set @dbname = 'DataBaseName' set @sql = '--'+@dbname+'_full
BACKUP DATABASE ['+@dbname+']
TO DISK = ''D:DBBackup'+@dbname+'_full.bak'' WITH NOFORMAT, NOINIT, NAME = '''+@dbname+'-完整數據庫備份'',SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO' print @sql
--生成的SQL 34 / 38--DataBaseName_full
BACKUP DATABASE [DataBaseName]
TO
DISK = 'D:DBBackupDataBaseName_full.bak'
WITH NOFORMAT, NOINIT, NAME = 'DataBaseName-完整數據庫備份',SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
--2:完整備份還原
declare @dbname varchar(100)declare @sql nvarchar(max)set @dbname = 'DataBaseName' set @sql = '--RESTORE '+@dbname+'_full RESTORE DATABASE ['+@dbname+']
FROM DISK = ''D:DBBackup'+@dbname+'_full.bak'' WITH FILE = 1,MOVE N''DataBase_Name'' TO N''D:DataBase'+@dbname+'.mdf'',MOVE N''DataBase_Name_log'' TO N''D:DataBase'+@dbname+'_log.ldf'',NORECOVERY, NOUNLOAD, REPLACE, STATS = 10 35 / 38 GO' print @sql
--生成的SQL--RESTORE DataBaseName_full
RESTORE DATABASE [DataBaseName]
FROM
DISK = 'D:DBBackupDataBaseName_full.bak'
WITH
FILE = 1,MOVE N'DataBase_Name' TO N'D:DataBaseDataBaseName.mdf',MOVE N'DataBase_Name_log' TO N'D:DataBaseDataBaseName_log.ldf',NORECOVERY, NOUNLOAD, REPLACE, STATS = 10 GO
--3:差異備份
declare @dbname varchar(100)declare @sql nvarchar(max)set @dbname = 'DataBaseName' set @sql = '--'+@dbname+'_diff BACKUP DATABASE ['+@dbname+']
/ 38 TO DISK = N''D:DBBackup'+@dbname+'_diff.bak'' WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'''+@dbname+'-差異數據庫備份'',SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO '
print @sql
--生成的SQL--DataBaseName_diff
BACKUP DATABASE [DataBaseName]
TO
DISK = N'D:DBBackupDataBaseName_diff.bak'
WITH
DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'DataBaseName-差異數據庫備份',SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
--4:差異備份還原
declare @dbname varchar(100)declare @sql nvarchar(max)set @dbname = 'DataBaseName'
/ 38 set @sql = '--RESTORE '+@dbname+'_full RESTORE DATABASE ['+@dbname+']
FROM DISK = ''D:DBBackup'+@dbname+'_diff.bak'' WITH FILE = 1,NOUNLOAD, STATS = 10 GO' print @sql
--生成的SQL--RESTORE DataBaseName_full
RESTORE DATABASE [DataBaseName]
FROM
DISK = 'D:DBBackupDataBaseName_diff.bak'
WITH
FILE = 1,NOUNLOAD, STATS = 10 GO
/ 38
第二篇:數據庫備份方案
1、完全備份(Full Backup)
備份全部選中的文件夾,并不依賴文件的存檔屬性來確定備份那些文件。在備份過程中,任何現有的標記都被清除,每個文件都被標記為已備份。換言之,清除存檔屬性。
完全備份就是指對某一個時間點上的所有數據或應用進行的一個完全拷貝。實際應用中就是用一盤磁帶對整個系統進行完全備份,包括其中的系統和所有數據。這種備份方式最大的好處就是只要用一盤磁帶,就可以恢復丟失的數據。因此大大加快了系統或數據的恢復時間。然而它的不足之處在于,各個全備份磁帶中的備份數據存在大量的重復信息;另外,由于每次需要備份的數據量相當大,因此備份所需時間較長。
2、差異備份(Differential Backup)
備份自上一次完全備份之后有變化的數據。差異備份過程中,只備份有標記的那些選中的文件和文件夾。它不清除標記,也即備份后不標記為已備份文件。換言之,不清除存檔屬性。
差異備份是指在一次全備份后到進行差異備份的這段時間內,對那些增加或者修改文件的備份。在進行恢復時,我們只需對第一次全備份和最后一次差異備份進行恢復。差異備份在避免了另外兩種備份策略缺陷的同時,又具備了它們各自的優點。首先,它具有了增量備份需要時間短、節省磁盤空間的優勢;其次,它又具有了全備份恢復所需磁帶少、恢復時間短的特點。系統管理員只需要兩盤磁帶,即全備份磁帶與災難發生前一天的差異備份磁帶,就可以將系統恢復。
3、增量備份(Incremental Backup)
備份自上一次備份(包含完全備份、差異備份、增量備份)之后有變化的數據。增量備份過程中,只備份有標記的選中的文件和文件夾,它清除標記,既:備份后標記文件,換言之,清除存檔屬性。
增量備份是指在一次全備份或上一次增量備份后,以后每次的備份只需備份與前一次相比增加和者被修改的文件。這就意味著,第一次增量備份的對象是進行全備后所產生的增加和修改的文件;第二次增量備份的對象是進行第一次增量備份后所產生的增加和修改的文件,如此類推。這種備份方式最顯著的優點就是:沒有重復的備份數據,因此備份的數據量不大,備份所需的時間很短。但增量備份的數據恢復是比較麻煩的。您必須具有上一次全備份和所有增量備份磁帶(一旦丟失或損壞其中的一盤磁帶,就會造成恢復的失敗),并且它們必須沿著從全備份到依次增量備份的時間順序逐個反推恢復,因此這就極大地延長了恢復時間。
第三篇:Sybase數據庫備份方案
Sybase數據庫備份方案
Sybase數據備份方案,Sybase數據庫產品自從1987年問世以來,它的客戶機/服務器(client/server)工作模式、分布處理的基礎體系結構、完善的安全保密性能、高速快捷的運行方式、多平臺跨操作系統的廣泛應用等優點,迅速被IT界接受并推廣應用。
我們作為金融業的用戶,也在1995年開始使用Sybase10版本。在具體的使用中,發現集中式的數據管理有其優點,就是數據風險范圍大為縮小,但是作為Sybase的服務器一端,數據風險比較集中,如何做好數據庫的數據備份,成為至關重要的問題。
在實際應用中,我們總結出了兩種全量備份方案:
一、Sybase數據備份方案之使用Sybase的BackupServer(備份服務器),做Dump備份
轉儲數據庫(Dumpdatabase),就是為整個數據庫(包括數據、表結構、觸發器、游標、存儲過程、事務日志等)做一次物理備份。轉儲數據庫時,系統自動執行一次checkpoint,即將日志和數據從緩沖區拷貝到硬盤(只拷貝臟頁),把已被分配的頁(日志和數據)轉儲到設備。命令格式為:
dumpdatabase數據庫名to設備文件名with參數
如果備份到硬盤的文件上,可以不預先估算備份文件的大小,只要硬盤有足夠的存儲空間就可以。如果是備份到dds磁帶上,那么就要估算一下備份后的大小,90米的dds磁帶壓縮存儲空間為4G,120米的磁帶壓縮存儲空間為8G,如果數據庫的備份文件超過了這個尺寸,就要考慮多文件轉儲,使用stripe參數。命令格式為:
dumpdatabase數據庫名to設備文件名1 stripeon設備文件名2 stripeon設備文件名3…… with參數 這種數據備份方式是將整個數據庫的運行環境完整的復制一份,包括數據庫的臟頁和碎片,在使用load命令恢復時,只能恢復到同樣大小的數據庫中(數據和日志的大小都只能和原來完全一致),適用于在每天的日終營業網點下班后的日常備份。優點是數據庫完整無誤,缺點是不能直接查看備份內容。
二、Sybase數據備份方案之分數據結構和數據記錄做兩次備份
在一般情況下,生產機的數據庫都比較龐大,而實驗機則相對較小,難以在實驗環境中以load命令恢復工作機的內容。所以,在工作實踐中,我們摸索出了第二種全量備份方案。
1、數據結構備份
在windows平臺的SybaseSQLServerManager(數據庫管理)平臺中選擇ServeràGenerateddl則產生整個數據庫服務器的所有信息,如果選擇databaseàgenerateddl則產生所選定數據庫的信息,以master庫為例,產生的文件主要包括:config.ddl(配置)、devices.ddl(設備)、database.ddl(數據庫)、logins.ddl(用戶)、remote.ddl(遠程)、cache.ddl(緩沖)、segment.ddl()、group.ddl(用戶組)、user.ddl(用戶)、default.ddl(確省)、rule.ddl(規則)、udt.ddl、table.ddl(表)、view.ddl(視圖)、proc.ddl(存儲過程)、triger.ddl(觸發器)。
2、數據記錄備份
將數據庫各表以Sybase自代的bcp(bulkcopy)工具的方式導成一定格式的文本文件,命令格式:
bcp表名out路徑名文件名-c-t分隔符-u(用戶名)-p(密碼)-S(服務器名)如果將一個數據庫中的所有表都做一個bcp備份,就需要針對每一個表都做一次bcp,在一般情況下,一個數據庫有100多個表,工作量比較大。可以利用數據庫中的系統表信息做一個bcp備份腳本。原理是每一個用戶表在系統表中都有信息記載,可以通過isql語句查詢得到。現舉一例說明: 1)、先編輯一個名為mkbcpout.sql的文件,內容如下: select“echobcp'”+name+“out……………………'
”+“bcp”+name+“out./+”name+“.table-c-t'|'-Uuser-Ppassword-SSERVER”fromsysobjectswheretype='U' go 2)、執行isql命令,以此文件作為輸入,執行結果輸出到另外一個文件里: isql-Uuser-Ppassword-Sserver-Imkbcpout.sql-Obcpout 3)、對bcppout文件稍微修改,增加可執行權限 chmod+xbcpout 4)、執行bcpout,導出數據文本./bcpout
3、數據庫恢復
業務生產機可能為小型機,而實驗開發環境的硬件環境為PCserver,安裝好winnt或SCOunix下的Sybase服務器后,根據需要創建空間足夠大的數據庫和tempdb(系統臨時數據庫),創建數據庫用戶,并將其更改為此數據庫的所有者,要注意兩點:1)此數據庫允許bcp拷貝,2)此數據庫自動清除log。命令格式為:
1>sp_dboptiondatabasedbname,“selectinto/bulkcopy”,true 2>go 1>sp_dboptiondatabasename,“trunclogonchkpt”,true 2>go 上述兩個配置可能與生產機的配置不同。
然后以新創建的數據庫用戶登錄,導入數據結構,注意要首先導入表結構,然后才是存儲過程、觸發器等等。命令格式:
1、isql-Uusername-Ppassword-Itable.ddl-oerror.log.table
2、isql-Uusername-Ppassword-Iproc.ddl-oerror.log.proc ……
為了提高bcp導入數據的速度,需要將比較大的表的索引和主鍵刪除,否則的話,每bcp進一條數據,數據庫都自動寫一條log日志,記載此數據的上一條和下一條記錄,確定本記錄在此表中的準確位置,一是影響bcp速度,二是數據庫的log飛速膨脹。數據庫的自動清除log功能只有在一個事務結束后才起作用。準備工作做完后,開始倒入數據記錄。使用類似做bcpout的方法做一個bcpin的腳本,然后執行:./bcpin|teeerror.bcpin 使用tee管道輸出的目的是讓計算機完整記錄下倒入過程,自動存入error.bcpin文件中,待倒入結束后,我們只需要檢查日志文件,不需要一直緊盯著計算機屏幕。所有工作做完之后,不要忘記重新將刪除的主鍵和索引建上。
如果有現成的數據庫,只需要單純地導入數據記錄,則首先將數據庫中所有用戶表(也就是所有type=“U”的表)清空,命令格式: 1>truncatetabletablename 2>go 當然最好也是利用做bcpout腳本的做一個truncate腳本,通過執行此腳本將所有用戶表清空。然后的數據導入、處理索引和主鍵的過程與上面類似。
三、Sybase數據備份方案之利用做bcp備份腳本的方法做數據庫碎片整理 Sybase數據庫作為聯機事務處理應用服務器,每天應用程序都對數據庫做大量的插入、修改和刪除等操作,不可避免的在數據庫的物理存儲介質上留下頁碎片和擴展單元碎片,從而影響數據庫的存儲效率和運行速度。具體表現為:業務繁忙時出現死鎖(deadlock),數據庫的輸入/輸出資源被大量占用,業務處理速度慢。其解決辦法是:
1、清空數據庫中的所有表,命令格式:
isql-Uusername-Ppassword-Itruncate.sql-oerror.truncate
2、刪除所有表的索引和主鍵
isql-Uusername-Ppassword-Idropindex.sql-oerror.dropindex
3、導入數據./bcpin
4、添加索引和主鍵
isql-Uusername-Ppassword-Iaddindex.sql-oerror.addindex
5、更新數據庫狀態
1>updatestatisticstablename 2>go 上述操作都是針對數據庫中的所有用戶表進行的,利用做bcp備份腳本的方法做出相應的腳本,使繁瑣的數據庫維護變得簡便易行,還克服了直接使用isql語句操作風險大、沒有操作日志的毛病。以上就是對Sybase數據備份方案的簡單介紹。
第四篇:oracle數據庫自動備份方案
1.目的
編寫本文檔的目的為實現ORACLE數據庫的自動備份,為不動產數據增加一份數據安全按保障。
2.軟件環境
數據庫服務器:oracle 11g atabase x64 v11.2.0.4.0 客戶端:Oracle client x64 v11.2.0.4.0 注意:數據庫服務器和客戶端版本必須保持一致,否則會出現無法預知的錯誤。
3.實施方案
3.1.編寫數據庫自動備份腳本
腳本內容如下,將文件存儲為oraclebackup.bat:
@echo off echo 刪除10天前的備分文件和日志
forfiles /p “D:oraclebackup” /m *.dmp /d-10 /c “cmd /c del @path” forfiles /p “D:oraclebackup” /m *.log /d-10 /c “cmd /c del @path” echo 正在備份 oracle 數據庫,請稍等……
exp BDCDJ_CP/BDCDJ_CP@10.6.161.70/orcl file=D:/oraclebackup/BDCDJ_CP%date:~0,4%%date:~5,2%%date:~8,2%.dmp log=D:/oraclebackup/BDCDJ_CP%date:~0,4%%date:~5,2%%date:~8,2%.log echo 任務完成!注意:
1)修改數據庫連接用戶名、密碼、數據庫地址和實例名
2)修改備份文件存儲地址,以上腳本存儲位置為D:oraclebackup 3.2.新建任務計劃
1)打開任務計劃程序
2)打開創建基本任務,輸入任務名稱、選擇任務執行時間和執行的腳本,完成任務計劃創建。
第五篇:數據庫備份和恢復方案及步驟(最終版)
操作系統:GNU/Linux 數據庫管理系統:Oracle10g
一、安裝Recovery Catalog 1,用dbca創建一個DATABASE catdb,用于存放recovery catalog data [oracle@localhost ~]$dbca 2,在catdb中創建一個名為rcat_ts的表空間作為用戶rman的默認表空間
[oracle@localhost ~]$sqlplus sys/oracle@catdb as sysdba SQL> create tablespace rcat_ts;SQL> create user rman identified by oracle temporary tablespace temp Default tablespace rcat_ts quota unlimited on rcat_ts;3,授予catlog所有者rman recovery_catalog_owner角色,該角色提供給用戶所有查詢和維護recovery catalog所必需的權限
SQL> grant connect,resource,recovery_catalog_owner to rman;4,啟動rman,以catalog所有者rman登錄
[oracle@localhost ~]$rman catalog rman/oracle@catdb RMAN> create catalog tablespace rcat_ts;5,用rman同時連接到target數據庫、catalog數據庫,在新建的recovery catalog中注冊target數據庫
[oracle@localhost ~]$rman target sys/oracle@orcl catalog rman/oracle@catdb RMAN> register database;6,察看已在recovery catalog中注冊的target數據庫
[oracle@localhost ~]$sqlplus rman/oracle@catdb SQL>select * from db;
二、配置RMAN
1,同時連接target數據庫和recovery catalog數據庫
[oracle@localhost ~]$rman target sys/oracle@orcl catalog rman/oracle@catdb 2,RMAN> show all(檢查配置)
configure default device type to disk(設置默認的備份的設備為磁盤)
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;(設置備份的并行級別)
configure channel 1 device type disk format '/home/new/backup_%U'(設置備份文件格式)
configure channel 2 device type disk format '/home/oracle/backup_%U'(設置備份文件格式)
configure controlfile autobackup on(打開控制文件的自動備份)
configure controlfile autobackup format for device type disk to '/home/new/ctl_%F'(設置控制文件備份格式)
三.備份測試
備份全庫
1,同時連接target數據庫和recovery catalog數據庫
[oracle@localhost ~]$rman target sys/oracle@orcl catalog rman/oracle@catdb 2,RMAN> backup database plus archivelog delete input;3,連接target數據庫
[oracle@localhost ~]$sqlplus sys/oracle@orcl as sysdba SQL> conn hr/hr;SQL> select salary from employees where employee_id=157;SQL> update employees set salary =2000 where employee_id=157;SQL> commit;SQL> select salary from employees where employee_id=157;
四.恢復測試
復原及恢復全庫 1,連接target數據庫
[oracle@localhost ~]$sqlplus sys/oracle@orcl as sysdba 2,把target數據庫先關閉,然后啟動到mount狀態 SQL> shutdown immediate;SQL> startup mount;3,復原及恢復全庫
RMAN> restore database
channel ORA_DISK_1: restore complete, elapsed time: 00:05:10 RMAN> recover database media recovery complete, elapsed time: 00:00:07
4,連接target數據庫
[oracle@localhost ~]$sqlplus sys/oracle@orcl as sysdba 5,打開target數據庫
SQL> alter database open;6,查看已錄入的事物 SQL> conn hr/hr;SQL> select salary from employees where employee_id=157;
假設備份了一個表空間users
恢復表空間:
rman target rman/rman@test2006 catalog rman/rman@test2007
sql 'alter tablespace users offline immediate'(使TEST2006的USERS表空間脫機)
進入test2006
select tablespace_name,status from dba_tablespaces;(檢查USERS已經脫機)
退出RMAN
刪除D:oracleoradataTEST2006users01.dbf
rman target rman/rman@test2006 catalog rman/rman@test2007
restore tablespace users
recover tablespace users
sql 'alter tablespace users online'(使TEST2006的USERS表空間在線)
進入test2006
select tablespace_name,status from dba_tablespaces;(檢查USERS已經在線)
三、物理(熱)備份。
Linux 下Oracle10.2.0.1 RMAN備份及恢復步驟介紹
切換服務器歸檔模式,如果已經是歸檔模式可跳過此步:
%sqlplus /nolog(啟動sqlplus)
SQL> conn / as sysdba(以DBA身份連接數據庫)
SQL> shutdown immediate;(立即關閉數據庫)
SQL> startup mount(啟動實例并加載數據庫,但不打開)
SQL> alter database archivelog;(更改數據庫為歸檔模式)
SQL> alter database open;(打開數據庫)
SQL> alter system archive log start;(啟用自動歸檔)
SQL> exit(退出)
2、連接:
%rman target='gti/gti123@LANDF';(啟動恢復管理器)
3、基本設置:
RMAN> configure default device type to disk;(設置默認的備份設備為磁盤)
RMAN> configure device type disk parallelism 2;(設置備份的并行級別,通道數)RMAN> RMAN>
RMAN> configure controlfile autobackup on;(打開控制文件與服務器參數文件的自動備份)
RMAN> configure controlfile autobackup format for device type disk to ' /home/oracle/backup/data/ctl_%F';(設置控制文件與服務器參數文件自動備份的文件格式)
4、查看所有設置:
RMAN> show all
5、查看數據庫方案報表:
RMAN> report schema;CONFIGURE
CHANNEL
DEVICE
TYPE
DISK
FORMAT '/home/oracle/backup/data1/backup_%U';(設置備份的文件格式,只適用于磁盤設備)CONFIGURE
CHANNEL
DEVICE
TYPE
DISK
FORMAT '/home/oracle/backup/data/backup_%U';(設置備份的文件格式,只適用于磁盤設備)
6、備份全庫:
RMAN> backup database plus archivelog delete input;(備份全庫及控制文件、服務器參數文件與所有歸檔的重做日志,并刪除舊的歸檔日志)
7、備份表空間:
熱備份(歸檔狀態下才有效果)
1、alter tablespace tablespace_name start backup;
2、拷貝你的該表空間的數據文件備份
3、alter tablespace tablespace_name end backup;
4、一個一個表空間做完,就備份完了
RMAN> backup tablespace system plus archivelog delete input;(備份指定表空間及歸檔的重做日志,并刪除舊的歸檔日志)RMAN> backup tablespace UNDOTBS plus archivelog delete input;(備份指定表空間及歸檔的重做日志,并刪除舊的歸檔日志)RMAN> backup tablespace SYSAUX plus archivelog delete input;(備份指定表空間及歸檔的重做日志,并刪除舊的歸檔日志)RMAN> backup tablespace TEMP plus archivelog delete input;(備份指定表空間及歸檔的重做日志,并刪除舊的歸檔日志)
8、備份歸檔日志:
RMAN> backup archivelog all delete input;
9、復制數據文件:
RMAN> copy datafile 1 to '/home/oracle/product/10.2.0.1/backup/system.copy';/* RMAN> RMAN> RMAN> */
10、查看備份和文件復本:
RMAN> list backup;
11、驗證備份:
RMAN> validate backupset 3;copy copy copy
'/home/oracle/data/gti_sys01.dbf'
'/home/oracle/data/gti_undotbs.dbf' '/home/oracle/data/sysaux_01.dbf' 1
to to to '/home/oracle/product/10.2.0.1/backup/system.copy';'/home/oracle/product/10.2.0.1/backup/undo.copy';'/home/oracle/product/10.2.0.1/backup/sysaux.copy';
12、從自動備份中恢復服務器參數文件:
RMAN> shutdown immediate;(立即關閉數據庫)
RMAN> startup nomount;(啟動實例)
RMAN> restore spfile to pfile '/backup1/initgti.ora' from autobackup;(從自動備份中恢復服務器參數文件)
13、從自動備份中恢復控制文件:
RMAN> shutdown immediate;(立即關閉數據庫)
RMAN> startup nomount;(啟動實例)
RMAN> restore controlfile to '/backup1' from autobackup;(從自動備份中恢復控制文件)
13、恢復和復原全數據庫:
RMAN> shutdown immediate;(立即關閉數據庫)
RMAN> exit(退出)
%mv
%rman target='gti/gti123@LANDF';(啟動恢復管理器)
RMAN> startup pfile=/home/oracle/product/10.2.0.1/dbs/initgti.ora(指定初始化參數文件啟動數據庫)
RMAN> restore database;(還原數據庫)
RMAN> recover database;(恢復數據庫)
RMAN> alter database open;(打開數據庫)
14、恢復和復原表空間:
RMAN> sql 'alter tablespace users offline immediate';(將表空間脫機)
RMAN> exit(退出恢復管理器)
/home/oracle/product/10.2.0.1/dbs/snapcf_gti.f /home/oracle/product/10.2.0.1/dbs/snapcf_gti.f.bak(將數據文件重命名)%mv
%mv /home/oracle/data/gti_undotbs.dbf /home/oracle/data/gti_undotbs.dbf.bak(將表空間重命名)
%mv /home/oracle/data/sysaux_01.dbf /home/oracle/data/sysaux_01.dbf.bak(將表空間重命名)
%rman target='gti/gti123@LANDF';(啟動恢復管理器)
RMAN> restore tablespace users;(還原表空間)
RMAN> recover tablespace users;(恢復表空間)
RMAN> sql 'alter tablespace users online';(將表空間聯機)
15、增量備份與恢復:
第一天的增量基本備份:
RMAN> backup incremental level=0 database plus archivelog delete input;
第二天的增量差異備份:
RMAN> backup incremental level=2 database plus archivelog delete input;
第三天的增量差異備份:
RMAN> backup incremental level=2 database plus archivelog delete input;
第四天的增量差異備份:
RMAN> backup incremental level=1 database plus archivelog delete input;
第五天的增量差異備份:
RMAN> backup incremental level=2 database plus archivelog delete input;
第六天的增量差異備份:
RMAN> backup incremental level=2 database plus archivelog delete input;
/home/oracle/product/10.2.0.1/dbs/gti_sys01.dbf /home/oracle/data/gti_sys01.dbf.bak(將表空間重命名)第七天的增量差異備份:
RMAN> backup incremental level=0 database plus archivelog delete input;
增量恢復:
RMAN> shutdown immediate;
RMAN> exit
%mv
%rman target='gti/gti123@LANDF';(啟動恢復管理器)
RMAN> startup pfile=/home/oracle/product/10.2.0.1/dbs/initgti.ora(指定初始化參數文件啟動數據庫)
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open./home/oracle/product/10.2.0.1/dbs/snapcf_gti.f /home/oracle/product/10.2.0.1/dbs/snapcf_gti.f.bak(將數據文件重命名)
RMAN>crosscheck backupset;RMAN>delete obsolete RMAN>crosscheck archivelog all;RMAN>delete archivelog all;