Ⅰ sql server 如何用語句備份和還原數據
1、首先需要選擇你要備份的資料庫,滑鼠右鍵單擊逗唯,選漏孫擇任務-備份。
2、彈出備份資料庫窗口,選擇添加。
3、彈出選擇備份目標窗口,點擊瀏覽。
4、選擇存放備份資料庫的目錄,輸入文件名,後綴名輸入.bak,點擊確定,備份完成。
5、滑鼠右鍵單擊資料庫,選擇還原文件和文件組。
6、目標資料庫欄輸入資料庫名稱,選中源設備,點擊瀏覽選項。
7、然後需要點擊添加山搜培。
8、選擇你要還原的資料庫,點擊確定。
9、選中還原選項,點擊確定,還原完成。
Ⅱ 怎樣備份數據
問題一:大量數據如何備份? 組建臨時區域網 如果比較近的話, 如果遠就蛋疼了 聽你的描述A 伺服器可能還是sata 機械硬碟,有速度上限的,只能慢慢花時間了
問題二:如何備份電腦上的所有文件 備份:為應付文件、數據丟失或損壞等可能出現的意外情況,將電子計算機存儲設備中的數據復制到磁帶等大容量存儲設備中。
從而在原文中獨立出來單獨貯存的程序或文件副本。
目前有外接設備存儲、硬碟內文件重復備份、伺服器備份三種方式可以備份。
外接設備存儲有兩種方式,
光碟備份,直接把所有文件刻錄到光碟作為副本,專門准備光碟盒放置備份光碟,以期將來繼續取用,可以長期保存,建議刻兩份,一份為保證數據不被光碟刮痕破壞的一次性光碟。另一份則隨取隨用,若經損壞,則從一次性光碟取出文件再刻錄一份一次性光碟,原一次性光碟則轉型成隨取隨用型光碟。從根本上解決硬體損耗的問題。
快閃記憶體檔、移動硬碟備份,快閃記憶體檔稍小,適合少量文件備份。移動硬碟容量比較大,可以備份電腦所有文件,但缺點是比光碟成本過高。而且不適合移動硬碟原本的功能,即隨取隨用。
硬碟內文件重復備份有兩種方式,
直接在另一個磁碟備份文件,多用於非全盤格式化重裝系統;
利用還原軟體直接備份整個分區文件,等於是將所有文件壓縮成一個大的壓縮包。
伺服器備份文件,即網路備份。建議選擇收費類型的備份,免費備份在存取過程中產生文件丟失,伺服器提供公司可以完全避免風險責任,而收費公司可以獲取相應的補償,所以一些隱私文件不建議在免費伺服器上備份。
問題三:換了電腦,如何備份數據 在舊電腦上,把所有的東西壓成GHO文件,然後把GHO文件復制到新電腦上,把GHO文件解出來.我沒用過這種方法,如果你的系統都是XP的話,這種方法肯定是可行的,如果你的系統是其它系統不保證!或者你的系統不一樣,就不行,你知道的,軟體安裝要生成注冊表的.
問題四:5s怎麼備份數據和文件 兩種方式,一種是備份到雲(icloud),在設置--icloud里最後一項是儲存與備份,需要連接網路(最好是用WIFI,流量要不少)
另一種是備份到電腦,在電腦安裝itunes,然後用數據線連接手機,在「我的iphone「里備份到本電腦就可以。
推薦用第二種,第一種一般只能備份你的照片和通訊錄等,第二種方法比較徹底
問題五:怎麼備份硬碟? 備份數據的方法有以下幾種:
1、使用U盤或移動硬碟將重要數據備出電腦;
2、使用刻錄機將重要數據,刻成光碟;
3、將數據保存在系統分區以外,以免重裝系統或系統損壞帶來的數據丟失;
4、用軟盤備份數據;
5、使用GHOST備份數據和系統;(這種方法可以壓縮數據)
綜上所述的各種備份方法,各有所長,也各有不足,只有根據你的實際情況,選擇一種適合你的備份方法。對GHOST的使用方法,給一個吧,你多看看,希望對你有所幫助。
Ghost 使用詳解
一、分區備份
使用Ghost進行系統備份,有整個硬碟(Disk)和分區硬碟(Partition)兩種方式。在菜單中點擊 Local(本地)項,在右面彈出的菜單中有3個子項,其中 Disk表示備份整個硬碟(即克隆)、Partition 表示備份硬碟的單個分區、Check 表示檢查硬碟或備份的文件,查看是否可能因分區、硬碟被破壞等造成備份或還原失敗。分區備份作為個人用戶來保存系統數據,特別是在恢復和復制系統分區時具有實用價值。
選 Local→Partition→To Image 菜單,彈出硬碟選擇窗口,開始分區備份操作。點擊該窗口中白色的硬碟信息條,選擇硬碟,進入窗口,選擇要操作的分區(若沒有滑鼠,可用鍵盤進行操作:TAB鍵進行切換,回車鍵進行確認,方向鍵進行選擇)。 在彈出的窗口中選擇備份儲存的目錄路徑並輸入備份文件名稱,注意備份文件的名稱帶有 GHO 的後綴名。 接下來,程序會詢問是否壓縮備份數據,並給出3個選擇:No 表示不壓縮,Fast表示壓縮比例小而執行備份速度較快,High 就是壓縮比例高但執行備份速度相當慢。最後選擇 Yes 按鈕即開始進行分區硬碟的備份。Ghost 備份的速度相當快,不用久等就可以完成,備份的文件以 GHO 後綴名儲存在設定的目錄中。
二、硬碟克隆與備份
硬碟的克隆就是對整個硬碟的備份和還原。選擇菜單Local→Disk→To Disk,在彈出的窗口中選擇源硬碟(第一個硬碟),然後選擇要復制到的目標硬碟(第二個硬碟)。注意,可以設置目標硬碟各個分區的大小,Ghost 可以自動對目標硬碟按設定的分區數值進行分區和格式化。選擇 Yes 開始執行。
Ghost 能將目標硬碟復製得與源硬碟幾乎完全一樣,並實現分區、格式化、復制系統和文件一步完成。只是要注意目標硬碟不能太小,必須能將源硬碟的數據內容裝下。
Ghost 還提供了一項硬碟備份功能,就是將整個硬碟的數據備份成一個文件保存在硬碟上(菜單 Local→Disk→To Image),然後就可以隨時還原到其他硬碟或源硬碟上,這對安裝多個系統很方便。使用方法與分區備份相似。
三、備份還原
如果硬碟中備份的分區數據受到損壞,用一般數據修復方法不能修復,以及系統被破壞後不能啟動,都可以用備份的數據進行完全的復原而無須重新安裝程序或系統。當然,也可以將備份還原到另一個硬碟上。
要恢復備份的分區,就在界面中選擇菜單Local→Partition→From Image,在彈出窗口中選擇還原的備份文件,再選擇還原的硬碟和分區,點擊 Yes 按鈕即可。
四、區域網操作
LPT 是通過並口傳送備份文件,下面有兩個選項:slave 和 master, 分別用以連接主機和客戶機。 網路基本輸入輸出系統 NetBios 和 LPT 相似, 也有 slave 和 master 兩個選項, 作用與 LPT 相同。
先和平時......>>
問題六:如何備份資料庫 一、概念
資料庫備份就是指將資料庫保存為一個文件,該文件就叫資料庫備份文件。資料庫備份文件中保存了該資料庫的全部數據,在必要時可根據資料庫備份文件將資料庫恢復。
為了確保資料庫在運行期間的安全,以防資料庫發生不測,在使用外部設備保護的同時也應進行資料庫備份,以備在資料庫出現問題不能工作後,能即時通過資料庫備份恢復資料庫,確保醫院業務的正常進行,將數據的丟失減少到最低。
資料庫的備份有兩種方法:手工定期備份和自動定時備份。手工定期備份是指系統管理員,每隔一段時間,手工操作資料庫進行備份;自動定時備份是指在資料庫內部設置一個工作任務,讓系統進行定時備份。
為了確保資料庫在運行期間的安全,防止資料庫在操作系統出現問題時不造成數據的丟失,在使用外部保護設置的同時,還要建立數據備份。以備在資料庫發生問題不能工作時,能及時通過資料庫備份恢復資料庫,將數據的丟失減少到最低。
資料庫備份有兩種方法:手工定期備份和自動定時備份。手工定期備份是指系統管理定期手工操作進行資料庫備份;自動定時備份是指設定在資料庫中一個自動備份工作,由系統定時自動備份。下面我們將作詳細介紹。
二、備份實際操作步驟
1 手工定期備份數據
第一步:運行Microsoft SQL Server下的 企業管理器;
第二步:將文件層層展開,直到出現 資料庫 文件夾,用滑鼠右鍵點資料庫,選擇所有任
務-備份資料庫;
第三步:進入SQL Server 備份 - ,選擇要備份的資料庫,並為其命名,選擇備份路徑(如已有備份路徑,請將其清空);
第四步:按添加按鈕,進入文件路徑設置;可在文件名:中直接輸入路徑和文件名,也可按輸入框後的按鈕,進入文件夾列表;
第五步:在文件名中設置一個新的資料庫備份名稱;
第六步:確認後,回到SQL Server 備份 - 界面,備份到: 的框中顯示出將要備份的文件
路徑,確認,當出現備份成功的提示框時,備份完成。
2 自動定時備份數據
(1)建立資料庫備份設備
第一步:進入Microsoft SQL Server 中的企業管理器;
第二步:將文件夾逐層展開,展開管理,查看SQL Server 代理是否啟動,如未啟動先將其啟動,用滑鼠右鍵點備份,彈出快捷菜單,選擇新建備份設備,彈出窗口;(如圖1-3)
第三步:在名稱中輸入一個名稱,文件名中輸入路徑名稱或選擇路徑;
第四步:按確定按鈕,在右側窗體中出現該設備的名稱及路徑,即完成。
(2)建立一個自動備份的工作任務
第一步:展開管理下的 SQL Server 代理,用滑鼠右鍵點作業,彈出快捷菜單,選擇新建
作業,彈出新建作業屬性窗口,輸入一個名稱,輸入描述這個操作的語句;
第二步:選擇步驟活頁夾,按新建按鈕,建立新的步驟,輸入一個步驟名,選擇將要備份
的資料庫,在命令中輸入備份資料庫的SQL語句backup datadase lt40 to lt_backup,此處的lt_backup為備份設備名稱,按確定按鈕;
第三步:選擇調度活頁夾,按新建調度新建一個調度,輸入調度名稱,再按更改,彈出編輯時間窗口,設定備份的頻率後確定,在反復出現框中顯示出備份發生時間;
第四步:確定後,回到主窗口,在右側窗體中出現一條任務的名稱即完成設置;
(3)驗證作業是否能使用
設置完成後,為了檢驗自動備份的功能是否能運行,可以用滑鼠右鍵點擊建立的作業,彈出快捷菜單,選擇啟動作業運行,運行的時候檢看狀態是否為正在運行,或聽計算所硬碟是否發出運行的聲音,運行完成後狀態顯示為成功,即表示備份成功。
(......>>
問題七:用友財務軟體如何備份數據? (1)手工備份
1.打開系統管理窗口,用 admin(單位可能改了)身份進行注冊.單點賬套下的輸出選項,系統彈出賬套輸出對話框,選擇需要備份賬套.
2.單點確認,系統開始出現正在備份的進度提示,最後系統提示選擇備份的目標文件夾.
3.選擇好目標文件夾後,單點確認,系統將數據備份到指定的文件夾中. 自動備份
1.打開系統管理,以admin身份登錄
2.在系統下選擇設置備份計劃,系統彈出設置備份計劃對話框
3.單點增加,系統彈出設置備份計劃對話框
在此填入自動備份設置信息,比如每天15:48備份008賬套
計劃編號:001
計劃名稱:備份008賬套
備份類型:賬套備份
發生頻率: 每天
開始時間:15:48:00(備份時間最好選擇沒有使用軟體時,但伺服器沒有關掉)
有交觸發: 2小時
...
4.單點退出保存設置. (2)設置取數公式,讓每個資負表的項目聯系起會計的總帳科目余額來.還有就是沒有發生額的情況下,即便設置有公式了,那也是沒數據的。
問題八:三星手機怎麼備份數據 您好:
一、備份聯系人到SD卡.
1.在待機狀態下,點擊【聯系人】。
2.點擊左下角的【菜單】鍵,並選擇【導入/導出】。
3.選擇【導出到SD卡】。
4.點擊【確定】。
提示:
您可進入【應用程序】-【我的文件】-【所有文件】-【extSdCard】-「聯系人.vcf」即備份的聯系人文件,此備份文件不支持單獨查看,如需將其導回至手機,請點擊【聯系人.vcf】文件即可。
二、備份多媒體資料文件到外置SD卡。
1.在待機模式下,點擊【應用程序】。
2.點擊【我的文件】。
3.點擊【所有文件】。
4.選擇【sdcard0】。
5.選擇【DCIM】。
6.選擇【camera】。
7.點住想要拷貝的照片不鬆手,然後選擇【復制】。
8.選擇【extSdCard】,然後點擊【粘帖到此處】。
三、備份信息到外置SD卡。
1.在待機模式下,點擊【信息】。
2.打開您要備份的簡訊,長按住簡訊,出現「信息選項」後,選擇【復制到SD卡】。
查看備份信息:
1.在待機模式下,點擊【信息】。
2.點擊左下角的【菜單】鍵,並選擇【設定】。
3.選擇【管理SD卡信息】。
4.如需恢復SD卡上全部的信息,請將【全選】打鉤;如需恢復SD卡中部分簡訊息,請將該信息打鉤。勾選完畢後,點擊【導入】即可。
提示:簡訊拷貝到SD卡中,只能針對單條簡訊復制。僅支持字數在70字以下的簡訊備份,可復制條數依卡的容量而定。
註:上述操作必須安裝存儲卡。
問題九:如何備份C盤數據 如果你沒有別的電腦可用,用GHOST備份C盤也行,不需要拆你自己的電腦.
GHOST備份完後,用它的輔鼎軟體,可以將裡面的你需要的文件抽出來,沒有任何損壞
Ⅲ 怎麼備份SQL Server 2008資料庫
1.滑鼠右鍵選擇你要進行備份的資料庫-任務-備份
可以在常規選項頁面你可以選擇備份類型是進行完整資料庫備份還是差異資料庫備份
2.點擊添加選項,選擇資料庫文件的存放路徑
注意文件名記得加後綴.bak,便於恢復時的查找
3.你還可以在選項頁面是追加到現有的備份集,還是覆蓋所有的現有備份集,還可以選擇備份驗證完整性(建議選擇),還可以選擇是否壓縮備份等。
二.語句備份資料庫
use
master
goBACKUP
DATABASE
[test]
TO
DISK
=
N'D:\Microsoft
sql
server\MSSQL10.MSSQLSERVER\MSSQL\Backup\test.bak'
WITH
NOFORMAT,
NOINIT,
NAME
=
N'test-完整
資料庫
備份',
SKIP,
NOREWIND,
NOUNLOAD,
STATS
=
10GO
資料庫日誌備份
首先需要注意,資料庫日誌的備份是基於資料庫完整備份,也就是說你備份資料庫日誌之前你首先要先對資料庫進行一次完整的備份,因為之間會涉及到堅持到檢查點lsn,這也是本文接下來要講的重點。
一.手動備份資料庫日誌
1.右鍵資料庫-任務-備份-選擇備份類型(事務日誌)
2.點添加,添加日誌文件備份存儲路徑
3.同資料庫完整備份一樣,你也可以選擇覆蓋現有備份集或者追加到現有備份集,這里現在覆蓋現有備份集、驗證完整性,然後確認備份
Ⅳ 怎麼用SQL語句備份和恢復資料庫
1、使用SQL最簡單備份,還原資料庫。
Ⅳ sql server 怎麼備份存儲過程
轉:
利用T-SQL語句,實現資料庫的備份與還原的功能
體現了SQL Server中的四個知識點:
1. 獲取SQL Server伺服器上的默認目錄
2. 備份SQL語句的使用
3. 恢復SQL語句的使用,同時考慮了強制恢復時關閉其他用戶進程的處理
4. 作業創建SQL語句的使用
/*1.--得到資料庫的文件目錄
@dbname 指定要取得目錄的資料庫名
如果指定的數據不存在,返回安裝SQL時設置的默認數據目錄
如果指定NULL,則返回默認的SQL備份目錄名
*/
/*--調用示例
select 資料庫文件目錄=dbo.f_getdbpath('tempdb')
,[默認SQL SERVER數據目錄]=dbo.f_getdbpath('')
,[默認SQL SERVER備份目錄]=dbo.f_getdbpath(null)
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_getdbpath]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_getdbpath]
GO
create function f_getdbpath(@dbname sysname)
returns nvarchar(260)
as
begin
declare @re nvarchar(260)
if @dbname is null or db_id(@dbname) is null
select @re=rtrim(reverse(filename)) from master..sysdatabases where name='master'
else
select @re=rtrim(reverse(filename)) from master..sysdatabases where name=@dbname
if @dbname is null
set @re=reverse(substring(@re,charindex('\',@re)+5,260))+'BACKUP'
else
set @re=reverse(substring(@re,charindex('\',@re),260))
return(@re)
end
go
/*2.--備份資料庫
*/
/*--調用示例
--備份當前資料庫
exec p_backupdb @bkpath='c:\',@bkfname='db_\DATE\_db.bak'
--差異備份當前資料庫
exec p_backupdb @bkpath='c:\',@bkfname='db_\DATE\_df.bak',@bktype='DF'
--備份當前資料庫日誌
exec p_backupdb @bkpath='c:\',@bkfname='db_\DATE\_log.bak',@bktype='LOG'
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_backupdb]') and OBJECTPROPERTY(id, N'IsProcere') = 1)
drop procere [dbo].[p_backupdb]
GO
create proc p_backupdb
@dbname sysname='', --要備份的資料庫名稱,不指定則備份當前資料庫
@bkpath nvarchar(260)='', --備份文件的存放目錄,不指定則使用SQL默認的備份目錄
@bkfname nvarchar(260)='', --備份文件名,文件名中可以用\DBNAME\代表資料庫名,\DATE\代表日期,\TIME\代表時間
@bktype nvarchar(10)='DB', --備份類型:'DB'備份資料庫,'DF' 差異備份,'LOG' 日誌備份
@appendfile bit=1 --追加/覆蓋備份文件
as
declare @sql varchar(8000)
if isnull(@dbname,'')='' set @dbname=db_name()
if isnull(@bkpath,'')='' set @bkpath=dbo.f_getdbpath(null)
if isnull(@bkfname,'')='' set @bkfname='\DBNAME\_\DATE\_\TIME\.BAK'
set @bkfname=replace(replace(replace(@bkfname,'\DBNAME\',@dbname)
,'\DATE\',convert(varchar,getdate(),112))
,'\TIME\',replace(convert(varchar,getdate(),108),':',''))
set @sql='backup '+case @bktype when 'LOG' then 'log ' else 'database ' end +@dbname
+' to disk='''+@bkpath+@bkfname
+''' with '+case @bktype when 'DF' then 'DIFFERENTIAL,' else '' end
+case @appendfile when 1 then 'NOINIT' else 'INIT' end
print @sql
exec(@sql)
go
/*3.--恢復資料庫
*/
/*--調用示例
--完整恢復資料庫
exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db'
--差異備份恢復
exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'
exec p_backupdb @bkfile='c:\db_20031015_df.bak',@dbname='db',@retype='DF'
--日誌備份恢復
exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'
exec p_backupdb @bkfile='c:\db_20031015_log.bak',@dbname='db',@retype='LOG'
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_RestoreDb]') and OBJECTPROPERTY(id, N'IsProcere') = 1)
drop procere [dbo].[p_RestoreDb]
GO
create proc p_RestoreDb
@bkfile nvarchar(1000), --定義要恢復的備份文件名
@dbname sysname='', --定義恢復後的資料庫名,默認為備份的文件名
@dbpath nvarchar(260)='', --恢復後的資料庫存放目錄,不指定則為SQL的默認數據目錄
@retype nvarchar(10)='DB', --恢復類型:'DB'完事恢復資料庫,'DBNOR' 為差異恢復,日誌恢復進行完整恢復,'DF' 差異備份的恢復,'LOG' 日誌恢復
@filenumber int=1, --恢復的文件號
@overexist bit=1, --是否覆蓋已經存在的資料庫,僅@retype為
@killuser bit=1 --是否關閉用戶使用進程,僅@overexist=1時有效
as
declare @sql varchar(8000)
--得到恢復後的資料庫名
if isnull(@dbname,'')=''
select @sql=reverse(@bkfile)
,@sql=case when charindex('.',@sql)=0 then @sql
else substring(@sql,charindex('.',@sql)+1,1000) end
,@sql=case when charindex('\',@sql)=0 then @sql
else left(@sql,charindex('\',@sql)-1) end
,@dbname=reverse(@sql)
--得到恢復後的資料庫存放目錄
if isnull(@dbpath,'')='' set @dbpath=dbo.f_getdbpath('')
--生成資料庫恢復語句
set @sql='restore '+case @retype when 'LOG' then 'log ' else 'database ' end+@dbname
+' from disk='''+@bkfile+''''
+' with file='+cast(@filenumber as varchar)
+case when @overexist=1 and @retype in('DB','DBNOR') then ',replace' else '' end
+case @retype when 'DBNOR' then ',NORECOVERY' else ',RECOVERY' end
print @sql
--添加移動邏輯文件的處理
if @retype='DB' or @retype='DBNOR'
begin
--從備份文件中獲取邏輯文件名
declare @lfn nvarchar(128),@tp char(1),@i int
--創建臨時表,保存獲取的信息
create table #tb(ln nvarchar(128),pn nvarchar(260),tp char(1),fgn nvarchar(128),sz numeric(20,0),Msz numeric(20,0))
--從備份文件中獲取信息
insert into #tb exec('restore filelistonly from disk='''+@bkfile+'''')
declare #f cursor for select ln,tp from #tb
open #f
fetch next from #f into @lfn,@tp
set @i=0
while @@fetch_status=0
begin
select @sql=@sql+',move '''+@lfn+''' to '''+@dbpath+@dbname+cast(@i as varchar)
+case @tp when 'D' then '.mdf''' else '.ldf''' end
,@i=@i+1
fetch next from #f into @lfn,@tp
end
close #f
deallocate #f
end
--關閉用戶進程處理
if @overexist=1 and @killuser=1
begin
declare @spid varchar(20)
declare #spid cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #spid
fetch next from #spid into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #spid into @spid
end
close #spid
deallocate #spid
end
--恢復資料庫
exec(@sql)
go
/*4.--創建作業
*/
/*--調用示例
--每月執行的作業
exec p_createjob @jobname='mm',@sql='select * from syscolumns',@freqtype='month'
--每周執行的作業
exec p_createjob @jobname='ww',@sql='select * from syscolumns',@freqtype='week'
--每日執行的作業
exec p_createjob @jobname='a',@sql='select * from syscolumns'
--每日執行的作業,每天隔4小時重復的作業
exec p_createjob @jobname='b',@sql='select * from syscolumns',@fsinterval=4
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_createjob]') and OBJECTPROPERTY(id, N'IsProcere') = 1)
drop procere [dbo].[p_createjob]
GO
create proc p_createjob
@jobname varchar(100), --作業名稱
@sql varchar(8000), --要執行的命令
@dbname sysname='', --默認為當前的資料庫名
@freqtype varchar(6)='day', --時間周期,month 月,week 周,day 日
@fsinterval int=1, --相對於每日的重復次數
@time int=170000 --開始執行時間,對於重復執行的作業,將從0點到23:59分
as
if isnull(@dbname,'')='' set @dbname=db_name()
--創建作業
exec msdb..sp_add_job @job_name=@jobname
--創建作業步驟
exec msdb..sp_add_jobstep @job_name=@jobname,
@step_name = '數據處理',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重試次數
@retry_interval = 5 --重試間隔
--創建調度
declare @ftype int,@fstype int,@ffactor int
select @ftype=case @freqtype when 'day' then 4
when 'week' then 8
when 'month' then 16 end
,@fstype=case @fsinterval when 1 then 0 else 8 end
if @fsinterval<>1 set @time=0
set @ffactor=case @freqtype when 'day' then 0 else 1 end
EXEC msdb..sp_add_jobschele @job_name=@jobname,
@name = '時間安排',
@freq_type=@ftype , --每天,8 每周,16 每月
@freq_interval=1, --重復執行次數
@freq_subday_type=@fstype, --是否重復執行
@freq_subday_interval=@fsinterval, --重復周期
@freq_recurrence_factor=@ffactor,
@active_start_time=@time --下午17:00:00分執行
go
/*--應用案例--備份方案:
完整備份(每個星期天一次)+差異備份(每天備份一次)+日誌備份(每2小時備份一次)
調用上面的存儲過程來實現
--*/
declare @sql varchar(8000)
--完整備份(每個星期天一次)
set @sql='exec p_backupdb @dbname=''要備份的資料庫名'''
exec p_createjob @jobname='每周備份',@sql,@freqtype='week'
--差異備份(每天備份一次)
set @sql='exec p_backupdb @dbname=''要備份的資料庫名'',@bktype='DF''
exec p_createjob @jobname='每天差異備份',@sql,@freqtype='day'
--日誌備份(每2小時備份一次)
set @sql='exec p_backupdb @dbname=''要備份的資料庫名'',@bktype='LOG''
exec p_createjob @jobname='每2小時日誌備份',@sql,@freqtype='day',@fsinterval=2
/*--應用案例2
生產數據核心庫:PRODUCE
備份方案如下:
1.設置三個作業,分別對PRODUCE庫進行每日備份,每周備份,每月備份
2.新建三個新庫,分別命名為:每日備份,每周備份,每月備份
3.建立三個作業,分別把三個備份庫還原到以上的三個新庫。
目的:當用戶在proce庫中有任何的數據丟失時,均可以從上面的三個備份庫中導入相應的TABLE數據。
--*/
declare @sql varchar(8000)
--1.建立每月備份和生成月備份資料庫的作業,每月每1天下午16:40分進行:
set @sql='
declare @path nvarchar(260),@fname nvarchar(100)
set @fname=''PRODUCE_''+convert(varchar(10),getdate(),112)+''_m.bak''
set @path=dbo.f_getdbpath(null)+@fname
--備份
exec p_backupdb @dbname=''PRODUCE'',@bkfname=@fname
--根據備份生成每月新庫
exec p_RestoreDb @bkfile=@path,@dbname=''PRODUCE_月''
--為周資料庫恢復准備基礎資料庫
exec p_RestoreDb @bkfile=@path,@dbname=''PRODUCE_周'',@retype=''DBNOR''
--為日資料庫恢復准備基礎資料庫
exec p_RestoreDb @bkfile=@path,@dbname=''PRODUCE_日'',@retype=''DBNOR''
'
exec p_createjob @jobname='每月備份',@sql,@freqtype='month',@time=164000
--2.建立每周差異備份和生成周備份資料庫的作業,每周日下午17:00分進行:
set @sql='
declare @path nvarchar(260),@fname nvarchar(100)
set @fname=''PRODUCE_''+convert(varchar(10),getdate(),112)+''_w.bak''
set @path=dbo.f_getdbpath(null)+@fname
--差異備份
exec p_backupdb @dbname=''PRODUCE'',@bkfname=@fname,@bktype=''DF''
--差異恢復周資料庫
exec p_backupdb @bkfile=@path,@dbname=''PRODUCE_周'',@retype=''DF''
'
exec p_createjob @jobname='每周差異備份',@sql,@freqtype='week',@time=170000
--3.建立每日日誌備份和生成日備份資料庫的作業,每周日下午17:15分進行:
set @sql='
declare @path nvarchar(260),@fname nvarchar(100)
set @fname=''PRODUCE_''+convert(varchar(10),getdate(),112)+''_l.bak''
set @path=dbo.f_getdbpath(null)+@fname
--日誌備份
exec p_backupdb @dbname=''PRODUCE'',@bkfname=@fname,@bktype=''LOG''
--日誌恢復日資料庫
exec p_backupdb @bkfile=@path,@dbname=''PRODUCE_日'',@retype=''LOG''
'
exec p_createjob @jobname='每周差異備份',@sql,@freqtype='day',@time=171500
Ⅵ 如何備份和還原SQL存儲過程
利用T-SQL語句,實現資料庫的備份與還原的功能
體現了SQL Server中的四個知識點:
1. 獲取SQL Server伺服器上的默認目錄
2. 備份SQL語句的使用
3. 恢復SQL語句的使用,同時考慮了強制恢復時關閉其他用戶進程的處理
4. 作業創建SQL語句的使用
/*1.--得到資料庫的文件目錄
@dbname 指定要取得目錄的資料庫名
如果指定的數據不存在,返回安裝SQL時設置的默認數據目錄
如果指定NULL,則返回默認的SQL備份目錄名
*/
/*--調用示例
select 資料庫文件目錄=dbo.f_getdbpath('tempdb')
,[默認SQL SERVER數據目錄]=dbo.f_getdbpath('')
,[默認SQL SERVER備份目錄]=dbo.f_getdbpath(null)
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_getdbpath]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_getdbpath]
GO
create function f_getdbpath(@dbname sysname)
returns nvarchar(260)
as
begin
declare @re nvarchar(260)
if @dbname is null or db_id(@dbname) is null
select @re=rtrim(reverse(filename)) from master..sysdatabases where name='master'
else
select @re=rtrim(reverse(filename)) from master..sysdatabases where name=@dbname
if @dbname is null
set @re=reverse(substring(@re,charindex('\',@re)+5,260))+'BACKUP'
else
set @re=reverse(substring(@re,charindex('\',@re),260))
return(@re)
end
go
/*2.--備份資料庫
*/
/*--調用示例
--備份當前資料庫
exec p_backupdb @bkpath='c:\',@bkfname='db_\DATE\_db.bak'
--差異備份當前資料庫
exec p_backupdb @bkpath='c:\',@bkfname='db_\DATE\_df.bak',@bktype='DF'
--備份當前資料庫日誌
exec p_backupdb @bkpath='c:\',@bkfname='db_\DATE\_log.bak',@bktype='LOG'
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_backupdb]') and OBJECTPROPERTY(id, N'IsProcere') = 1)
drop procere [dbo].[p_backupdb]
GO
create proc p_backupdb
@dbname sysname='', --要備份的資料庫名稱,不指定則備份當前資料庫
@bkpath nvarchar(260)='', --備份文件的存放目錄,不指定則使用SQL默認的備份目錄
@bkfname nvarchar(260)='', --備份文件名,文件名中可以用\DBNAME\代表資料庫名,\DATE\代表日期,\TIME\代表時間
@bktype nvarchar(10)='DB', --備份類型:'DB'備份資料庫,'DF' 差異備份,'LOG' 日誌備份
@appendfile bit=1 --追加/覆蓋備份文件
as
declare @sql varchar(8000)
if isnull(@dbname,'')='' set @dbname=db_name()
if isnull(@bkpath,'')='' set @bkpath=dbo.f_getdbpath(null)
if isnull(@bkfname,'')='' set @bkfname='\DBNAME\_\DATE\_\TIME\.BAK'
set @bkfname=replace(replace(replace(@bkfname,'\DBNAME\',@dbname)
,'\DATE\',convert(varchar,getdate(),112))
,'\TIME\',replace(convert(varchar,getdate(),108),':',''))
set @sql='backup '+case @bktype when 'LOG' then 'log ' else 'database ' end +@dbname
+' to disk='''+@bkpath+@bkfname
+''' with '+case @bktype when 'DF' then 'DIFFERENTIAL,' else '' end
+case @appendfile when 1 then 'NOINIT' else 'INIT' end
print @sql
exec(@sql)
go
/*3.--恢復資料庫
*/
/*--調用示例
--完整恢復資料庫
exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db'
--差異備份恢復
exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'
exec p_backupdb @bkfile='c:\db_20031015_df.bak',@dbname='db',@retype='DF'
--日誌備份恢復
exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'
exec p_backupdb @bkfile='c:\db_20031015_log.bak',@dbname='db',@retype='LOG'
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_RestoreDb]') and OBJECTPROPERTY(id, N'IsProcere') = 1)
drop procere [dbo].[p_RestoreDb]
GO
create proc p_RestoreDb
@bkfile nvarchar(1000), --定義要恢復的備份文件名
@dbname sysname='', --定義恢復後的資料庫名,默認為備份的文件名
@dbpath nvarchar(260)='', --恢復後的資料庫存放目錄,不指定則為SQL的默認數據目錄
@retype nvarchar(10)='DB', --恢復類型:'DB'完事恢復資料庫,'DBNOR' 為差異恢復,日誌恢復進行完整恢復,'DF' 差異備份的恢復,'LOG' 日誌恢復
@filenumber int=1, --恢復的文件號
@overexist bit=1, --是否覆蓋已經存在的資料庫,僅@retype為
@killuser bit=1 --是否關閉用戶使用進程,僅@overexist=1時有效
as
declare @sql varchar(8000)
--得到恢復後的資料庫名
if isnull(@dbname,'')=''
select @sql=reverse(@bkfile)
,@sql=case when charindex('.',@sql)=0 then @sql
else substring(@sql,charindex('.',@sql)+1,1000) end
,@sql=case when charindex('\',@sql)=0 then @sql
else left(@sql,charindex('\',@sql)-1) end
,@dbname=reverse(@sql)
--得到恢復後的資料庫存放目錄
if isnull(@dbpath,'')='' set @dbpath=dbo.f_getdbpath('')
--生成資料庫恢復語句
set @sql='restore '+case @retype when 'LOG' then 'log ' else 'database ' end+@dbname
+' from disk='''+@bkfile+''''
+' with file='+cast(@filenumber as varchar)
+case when @overexist=1 and @retype in('DB','DBNOR') then ',replace' else '' end
+case @retype when 'DBNOR' then ',NORECOVERY' else ',RECOVERY' end
print @sql
--添加移動邏輯文件的處理
if @retype='DB' or @retype='DBNOR'
begin
--從備份文件中獲取邏輯文件名
declare @lfn nvarchar(128),@tp char(1),@i int
--創建臨時表,保存獲取的信息
create table #tb(ln nvarchar(128),pn nvarchar(260),tp char(1),fgn nvarchar(128),sz numeric(20,0),Msz numeric(20,0))
--從備份文件中獲取信息
insert into #tb exec('restore filelistonly from disk='''+@bkfile+'''')
declare #f cursor for select ln,tp from #tb
open #f
fetch next from #f into @lfn,@tp
set @i=0
while @@fetch_status=0
begin
select @sql=@sql+',move '''+@lfn+''' to '''+@dbpath+@dbname+cast(@i as varchar)
+case @tp when 'D' then '.mdf''' else '.ldf''' end
,@i=@i+1
fetch next from #f into @lfn,@tp
end
close #f
deallocate #f
end
--關閉用戶進程處理
if @overexist=1 and @killuser=1
begin
declare @spid varchar(20)
declare #spid cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #spid
fetch next from #spid into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #spid into @spid
end
close #spid
deallocate #spid
end
--恢復資料庫
exec(@sql)
go
/*4.--創建作業
*/
/*--調用示例
--每月執行的作業
exec p_createjob @jobname='mm',@sql='select * from syscolumns',@freqtype='month'
--每周執行的作業
exec p_createjob @jobname='ww',@sql='select * from syscolumns',@freqtype='week'
--每日執行的作業
exec p_createjob @jobname='a',@sql='select * from syscolumns'
--每日執行的作業,每天隔4小時重復的作業
exec p_createjob @jobname='b',@sql='select * from syscolumns',@fsinterval=4
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_createjob]') and OBJECTPROPERTY(id, N'IsProcere') = 1)
drop procere [dbo].[p_createjob]
GO
create proc p_createjob
@jobname varchar(100), --作業名稱
@sql varchar(8000), --要執行的命令
@dbname sysname='', --默認為當前的資料庫名
@freqtype varchar(6)='day', --時間周期,month 月,week 周,day 日
@fsinterval int=1, --相對於每日的重復次數
@time int=170000 --開始執行時間,對於重復執行的作業,將從0點到23:59分
as
if isnull(@dbname,'')='' set @dbname=db_name()
--創建作業
exec msdb..sp_add_job @job_name=@jobname
--創建作業步驟
exec msdb..sp_add_jobstep @job_name=@jobname,
@step_name = '數據處理',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重試次數
@retry_interval = 5 --重試間隔
--創建調度
declare @ftype int,@fstype int,@ffactor int
select @ftype=case @freqtype when 'day' then 4
when 'week' then 8
when 'month' then 16 end
,@fstype=case @fsinterval when 1 then 0 else 8 end
if @fsinterval<>1 set @time=0
set @ffactor=case @freqtype when 'day' then 0 else 1 end
EXEC msdb..sp_add_jobschele @job_name=@jobname,
@name = '時間安排',
@freq_type=@ftype , --每天,8 每周,16 每月
@freq_interval=1, --重復執行次數
@freq_subday_type=@fstype, --是否重復執行
@freq_subday_interval=@fsinterval, --重復周期
@freq_recurrence_factor=@ffactor,
@active_start_time=@time --下午17:00:00分執行
go
/*--應用案例--備份方案:
完整備份(每個星期天一次)+差異備份(每天備份一次)+日誌備份(每2小時備份一次)
調用上面的存儲過程來實現
--*/
declare @sql varchar(8000)
--完整備份(每個星期天一次)
set @sql='exec p_backupdb @dbname=''要備份的資料庫名'''
exec p_createjob @jobname='每周備份',@sql,@freqtype='week'
--差異備份(每天備份一次)
set @sql='exec p_backupdb @dbname=''要備份的資料庫名'',@bktype='DF''
exec p_createjob @jobname='每天差異備份',@sql,@freqtype='day'
--日誌備份(每2小時備份一次)
set @sql='exec p_backupdb @dbname=''要備份的資料庫名'',@bktype='LOG''
exec p_createjob @jobname='每2小時日誌備份',@sql,@freqtype='day',@fsinterval=2
/*--應用案例2
生產數據核心庫:PRODUCE
備份方案如下:
1.設置三個作業,分別對PRODUCE庫進行每日備份,每周備份,每月備份
2.新建三個新庫,分別命名為:每日備份,每周備份,每月備份
3.建立三個作業,分別把三個備份庫還原到以上的三個新庫。
目的:當用戶在proce庫中有任何的數據丟失時,均可以從上面的三個備份庫中導入相應的TABLE數據。
--*/
declare @sql varchar(8000)
--1.建立每月備份和生成月備份資料庫的作業,每月每1天下午16:40分進行:
set @sql='
declare @path nvarchar(260),@fname nvarchar(100)
set @fname=''PRODUCE_''+convert(varchar(10),getdate(),112)+''_m.bak''
set @path=dbo.f_getdbpath(null)+@fname
--備份
exec p_backupdb @dbname=''PRODUCE'',@bkfname=@fname
--根據備份生成每月新庫
exec p_RestoreDb @bkfile=@path,@dbname=''PRODUCE_月''
--為周資料庫恢復准備基礎資料庫
exec p_RestoreDb @bkfile=@path,@dbname=''PRODUCE_周'',@retype=''DBNOR''
--為日資料庫恢復准備基礎資料庫
exec p_RestoreDb @bkfile=@path,@dbname=''PRODUCE_日'',@retype=''DBNOR''
'
exec p_createjob @jobname='每月備份',@sql,@freqtype='month',@time=164000
--2.建立每周差異備份和生成周備份資料庫的作業,每周日下午17:00分進行:
set @sql='
declare @path nvarchar(260),@fname nvarchar(100)
set @fname=''PRODUCE_''+convert(varchar(10),getdate(),112)+''_w.bak''
set @path=dbo.f_getdbpath(null)+@fname
--差異備份
exec p_backupdb @dbname=''PRODUCE'',@bkfname=@fname,@bktype=''DF''
--差異恢復周資料庫
exec p_backupdb @bkfile=@path,@dbname=''PRODUCE_周'',@retype=''DF''
'
exec p_createjob @jobname='每周差異備份',@sql,@freqtype='week',@time=170000
--3.建立每日日誌備份和生成日備份資料庫的作業,每周日下午17:15分進行:
set @sql='
declare @path nvarchar(260),@fname nvarchar(100)
set @fname=''PRODUCE_''+convert(varchar(10),getdate(),112)+''_l.bak''
set @path=dbo.f_getdbpath(null)+@fname
--日誌備份
exec p_backupdb @dbname=''PRODUCE'',@bkfname=@fname,@bktype=''LOG''
--日誌恢復日資料庫
exec p_backupdb @bkfile=@path,@dbname=''PRODUCE_日'',@retype=''LOG''
'
exec p_createjob @jobname='每周差異備份',@sql,@freqtype='day',@time=171500
Ⅶ SQL server 如何用語句備份和還原數據
1、找到需要備份的資料庫,右鍵單擊選中的資料庫,點擊任務,再點擊備份。
Ⅷ 資料庫如何備份
1、首先運行SQL。