當前位置:首頁 » 數據倉庫 » sql資料庫日誌備份
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql資料庫日誌備份

發布時間: 2023-06-28 12:45:29

sqlServer2008資料庫怎樣備份還原和數據恢復

在完整恢復模式或大容量日誌恢復模式下,必須先備份活動事務日誌(稱為日誌尾部),然後才能在SQLServerManagementStudio中還原資料庫。有關詳細信息,請參閱如何備份事務日誌(SQLServerManagementStudio)。若要還原已加密的資料庫,您必須有權訪問用於加密資料庫的證書或非對稱密鑰。如果沒有證書或非對稱密鑰,資料庫將無法還原。

認識資料庫備份和事務日誌備份

資料庫備份與日誌備份是資料庫維護的日常工作,備份的目的是在於當資料庫出現故障或者遭到破壞時可以根據備份的資料庫及事務日誌文件還原到最近的時間點將損失降到最低點。

資料庫備份

資料庫備份可以手動備份和語句備份

一.手動備份資料庫

1.滑鼠右鍵選擇你要進行備份的資料庫-任務-備份

可以在常規選項頁面你可以選擇備份類型是進行完整資料庫備份還是差異資料庫備份

2.點擊添加選項,選擇資料庫文件的存放路徑

注意文件名記得加後綴.bak,便於恢復時的查找

3.你還可以在選項頁面是追加到現有的備份集,還是覆蓋所有的現有備份集,還可以選擇備份驗證完整性(建議選擇),還可以選擇是否壓縮備份等。

二.語句備份資料庫

use master goBACKUP DATABASE [test] TO DISK = N'D:Microsoft sql serverMSSQL10.MSSQLSERVERMSSQLBackup est.bak' WITH NOFORMAT, NOINIT, NAME = N'test-完整 資料庫 備份', SKIP, NOREWIND, NOUNLOAD, STATS = 10GO

資料庫日誌備份

首先需要注意,資料庫日誌的備份是基於資料庫完整備份,也就是說你備份資料庫日誌之前你首先要先對資料庫進行一次完整的備份,因為之間會涉及到堅持到檢查點 lsn, 這也是本文接下來要講的重點。

一.手動備份資料庫日誌

1.右鍵資料庫-任務-備份-選擇備份類型(事務日誌)

2.點添加,添加日誌文件備份存儲路徑

3.同資料庫完整備份一樣,你也可以選擇覆蓋現有備份集或者追加到現有備份集,這里現在覆蓋現有備份集、驗證完整性,然後確認備份

二.語句備份資料庫事務日誌

BACKUP LOG [test] TO DISK = N'D: est.trn' WITH NOFORMAT, INIT, NAME = N'test-事務日誌 備份', SKIP, NOREWIND, NOUNLOAD, STATS = 10GO

資料庫還原

右鍵資料庫-還原資料庫-添加需要進行還原的資料庫文件路徑

在還原源選項中你可以選擇『源資料庫』,『源設備』。1.選擇源資料庫工具會自動顯示該資料庫之前的一些備份,然後直接選擇需要還原的資料庫備份集。

2.選擇源設備點擊後面的...,添加需要還原的資料庫文件

2.點擊確認還原資料庫

資料庫恢復

資料庫恢復的前提是1.一個完整的資料庫備份2.包含這個完整資料庫備份的事務日誌備份3.完整備份之間也可以存在數個差異備份

對於資料庫維護空間始終是一個比較頭疼的問題,特別是對於大型資料庫而言,每天的日誌文件增長是龐大的,很多資料庫管理員會定時對資料庫日誌文件進行收縮,但是經常收縮會存在收縮完日誌文件還是不能減少,這是因為存在很多活動的日誌無法收縮可以用

DBCC LOGINFO('資料庫名稱')

我們看到
status=0的日誌,代表已經備份到磁碟的日誌文件;而
status=2的日誌還沒有備份。當我們收縮日誌文件時,收縮掉的空
間其實就是
status=0的空間,如果日誌物理文件無法減小,這里一
定能看到非常多status=2的記錄

解決辦法:1.可以分離要收縮的資料庫,然後手動刪除日誌文件,然後附加資料庫,資料庫就會產生一個很小的日誌文件(不推薦使用這種方法)

