第一篇:數據庫備份方案
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;
第五篇:sql數據庫局域網和遠程異地備份數據庫方案
異地備份數據庫
2已經封裝成存儲過程了,如下:
create procedure RemoteBackup as begin declare @datestr nvarchar(30)declare @bakfilename nvarchar(50)declare @bakpath nvarchar(50)
--時間字符串
set @datestr = convert(nvarchar(30), getdate(),121)set @datestr = Left(@datestr,19)set @datestr = replace(replace(replace(@datestr,'-',''),':',''),' ','')
--bak文件路徑
set @bakfilename = N'CITAS_GDB_' + @datestr + '.bak' set @bakpath = 'z:' + @bakfilename print @bakpath
--開始備份
--注意:(Z:后面要有一個空格)exec master..xp_cmdshell 'net use z: 192.168.20.54ShareRemoteBackup userpassword /user:computenameusername'
backup database CITAS_GDB to disk=@bakpath
exec master..xp_cmdshell 'net use z: /delete' end
--你是否有足夠的權限?如果有足夠的權限,可以備份到本機--如果有,可以用下面的方法,查詢分析器中操作:--創建共享目錄 exec master.dbo.XP_cmdshell 'md c:bak' exec master.dbo.XP_cmdshell 'net share bak=c:bak'--進行數據備份
backup database 數據庫 to disk='c:bak備份.bak' /*--以下操作在我的電腦中進行: 打開我的電腦,地址欄中輸入: SQL服務器的計算機名bak 復制里面的備份.bak到你的電腦就行了--我的電腦中的操作結束--*/--刪除備份生成的文件
exec master..xp_cmdshell 'del c:bak備份.bak'--刪除共享
exec master.dbo.XP_cmdshell 'net share c:bak /delete /y' exec master.dbo.XP_cmdshell 'rd c:bak'--否則,你還是完全共享你本機的目錄,用下面的方法備份: backup database 數據庫 to disk='你的計算機名共享目錄名備份文件名'---或通過映射網絡驅動器(這樣可以解決權限問題)--1.映射
exec master..xp_cmdshell 'net use z: xzc$ “密碼” /user:xzadministrator' /*--說明: z: 是映射網絡路徑對應本機的盤符,與下面的備份對應 xzc$ 是要映射的網絡路徑
xzadministrator xz是遠程的計算機名,administrator是登陸的用戶名
密碼 上面指定的administrator用戶的密碼--*/--2.進行數據庫備份
backup database 數據庫名 to disk='z:備份文件名'--3.備份完成后刪除映射
exec master..xp_cmdshell 'net use z: /delete'
注意事項:
如果遇到通過網上鄰居訪問一切正常。在企業管理器里對數據庫進行備份,備份文件名寫入網絡路徑'20.1.250.83share';系統卻提示“無法驗證該備份文件位置是否存在。是否要使用該備份文件位置?”點擊確認后,系統提示“無法打開備份設備,設備出現錯誤或設備脫機....”時,因該注意:SQL Server并不以Windows登錄帳戶訪問網絡共享,而是以SQL Server服務的啟動帳戶來訪問。這時應該進入“管理工具-->服務-->MSSQLSERVER-->登錄”將啟動服務的本地系統帳戶修改為本機管理員,重新啟動服務后,問題解決。
還應該注意:同樣的“本地系統”帳戶,在2000與2003里的權限卻不盡相同,2000及以前的系統中的本地系統帳戶只具備本地最高權限,而2003及以后的系統中,該賬戶在具備本機完全訪問權限的同時,可以像其他域帳戶一樣訪問網絡資源。所以在2003中,卻不用修改SQL服務的登錄帳戶就能順利備份。
-------
SQLSERVER的擴展存儲過程實現遠程備份與恢復
最近我在為公司的框架程序(以數據應用為導向的應用體系)做數據管理模塊,這個模塊的需求比較簡單:備份、恢復和清理日志。我公司的軟件基本上以C/S為基本架構,所以數據管理模塊中兩個主要的功能‘備份與恢復’都可能會在Client端操作,備份與恢復’的文件也都有可能存儲在client端,因而這個數據管理模塊就必須能夠實現在遠程備份與恢復數據庫。
文章的前提闡述完了,就該說說如何具體實現吧。其實都很簡單,我想寫個遠程備份的測試實例
給大家看,就能夠很清楚的描述吧!
實例說明:
環境:win2k+sqlserver 2K+查詢分析器 SQLSERVER服務實例名稱:mainserver 需要備份的數據庫名稱: msdb 本地機器名稱(Client端):david 本地用戶:zf 密碼:123 本地域名:domain 本地提供備份需求的文件夾:e:test
第一步: 建立共享文件夾
在程序代碼中調用(或者CMD窗口)net share test=e:test 或者用NetShareAdd這個API 簡要說明:
net share : 是WINDOWS內部的網絡命令。
作用:建立本地的共享資源,顯示當前計算機的共享資源信息。
語法:參見 net share /? 第二步: 建立共享信用關系
master..xp_cmdshell 'net use davidtest 123 /user:domainzf' 簡要說明:
1:xp_cmdshell :是SQLSERVER的擴展存儲過程。
作用,以操作系統命令行解釋器的方式執行給定的命令字符串,并以文本行方式返回任何輸出。
語法:參見SQLSERVER聯機幫助 2:net use : 是WINDOWS內部的網絡命令。作用,將計算機與共享資源連接或斷開,或者顯示關于計算機
連接的信息。該命令還控制持久網絡連接。
語法:參見 net use /?
第三步:備份數據庫
backup database msdb to disk='davidtestmsdb.bak' 這個不需要說明吧,語法參見SQLSERVER聯機幫助
第四步: 刪除共享文件夾
在程序代碼中調用(或者CMD窗口)net share test /delete 或者用NetShareDel這個API 結果: 已處理 1376 頁,這些頁屬于數據庫 'msdb' 的文件 'MSDBData'(位于文件 1 上)。
已處理 1 頁,這些頁屬于數據庫 'msdb' 的文件 'MSDBLog'(位于文件 1 上)。
BACKUP DATABASE 操作成功地處理了 1377 頁,花費了 3.653 秒(3.086 MB/秒)。
這樣mainserver服務器上的msdb就備份到了david機器的E:testmsdb.bak文件了,使用起來很簡單吧?恢復數據庫操作也是一樣,只要將第三個步驟的語句改為'restore database msdb from disk='davidtestmsdb.bak'就可以啦。你看完了也可以試試呀?!(最簡單的測試工具查詢分析器+CMD窗口)
備注:xp_cmdshell 這個擴展存儲過程只能SA級別的用戶調用,而且是SQLSERVER的安全隱患之一,許多DBA都喜歡將其刪除或者禁用,所以開發人員使用時要倍加小心哦。
文章中的例子只是簡要的說明了應如何利用擴展存儲過程實現遠程備份與恢復,沒有涉及安全以及其他方面的考慮,希望讀者在代碼中自行完善。本文出自 “跟著興趣走” 博客,請務必保留此出處http://liweibird.blog.51cto.com/631764/183184