『壹』 sql 2003 備份越來越大 怎麼辦
把日誌文件清理一些!或者把資料庫壓縮一下,這樣一來備份就會變小。另外把過期的備份包刪除掉,留一個最近的完整備份就可以了!
『貳』 sql2000備份數據ldf文件太大怎麼處理
一般有兩種方法,一種是用命令把日誌文件壓縮清空,一種就是直接刪除日誌文專件:
1、命令行實現
第一步:清空日屬志DUMP TRANSACTION databasename WITH NO_LOG -- 第二步:截斷事務日誌BACKUP LOG databasename WITH NO_LOG -- 第三步:收縮資料庫DBCC SHRINKDATABASE(databasename)
2、直接刪除日誌文件方法:
a.分離資料庫:
企業管理器--伺服器--資料庫--右鍵--分離資料庫
b.在我的電腦中找到資料庫文件的路徑,刪除LOG文件
c.附加資料庫:
企業管理器--伺服器--資料庫--右鍵--附加資料庫
這樣將生成新的LOG文件,大小隻有500多K
『叄』 SQL備份文件太大 ,該怎麼刪除日誌文件讓他縮小,請大蝦告知
SQL Server日誌清空方法
在查詢分析器中順序執行以下三步,其中 databasename 為你的資料庫文件名
1.清空日誌:DUMP TRANSACTION databasename WITH NO_LOG
2.截斷事務日誌:BACKUP LOG databasename WITH NO_LOG
3.收縮資料庫:DBCC SHRINKDATABASE(databasename)
--//////////////////////////////////////////////////////////////////
SQL Server日誌清空方法
一種方法:清空日誌。
1.打開查詢分析器,輸入命令 DUMP TRANSACTION 資料庫名 WITH NO_LOG
2.再打開企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮文件--選擇日誌文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了。
方法二:
清空日誌:
------------------------------------------
BACKUP LOG 庫名 WITH NO_LOG
DBCC SHRINKFILE( '日誌文件名 ',新的大小數值型如1)
日誌文件名是這樣的:
select name from sysfiles
如:
mastlog
---------------------------------------------
backup log DATABASENAME
with truncate_only
dbcc shrinkdatabase (DATABASENAME,SIZE)
若每天有whole back up 的話可以設置一job,
每隔三天或一個星期清空一次
這樣的話日誌就不會長大了哦
-------------------------------------
1: 刪除LOG
1:分離資料庫
2:刪除LOG文件
3:附加資料庫
此法生成新的LOG,大小隻有500多K
再將此資料庫設置自動收縮
2:清空日誌
DUMP TRANSACTION 庫名 WITH NO_LOG
再:
企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮文件--選擇日誌文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了
方法三:
第一步:
backup log database_name with no_log
或者 backup log database_name with truncate_only --no_log和truncate_only是在這里是同義的,隨便執行哪一句都可以
第二步:
1.收縮特定資料庫的所有數據和日誌文件,執行 dbcc shrinkdatabase (database_name,[,target_percent])--database_name是要收縮的資料庫名稱;target_percent是資料庫收縮後的資料庫文件中所要的剩餘可用空間百分比
2.收縮一次一個特定資料庫中的數據或日誌文件,執行 dbcc shrinkfile(file_id,[,target_size]) --file_id是要收縮的文件的標識 (ID) 號,若要獲得文件 ID,請使用 FILE_ID 函數或在當前資料庫中搜索 sysfiles;target_size是用兆位元組表示的所要的文件大小(用整數表示)。如果沒有指定,dbcc shrinkfile 將文件大小減少到默認文件大小
兩個dbcc都可以帶上參數notruncate或truncateonly,具體意思看幫助。
方法四:
(這個方法在sqlserver2000的環境下做一般能成功,在sqlserver7及以下版本就不一定了):
第一步:
先備份整個資料庫以備不測
第二步:
備份結束後,在Query Analyzer中執行如下的語句:
exec sp_detach_db yourDBName,true --卸除這個DB在MSSQL中的注冊信息
第三步:
到日誌的物理文件所在的目錄中去刪除該日誌文件或者將該日誌文件移出該目錄
第四步:
在Query Analyzer中執行如下的語句:
exec sp_attach_single_file_db yourDBName, 'd:\mssql7\data\yourDBName_data.mdf '
--以單文件的方式注冊該DB,如果成功則MSSQL將自動為這個DB生成一個500K的日誌文件。
以上方法在清除log日誌中均有效。
但,能否讓sql server 不產生log日誌呢?以上方法好像均無效。
我這兒正好有個case:
我客戶的sql server每天都會產生4,500M的log日誌,每天都清除一下,非常不便。有沒有辦法實現不產生log日誌呢?
我分析了一下客戶產生log日誌的原因,並且做了相應測試。
客戶是每天將資料庫清空,從總系統中將數據導入到sql server里。我感決sqlserver在插入時產生log不大,在delete整個庫時產生log極大。
比如:
SELECT * into test_2 from b_bgxx
共45000條記錄,產生十幾M log,如果
delete from test_2
產生80多M log ,這明顯存在問題。
雖然可以換成:
truncate table test_2
但我還是希望能找到不產生log的方法。就如oracle不產生歸檔一樣。
『肆』 SQL如何備份大容量資料庫
資料庫備份介紹
1、備份位置
在SQL Server上,有多種備份位置可以選擇,如本地磁碟,網路磁碟,遠程地址,磁帶等。
各種備份位置均有自己的優點和缺點。
2、邏輯備份設備
在SQL Server上,可以通過創建邏輯備份設備來完成備份。使用邏輯備份設備的好處是,當變更備份地址時,不需要更改備份腳本,只需要更改邏輯備份設備的定義即可。
創建邏輯備份設備的腳本如下:
SQL code EXEC sp_addmpdevice @devtype=』disk』,@logicalname=』MYBackup』,@physicalname=』D:\backup\mydb.bak』
刪除備份設備的腳本:
SQL code Sp_dropdevice @logicalname=』MYBackup』
上述腳本只是刪除邏輯備份設備的定義,下述腳本將同時刪除備份文件:
SQL code Sp_dropdevice @logicalname=』MYBackup』,@devfile=』DELFILE』
使用邏輯備份設備的方法如下:
SQL code Backup database mydb to MYBackup
當然,還可在邏輯備份設備上指定過期時間等備份屬性,如:
SQL code Backup database mydb to MYBackup WITH EXPIREDATE=』13/01/2010』
或:
SQL code BACKUP DATABASE mydb to MYBackup WITH RETAINDAYS=7
3、備份集與存儲集
每一份備份包含於一個備份集,而一個備份集包含於一個存儲集。通過系統GUI進行備份時,SQL Server會自動指定備份集和存儲集,目的則是為了簡化管理。用T-SQL顯示指定則用如下語法:
SQL code BACKUP DATABASE mydb to MYBackup WITH RETAINDAYS=7,
NAME=』FULL』,
MEDIANAME=』ALLBackups』
NAMEs是指備份集名稱,MEDIANAME是指存儲集名稱。
4、全備份
不管恢復模式是哪一個,所有的備份都必須要有一個全備份,特別是日誌備份和差異備份,如果沒有全備份的話,將無法進行恢復。
簡單的全備份腳本如下所示,也可以通過維護計劃來指定全備份:
SQL code BACKUP DATABASE mydb to DISK=』D:\Backup\mydb.bak』
但需要注意的是,上述命令是將資料庫備份附加到當前的存在的文件上,如果不存在則創建它,並不會覆蓋原有文件。要覆蓋同名的備份文件,需要指定INIT參數。
SQL code BACKUP DATABASE mydb to DISK=』D:\Backup\mydb.bak』 WITH INIT
5、日誌備份
在完全恢復模式或者大容量日誌恢復模式下,日誌備份不僅僅是恢復的需要,同時也是手工管理事務日誌文件的一種方式。如果從不進行備份的話,在完全恢復模式或者大容量恢復模式下,事務日誌將會持續增長,直至消耗完所在磁碟。
日誌備份的腳本如下:
SQL code BACKUP LOG mydb_log TO DISK=』D:\backup\mydb.trn』
需要養成使用.trn為日誌備份的擴展名的習慣。
每個在資料庫上的動作都會被安排一個Log Sequence Number (LSN)。如果需要還原到指定的時間點,需要有持續的LSN記錄。也就是說,在完全恢復模式或者大容量日誌模式下,一個不被打斷的事務日誌備份鏈是恢復資料庫的基本要求。
6、差異備份
使用日誌備份來恢復時,無疑是一個很慢的過程,特別是上一個全備份的歷史比較悠久時。使用差異備份,便能縮短恢復時間。事實上,差異備份只是BACKUP DATABASE的一個選項,如下:
SQL code BACKUP DATABASE mydb TO DISK=』D:\backup\mydb.dif』 WITH DIFFERENTIAL,INIT
進行資料庫恢復時,先恢復資料庫全備份,再恢復資料庫差異備份,最後才恢復日誌備份。
差 異備份是與上一次全備份緊密相連的,不管期間有多少次日誌備份和差異備份,差異備份還是會從上一次全備開始備份。因此,經常會遇到這樣的一種情況,在生產 庫上需要臨時使用資料庫時,便用BACKUP DATABASE … TO DISK=』..』進行了一個備份,下一次的差異備份便會以這回的全備為准,如果過後把這個臨時全備刪除掉後,後面的差異備份就沒用了。
差異備份並不意味著磁碟空間肯定會少,這取決於實際情況。當期間大量操作發生時,差異備份還是會變得很大。
7、錯誤檢測
在備份過程中,備份進程會同時驗證數據,或者校驗不完整頁(torn page),或者驗證校驗和(checksum)。要使用該功能,需要激活該選項。
不完整頁檢測(Torn-page dection)僅僅檢查每一個頁看是否已經寫完成。如果發現一個頁只有部分被寫入,那麼就將其標記為torn。
校驗和驗證(checksum validation)是一種新的頁驗證機制。它會為每個頁添加一個值來表明該頁實際的大小。雖然看起來是個代價很高影響性能的操作,但事實上,它的效率非常高,與torn-page差不多。
備份進程在備份資料庫時,會通過比較在資料庫里的和隨著備份頁寫入硬碟時這兩個之間的值來進行驗證。但是,這個驗證並不是自動完成的,需要顯示指定,在GUI頁面上是個選項。如果通過T-SQL來備份的話,語句如下:
SQL code BACKUP DATABASE mydb TO DISK=』D:\data\mydb.bak』 WITH CHECKSUM
如果備份過程中,發現了錯誤,SQL Server會錯誤信息寫入MSDB上的SUSPECT_PAGE表裡面。同時,在默認情況下,備份行為會停止的(STOP_ON_ERROR),以便管理員排查錯誤。
但 備份過程中的校驗和驗證還有另外一個選項(CONTINUE_ON_ERROR),也就是說,如果發現錯誤,備份過程並不會中斷,而是將錯誤頁信息記錄在 MSDB..SUSPECT_PAGE上而已。需要注意的是,SUSPECT_PAGE表是有行限制的,最多隻能達到1000行,如果達到了的話,備份同 樣會失敗。
激活校驗和驗證的話,很明顯會影響備份的性能。但還是很有必要的。
8、安全備份
完全備份和日誌備份語句還支持使用密碼屬性,如:
SQL code BACKUP DATABASE mydb TO DISK=』D:\mydb.bak』 WITH PASSWORD=』mydb』
所指定的密碼是很容易破解的。因此,如果確實需要對某些備份數據進行加密的話,可以將備份存放於加密的文件系統或者其它安全的存儲設備上。
同時,SQL Server還提供了對真實列進行加密的功能。該加密功能是工業標准。
9、條帶備份
有些情況下,單獨一個硬碟無法存儲一個完整的資料庫備份時,可以將資料庫備份分成多個部分存儲在不同的磁碟上,這種備份方式成為條帶備份。使用條帶備份的優點很明確,就是能很好的利用空間,但如果某部分備份丟失或者損壞,那整個備份將無效。
其語句如下:
SQL code BACKUP DATABASE mydb TO DISK=』D:\mydb.bak』,
DISK=』E:\mydb.bak』 WITH INIT,CHECKSUM,
CONTINUE_ON_ERROR
上述D盤和E盤上的備份是不可分割的。
10、鏡像備份
與條帶備份在多個磁碟上保留同一份備份不同的是,鏡像備份是在不同磁碟上保留多份備份。其語句如下:
SQL code BACKUP DATABASE mydb TO DISK=』D:\mydb.bak』
MIRROR TO DISK=』E:\mydb.bak』
WITH INIT,CHECKSUM,CONTINUE_ON_ERROR
在實際情況下,對日誌備份採取鏡像備份方式會比較合適。
11、COPY-ONLY 備份
在差異備份里曾提到過,差異備份是建立在上一個全備份的基礎上的。因此如果在一個事先安排好的備份計劃里,如果在全備份和差異備份之間再進行了一次全備份後,其差異備份會被打斷,如果把臨時全備份刪除掉後,就產生了數據丟失。
在SQL SERVER 2005以後,SQL SERVER提供了一個選項-only.使用-only選項進行的全備份便不會打算原先的備份計劃,語句如下:
SQL code BACKUP DATABASE mydb TO DISK=』D:\mydb.bak』
WITH INIT,CHECKSUM,COPY_ONLY
三、文件和文件組備份
在SQL SERVER 7.0以後,SQL Server提供了filegroup的概念。文件組不僅僅提供了一個邏輯的存儲地址,還允許將不同的表和索引放在不同的文件組上來提高性能和減少備份時間。
在數據存儲概述上,提到了資料庫有三類數據文件,一般來說,資料庫至少需要兩個(.mdf和.ldf)或者更多的文件。SQL Server不僅允許有多個文件存在(.ldf),還允許多個文件組存在。
一個文件組可以有多個文件,每個文件需要仔細規劃好初始大小及增量。
1、默認文件組
在創建對象時,如果未明確指定文件組,那麼該對象將會存放在默認的文件組上。在默認情況下,默認的文件組是primary,但由於primary文件組不僅可以包含用戶數據,同時還存儲著資料庫結構等技術信息,因此一般建議添加額外的一個文件組,並將其指定為默認文件組。
SQL Server只能有一個默認的文件組。
修改默認文件組的語句如下:
SQL code ALTER DATABASE mydb MODIFY FILEGROUP mydb DEFAULT;
2、為對象指定文件組
當創建表或者索引時,不管是用戶還是系統都需要將表或索引放在某個文件組上。如果在創建表或索引時指定文件組,那麼表或索引將會存儲在指定的文件組上,而不是默認的文件組。
其指定語句如下:
SQL code CREATE TABLE test( [id] int,[notes] text) on mydbdata
也可以通過GUI創建表的頁面來指定文件組。
3、將對象遷移至指定文件組
如果需要變更對象的存儲位置,最簡單的方式則是通過GUI屬性頁面來進行修改通過該方法,可以直觀的看到對象的遷移過程。
同時也可以通過T-SQL來修改,例如:
SQL code ALTER TABLE test drop constraint PK_test WITH (MOVE TO DATA)
4、備份數據文件
備份數據文件同樣可以通過BACKUP DATABASE語句來實現。如下:
SQL code BACKUP DATABASE mydb FILE=』D:\Data\mydb.ndf』 TO DISK=』E:\Backup\mydbdata.bak』
上述語句相當於數據文件級別的全備份,與資料庫級別的備份類似,文件級別上的備份也有差異備份,當然前提是要有相對應的文件全備份。
差異備份的語句如下:
SQL code BACKUP DATABASE mydb FILE=』D:\Data\mydb.ndf』
WITH DIFFERENTIAL
TO DISK=』E:\Backup\mydbdata_dif.bak』
5、備份文件組
與單獨備份文件類似,也可以對文件組進行類似的備份操作。備份文件組的方式也有兩種,一種是通過GUI界面指定,一種則是通過T-SQL。
T-SQL的語句如下:
SQL code BACKUP DATABASE mydb FILEGROUP=』PRIMARY』 TO DISK=』E:\Backup\mydbpri.bak』
6、不完全備份(partial backup)
在文件組備份上,不完全備份其實相當於完全備份,可以通過指定關鍵字READ_WRITE_FILEGROUPS來實現不完全備份。
語句如下:
SQL code BACKUP DATABASE mydb READ_WRITE_FILEGROUPS TO DISK=』D:\mydb.bak』
那不完全備份到底是什麼意思呢?什麼時候需要不完全備份?如果對一個文件組設置了只讀,而這只讀的文件組又需要進行一次備份,這時,可以不用BACKUP DATABASE語句進行備份,只需要挑個時間停止實例,然後執行不完全備份。
『伍』 SQL SERVER2012使用代理作業備份資料庫時,備份文件非常大,是資料庫的10多倍,請問這是怎麼回事
BACKUP DATABASE [資料庫名抄] TO DISK = N'D:sql_bake資料庫名AM1AM' WITH NOINIT , NOUNLOAD , NAME = N'資料庫名 備份', NOSKIP , STATS = 10, NOFORMAT
你選擇的是NOFORMAT-追加備份,也就是不覆蓋原有數據,資料庫大小2G備份大概是200M
第一天備份文件大小200M
第二天400M
第三天600M
這個文件會不停的追加大小,如果你備份頻繁,追加的就頻繁。
『陸』 SQL資料庫太大怎麼辦
我有個大的 SQL 文件要回放,需要馬上做,但又怕壓死業務,怎麼辦?
先來建一個測試庫:
可以看到 CPU 已經非常冷靜,並且緩慢的處理數據。
💡小貼士:pv 工具既可以用於顯示文件流的進度,也可以用於文件流的限速。在本實驗中,我們用 PV 來限制 SQL 文件發到 MySQL client 的速度,從而限制 SQL 的回放速度,達到不影響其他業務的效果。