2.右鍵要出來的資料庫選擇「屬性」-"選項",將恢復模式改成"簡單",然後利用收縮工具可以講日誌文件收縮到很小,收縮完記得講恢復模式改成"完整"

也可以用語句進行處理(dbname是你要進行收縮的資料庫名,dbname_log是你要進行收縮的資料庫的邏輯日誌名稱)

USE [master]
GO ALTER DATABASE [dbname] SET recovery SIMPLE WITH NO_WAIT GO
ALTER DATABASE [dbname] SET RECOVERY SIMPLE --簡單模式
GO
USE [dbname]
GO
DBCC SHRINKFILE (N'dbname_log' , 11, TRUNCATEONLY) GO
USE [master]
GO
ALTER DATABASE [dbname] SET RECOVERY FULL WITH NO_WAIT ALTER DATABASE [dbname] SET RECOVERY FULL

對於第一種方法不贊同使用,首先對於資料庫的分離與附加有時候會破壞資料庫,造成資料庫無法還原,還有就是對於在線資料庫也不允許進行分離操作。

對於第二種方法是slq2008收縮日誌文件的一種方法,但是此方法也不能使用過於頻繁,因為進行資料庫恢復模式的更改會截斷事務日誌文件,這樣的話當時利用事務日誌文件進行恢復的時候檢查點不能包含資料庫文件,而且當你要對事務日誌進行備份的時候會重新提示你需要對資料庫進行完整備份。

舉個例子:比如你昨天晚上進行了一次完整備份,然後同時你也進行了一次日誌備份(提前日誌未被截斷),然後你每個小時進行過一次差異備份,最近的差異備份時間點是14點,如果此時資料庫錯誤修改了數據,你可以立馬備份一個日誌文件將資料庫恢復到日誌備份開始到日誌備份終點前的任意時間點 。

如果此時你進行了修改資料庫模式,截斷日誌進行了收縮,那麼你的數據只能恢復到昨天晚上備份的那個日誌備份時間前的任意時間點,也就是今天所做的資料庫更改無法再恢復了,因為日誌文件已經被截斷了,不知道這樣解釋是否明白

因為日誌文件的檢查點(lsn)是連續的,每一次日誌備份都是在上一次備份的基礎上lsn往後增加的,lsn的范圍也包括了資料庫文件的lsn,也只有日誌文件的lsn包括了資料庫文件的lsn,才能將資料庫文件進行回滾。

上圖中總共有三個備份文件,一個完整備份、一個差異備份、一個日誌備份,大家可以注意觀察完整備份的第一個lsn與最後一個lsn,和檢查點

第二個差異備份文件的的第一個lsn與最後一個lsn,和檢查點,最後的日誌備份的第一個lsn和最後一個lsn包含了前面兩個備份文件的lsn,這種情況資料庫就可以恢復到日誌文件備份前的任意時間點,如果日誌文件沒有包含資料庫文件的最後一個lsn也就無法恢復了。

⑵ 如何快速掌握SQL Server中的日誌轉移

如何快速掌握SQL Server中的日誌轉移

集群是一種實現高可用性的有效解決方案,有時它會適得其反。而且,它還非常昂貴。因此,資料庫管理員可使用日誌轉移代替集群來提供較高的可用性。

日誌轉移是這樣一種處理過程,它能將某一資料庫中的事務日誌文件依次轉存到備份的資料庫中,進而為這一資料庫創建一個「近乎」熱備份。SQL Server 2000的資料庫引擎中設置了日誌轉移功能,並在其中進行處理。所以它會自動完成復原到備份伺服器的進程,而不需要資料庫管理員手動操作。只有你的產品伺服器操作失敗,你才需手動完成到備份伺服器的復原進程。(注釋:盡管SQL Server 7.0和2005中均有日誌轉移功能,但本文主要針對SQL Server 2000。)

為什麼要使用日誌轉移?

日誌轉移是一種解決高可用性的措施,並且十分有效。同樣作為高可用性的措施方案,日誌轉移相對集群來說,最大的.好處是它要便宜許多。這是因為,使用集群功能有硬體要求,而日誌轉移則不需要。

日誌轉移在資料庫與資料庫而非伺服器與伺服器之間進行;因此才有可能將備份資料庫存儲在你已用作其他用途的伺服器上。但如果轉移失敗則有可能會出現問題,這時你可換用備份資料庫,這種選擇是可用的。

日誌轉移相對比較容易安裝。SQL Server提供了非常完善的向導幫助你安裝這個進程。

日誌轉移允許你保存分布在不同地理位置中的冗餘數據,SQL Server的集群功能則很難做到這一點。這一特點十分出眾,因為,當你的數據中心遭到災難時,你仍能在備份伺服器中將其恢復過來。而在相同的數據中心,如果你使用的是集群功能,你就會陷入麻煩。

日誌轉移的另一優點是你能將備份資料庫作為報告資料庫使用,這對許多公司來說是很不錯的選擇。但如果你決定了用這個備份資料庫作報告使用,就必須注意它的局限性。使用原始資料庫中的日誌時,SQL Server 要求指定唯一的通道,所以,當日誌文件正在被應用時,報告則不能同時進行。

使用日誌轉移要考慮的相關因素

在將日誌轉移作為高可用性的方案來使用時,我們必須考慮以下幾點因素。由於從原始資料庫到備份資料庫有一個潛伏期,對你的公司而言,它並非一定是可行的實現高可用性的一種解決方案。潛伏期由資料庫管理員設置,時間也因需要而縮短, 但永遠不能避免。

日誌轉移中沒有設置恢復功能,這就意味著在將日誌轉移到備份伺服器上時,這些日誌都暫時不可用。因此,資料庫管理員必須在將備份資料庫放到網上前完成一系列的操作,這些步驟包括:

將已存儲在備份數據伺服器上原始資料庫里的備份標簽存儲起來。一旦所有的標簽被存儲後,資料庫就必須得到恢復,然後放到網上。

一旦所有的資料庫都已放在網上,所有需要訪問資料庫的應用程序就需要改變自身的鏈接。如果你不能將應用程序盡快指向剛剛恢復的資料庫,你就前功盡棄了。

一個SQL Server的實例能用於監控日誌轉移。這個實例可以在原始資料庫、備份資料庫或單獨的資料庫中。任何一種版本的SQL Server都能用於SQL Server監控。

注釋:資料庫登錄必須在原始資料庫與備份資料庫之間同時進行。

;

⑶ SQLserver資料庫備份後,怎麼查詢備份的日誌

SQL Server的備份有三種形式:

一是全備份(full backup)

這個備份裡麵包含的內容是值得商榷的,我們知道資料庫有兩種文件,數據文件與日誌文件,全備份是不是將所有的數據文件與日誌文件打包,備份成一個文件? 那麼還原的時候是不是需要做恢復,將備份過後發生的事務接著備份時間點重新執行一邊? 上面的問題細想都是肯定的。全備份做的事情,就是將所有的緩存先flush到磁碟上,不管在進行的事務是否提交,這樣保證了日誌的連續性,數據與日誌的一致性,如果事務沒提交 ,在日誌文件上的標記是active的,這段日誌也就不會被清空,下次恢復的時候,就從這段日誌開始,接著使用新的日誌執行。因此 全備份之前肯定會執行一次checkpoint;、

二是差異備份(differential backup)

這個備份會不會也重復full backup的過程,先執行checkpoint,然後再將上一次備份之後,發生數據頁變化的這些數據頁都備份起來,這部分備份就不會有日誌。但是和全備份一樣,備份的容積體量比較大,差異備份備份的是數據頁,不管這一頁是不是只有一條數據更改了,還是全部更改了;

三是日誌備份(transaction log backup)

日誌備份中需要注意的就是對未提交事務的理解,沒有提交的事務其實還是佔用日誌文件的VLF,shrink並不能回收日誌空間;提交事務的日誌如被備份之後,就會將日誌VLF打上unactive或者truncated標記,這個時候執行shrink就可以回收這部分日誌VLF了。日誌備份體量小,比較適合頻率高的執行,比如每5分鍾執行一次。

全備份:

全備份用到的命令,涉及到兩方面的參數,一是指定相應的備份設備,可以是磁碟,也可以是磁帶;另一方面 就是備份可用的選項,比如是否壓縮,是否加密。

BACKUP DATABASE database

TO backup_device [ ,...n ]

[ WITH with_options [ ,...o ] ] ;


備份設備很講究,可以事先定義好邏輯設備,也可以直接指定物理設備。磁帶備份機倒是沒見過,但是常規的磁碟備份還是可以討論一下的:

我們可以將一個本機帶路徑的物理文件名指定為備份設備:

backup database lenistest

to disk = 'E:Data_BUlenistest5__backup.bck';


也可以將網路上的一個帶路徑的物理文件名指定為備份設備:

backup database AdventureWorks2012

to disk = '\BackupSystemBackupDisk1AW_backupsAdventureWorksData.Bak';


這里有個有趣的現象,如果我們在全備份之後 ,沒有備份好日誌,這個時候故障突然發生了,我們需要作恢復,但是恢復的時候因為會重寫日誌,這樣就會丟失數據,如果不採取額外地措施,系統是會報錯的:


restore database lenistest

from disk = 'E:Data_BUlenistest5__backup.bck'


Msg 3159, Level 16, State 1, Line 6

The tail of the log for the database 「lenistest」 has not been backed
up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains
work you do not want to lose. Use the WITH REPLACE or WITH STOPAT
clause of the RESTORE statement to just overwrite the contents of the
log.

Msg 3013, Level 16, State 1, Line 6

RESTORE DATABASE is terminating abnormally.



所以如果對丟失的數據不關心或者認為不會丟失數據,可以採用with replace選項來重寫原來的日誌文件進行強制恢復。


restore database lenistest

from disk = 'E:Data_BUlenistest5__backup.bck'

with replace;



差異備份:

差異備份相對全備份,優越的地方在於備份數據量少,但是有趣的是差異備份不能獨立存在(日誌備份也不能獨立存在,他倆只能依附於全備份,也就是說在執行差異備份和日誌備份的時候,必須先有一個全備份做好在那裡), 差異備份必須以一個全備份做基準,在這基礎之上再判斷哪些數據頁是有過更新的,這些更新的數據頁計算出來並被備份起來。

use master;


go


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup.bck';


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup.bck'

with differential;


假如我們沒有事先做好全備份,就直接作差異備份了,那麼這是不成功的:


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup2.bck'

with differential;


Msg 3035, Level 16, State 1, Line 11

Cannot perform a differential backup for database 「lenistest」, because
a current database backup does not exist. Perform a full database
backup by reissuing BACKUP DATABASE, omitting the WITH DIFFERENTIAL
option.

Msg 3013, Level 16, State 1, Line 11

BACKUP DATABASE is terminating abnormally.


日誌備份:

日誌備份相對差異備份來說,體量更小,同樣它也需要全備份事先存在:

backup log lenistestto disk = 'E:Data_BUlenistest5__backup.bck';


假如我沒有事先做好全備份,我們看看直接備份日誌會出現什麼結果:


Msg 4214, Level 16, State 1, Line 15

BACKUP LOG cannot be performed because there is no current database
backup.

Msg 3013, Level 16, State 1, Line 15

BACKUP LOG is terminating abnormally.


提示先做全備份!

備份我們都討論完了,接下來我們看看還原。還原通常有兩個步驟,一是還原,二是恢復。當然我們也可以直接還原不恢復,但是可能會丟失數據,除非全備份之後 ,沒有任何操作。假設我們一天一個全備份,每15分鍾做一個差異備份 ,每5分鍾做一個日誌備份,我們該如何還原我們的資料庫呢?

通常我們首先要知道我們的備份文件名或者物理路徑,這個地方涉及到很多術語很難理解,比如說backup device, backupset, backup media, media set ,media family.

MSDN上有一個解釋,先看這個腳本:


backup database AdventureWorks2012

to tape = '\. ape0'

, tape = '\. ape1'

, tape = '\. ape2'

with format

, medianame = 'MyAdvWorks_MediaSet_1';


解釋說到,這個備份操作產生了一個 media set, 這個media set就是命名為MyAdvWorks_MediaSet_1, 這個media set還有個media header, media header一旦生成,就可以往裡面寫入備份文件了。這段腳本也同時生成了一個橫跨三個tape的備份文件, 他們統稱為backup set.

當我們指定3個backup device作為backup set(備份集)並且執行第一次全備份的時候,接下來所有的備份都需要同時指定這3個backup device作為backup set:


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

with format

, medianame = 'lenistestbackupset';


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

with noinit

, differential

, medianame = 'lenistestbackupset';



Msg 3231, Level 16, State 1, Line 10

The media loaded on 「E:Data_BUlenistest5__backup01.bck」 is formatted
to support 3 media families, but 2 media families are expected
according to the backup device specification.

Msg 3013, Level 16, State 1, Line 10

BACKUP DATABASE is terminating abnormally.


上面我先作了一次全備份,指定了三個backup device作為一份backup set, 接下來作差異備份的時候,我只指定了其中兩個backup device作為backup set, 操作失敗,提示就是少了一個backup device.


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

with noinit

, differential

, medianame = 'lenistestbackupset';


這次我們指定了同樣個數的backup device,但backup device的順序顛倒了一下,操作成功。

到目前為止,我們的腳本已經新建了 1 個media set,名為 lenistestbackupset , 2 個backup set, 第一個backup set是全備份的backup set,另外一個backup set是差異備份。所以每一次備份都會產生一個backup set. Media set產生的時間則是第一次給資料庫作全備份的時候。

這個時候我們需要恢復資料庫,那麼第一步就是要先還原全備份,但是先不恢復,等全備份還原過後,再用差異備份做恢復:

restore database lenistest

from disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

with file = 1

, replace

, norecovery;


restore database lenistest

from disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

with file = 2

, recovery;


這里一定是用replace來重寫日誌。


select mf.media_set_id

, isnull(ms.name, 'no media name') as media_name

, mf.physical_device_name

, mf.family_sequence_number

, mf.media_family_id

, bs.database_name

, bs.backup_start_date

, bs.backup_finish_date

from backupmediafamily mf

inner join backupset bs

on mf.media_set_id = bs.media_set_id

left join backupmediaset ms

on bs.media_set_id = ms.media_set_id

where bs.database_name = 'lenistest';


上面的腳本可以抓出來這些media family, media set, backup set的信息,如果像上面的例子一樣, 我們用3個backup device來承載備份,那麼這3個backup device組成了一個media family, 按照family_sequence_number來編排,1,2,3。

下面實現一個備份到恢復的全過程例子,分別在full backup, differential backup, log backup之前各出入同樣的數據,看看是不是還原的時候,能正確還原過來:


insert into dbo.dataloading

(

object_id

, object_name

)

select object_id

, name as object_name

from sys.objects;


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

with format

, medianame = 'lenistestbackupset';



insert into dbo.dataloading

(

object_id

, object_name

)

select object_id

, name as object_name

from sys.objects;


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

with noinit

, differential

, medianame = 'lenistestbackupset';



insert into dbo.dataloading

(

object_id

, object_name

)

select object_id

, name as object_name

from sys.objects;


backup log lenistest

to disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

with noinit

, medianame = 'lenistestbackupset';


接著我們做還原與恢復:


restore database lenistest

from disk = 'E:Data_BUlenistest5__backup01.bck', disk = 'E:Data_BUlenistest5__backup03.bck', disk = 'E:Data_BUlenistest5__backup02.bck'

with file = 1

, replace

, norecovery;


restore database lenistest

from disk = 'E:Data_BUlenistest5__backup01.bck', disk = 'E:Data_BUlenistest5__backup03.bck', disk = 'E:Data_BUlenistest5__backup02.bck'

with file = 2

, norecovery;


restore database lenistest

from disk = 'E:Data_BUlenistest5__backup01.bck', disk = 'E:Data_BUlenistest5__backup03.bck', disk = 'E:Data_BUlenistest5__backup02.bck'

with file = 3

, recovery;


這里的file選項就是backup set選項,表示第一個備份集,第二個備份集,第三個備份集。如果想還原到最新的故障發生時間點,前面的restore都不能recovery,只有在最後的時候才能作recovery.

如果我們只想恢復全備份的數據,只要執行recovery就可以了,但是數據肯定是少了:

restore database lenistest

from disk = 'E:Data_BUlenistest5__backup01.bck', disk = 'E:Data_BUlenistest5__backup03.bck', disk = 'E:Data_BUlenistest5__backup02.bck'

with file = 1

, replace

, recovery;

⑷ SqlServer備份資料庫的4種方式有哪些

資料庫備份可以分為4個備份類型。

l 全備份:創建備份完成時資料庫內存在的數據的副本。

l 差異備份:只記錄自上次資料庫備份後發生更改的數據。差異資料庫備份比資料庫備份小,而且備份速度快,因此可以更經常地備份,經常備份將減少丟失數據的危險。

l 日誌備份:是自上次備份事務日誌後對資料庫執行的所有事務的一系列記錄。可以使用事務日誌備份將資料庫恢復到特定的即時點(如輸入多餘數據前的那一點)或恢復到故障點。

l 文件組備份:可以備份和還原資料庫中的個別文件。可以只還原已損壞的文件,而不用還原資料庫的其餘部分,從而加快了恢復速度。

不同的備份類型適用的范圍也不同。全備份,可以只用一步操作完成數據的全部備份,但執行時間比較長。差異備份和日誌備份,都不能獨立作為一個備份集來使用,需要進行一次全備份。文件備份必須與事務日誌備份一起使用,所以文件備份只適用於完全恢復模型和大容量日誌記錄恢復模型。

每一種備份類型都有不足之處,要針對需要選擇備份類型,或者使用幾種備份方式的配合來完成資料庫的備份。

經常使用備份方式組合有以下幾種:

l 全備份+差異備份:以一周為周期,星期日進行全備份,星期一到星期六每天進行差異備份。

l 全備份+日誌備份:以一周為周期,星期日進行全備份,星期一到星期六每天進行日誌備份。

l 文件組備份+日誌備份:備份周期取決於資料庫的大小和能力,每周期分別進行一部分數據文件備份,每天進行日誌備份。

⑸ sql server需要做日誌備份嗎

請按步驟進行,未進行前面的步驟,請不要做後面的步驟
否則可能損壞你的資料庫.

一般不建議做第4,6兩步
第4步不安全,有可能損壞資料庫或丟失數據
第6步如果日誌達到上限,則以後的資料庫處理會失敗,在清理日誌後才能恢復.
--*/

--下面的所有庫名都指你要處理的資料庫的庫名

1.清空日誌
DUMP TRANSACTION 庫名 WITH NO_LOG

2.截斷事務日誌:
BACKUP LOG 庫名 WITH NO_LOG

3.收縮資料庫文件(如果不壓縮,資料庫的文件不會減小
企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮文件
--選擇日誌文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了
--選擇數據文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了

也可以用SQL語句來完成
--收縮資料庫
DBCC SHRINKDATABASE(庫名)

--收縮指定數據文件,1是文件號,可以通過這個語句查詢到:select * from sysfiles
DBCC SHRINKFILE(1)

4.為了最大化的縮小日誌文件(如果是sql 7.0,這步只能在查詢分析器中進行)
a.分離資料庫:
企業管理器--伺服器--資料庫--右鍵--分離資料庫

b.在我的電腦中刪除LOG文件

c.附加資料庫:
企業管理器--伺服器--資料庫--右鍵--附加資料庫

此法將生成新的LOG,大小隻有500多K

或用代碼:
下面的示例分離 pubs,然後將 pubs 中的一個文件附加到當前伺服器。

a.分離
EXEC sp_detach_db @dbname = '庫名'

b.刪除日誌文件

c.再附加
EXEC sp_attach_single_file_db @dbname = '庫名',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\庫名.mdf'

5.為了以後能自動收縮,做如下設置:
企業管理器--伺服器--右鍵資料庫--屬性--選項--選擇"自動收縮"

--SQL語句設置方式:
EXEC sp_dboption '庫名', 'autoshrink', 'TRUE'

6.如果想以後不讓它日誌增長得太大
企業管理器--伺服器--右鍵資料庫--屬性--事務日誌
--將文件增長限制為xM(x是你允許的最大數據文件大小)

--SQL語句的設置方式:
alter database 庫名 modify file(name=邏輯文件名,maxsize=20)

⑹ sql的備份有哪幾種增量備份和全局備份有社么區別

SQL Server2000主要有
1.完全資料庫備份
2.資料庫和事務日誌備份
3.差異備份(即增量備份)
4.資料庫文件或文件組備份

完全備份即備份整個資料庫,包括事務日誌
差異備份只備份自上次資料庫備份後發生更改的部分資料庫,它用來擴充完全資料庫備份或資料庫和事務日誌備份方法

⑺ sql server 2014日誌備份怎樣恢復

NORECOVERY
指定不發生回滾。
從而使前滾按順序在下一條語句中繼續進行。
在這種情況下,還原順序可還原其他備份,並執行前滾。
RECOVERY(默認值)表示,應在完成當前備份前滾之後執行回滾。
恢復資料庫要求要還原的整個數據集(「前滾集」)必須與資料庫一致。
如果前滾集尚未前滾到與資料庫保持一致的地步,並且指定了
RECOVERY,則資料庫引擎將發出錯誤。
也就是說,你還原一個文件後,後續還有文件要還原,就要使用NORECOVERY,如果後續沒有文件,或是你不想還原後續的文件,就使用recovery。
如果你要還原事務日誌,首先你要有一個完整備份,先還原完整備份,並使用NORECOVERY選項,然後,按順序還原日誌備份。只要後續還有文件要還原,就使用NORECOVERY選項,如果後續沒有文件或是不想再還原其他文件了,就使用RECOVERY選項。使用RECOVERY選項後,還原過程就完成了,資料庫就可以使用了。

⑻ SQL資料庫備份

SQL語句里有.
備份
backupdatabase[資料庫名]todisk=[磁碟路徑]
例如
backupdatabasedatatodisk='D:\1.bak'
恢復
restoredatabase[資料庫名]fromdisk=[磁碟路徑]
例如
restoredatabasedatafromdisk='D:\1.bak'
createPROCEDUREGY_DBBak
@bakequipint,--備份設備:磁碟&磁帶
@bakpathvarchar(50),--帶全路徑的備份文件名
@baktypeint,--完全備份&增量備份
@baklogint,--『0』備份日誌
@bakdbint,--『0』備份資料庫
@kindvarchar(7),--備份還是恢復
@retmsgvarchar(20)output--返回信息
AS
DECLARE@DevName_datavarchar(50)
DECLARE@DevName_logvarchar(50)
declare@db_pathvarchar(100)
declare@log_pathvarchar(100)
DECLARE@RCINT
SELECT@db_path=@bakpath+'.dat'
SELECT@log_path=@bakpath+'log.dat'
SELECT@RC=0
DBCCCHECKDB(Northwind)
/***********************************************************
**CREATEBACKUPANDRESTOREDEVICES
************************************************************/
IF@RC=0
BEGIN
EXECsp_admpdevice'disk',@DevName_data,@db_path
execsp_admpdevice'disk',@DevName_log,@log_path
select@rc=@@error
IF@RC<>0
begin
EXECSP_DropDevice@Devname_data
execsp_dropdevice@devname_log
SELECT@RC=-1000
return@rc
end
END
IF@kind='backup'
BEGIN
IF@bakequip=0
BEGIN
IF@baktype=0
BEGIN
IF@bakdb=0
BEGIN
BACKUPDATABASENorthwindTODISK=@Devname_data
WITHINIT
END
IF@baklog=0
BEGIN
BACKUPLOGNorthwindWITHNO_LOG
BACKUPLOGNorthwindTODISK=@DevName_log
WITHINIT,NO_TRUNCATE
END
END
ELSEBEGIN
IF@bakdb=0
BEGIN
BACKUPDATABASENorthwindTODISK=@DevName_data
WITHNOINIT
END
IF@baklog=0
BEGIN
BACKUPLOGNorthwindWITHNO_LOG
BACKUPLOGNorthwindTODISK=@DevName_log
WITHNOINIT,NO_TRUNCATE
END
END
END
SELECT@retmsg='資料庫備份成功!'
END
IF@kind='restore'
BEGIN
=@DevName_dataWITHREPLACE
SELECT@retmsg='恢復資料庫成功!'
END
RETURN0