SQL撐爆
清除資料庫日誌語句
--清除sqlserver 2000/2005 資料庫日誌
替換下紅字部分資料庫名稱
declare @databasename varchar(15)
select @databasename='hdjjgl_journal'
DUMP TRANSACTION @databasename WITH NO_LOG
BACKUP LOG @databasename WITH NO_LOG
DBCC SHRINKDATABASE(@databasename)
或者
USE 資料庫名
DUMP TRANSACTION 資料庫名 WITH NO_LOG
BACKUP LOG 資料庫名 WITH NO_LOG
DBCC SHRINKFILE(2)
**********************************
--清除sqlserver 2008 資料庫日誌 ,執行兩遍
替換下紅字部分資料庫名稱,建立datalogbak清楚的日誌備份文件夾,注意路徑自定義。
use gdzjg_journal
declare @databasename varchar(100)
declare @databasenamelog varchar(100)
declare @databasenamedir varchar(100)
select @databasename='gdzjg_journal'
select @databasenamelog=@databasename+'_log'
select @databasenamedir='g:\datalogbak\'+@databasename
BACKUP LOG @databasename to disk=@databasenamedir
DBCC SHRINKFILE (@databasenamelog,1)
或者
ALTER DATABASE 資料庫名稱SET RECOVERY SIMPLE
ALTER DATABASE 資料庫名稱SET RECOVERY FULL
DBCC SHRINKDATABASE(資料庫名稱,0)
sqlserver 2000、2008會保存所有的資料庫操作過程,將指令保存在ldf文件中,如果誤刪除數據,想恢復數據的話,可以通過Lumigent Log Explorer For SQLServer 軟體分析ldf文件,可以看到所有執行過的insert、update、delete數據,導出來再逆向執行即可,本人曾經用過一回,確實奏效。
1、sql server 2000清理資料庫日誌
USE 資料庫名
DUMP TRANSACTION 資料庫名 WITH NO_LOG
BACKUP LOG 資料庫名 WITH NO_LOG
DBCC SHRINKFILE(2)
SHRINKFILE(2),後面的2是file_id,可以在當前資料庫用select * from sysfiles看得到,看資料庫的log文件的fileid是多少,正常情況下log的ldf文件是2,mdf文件的fileid是1。
這個查詢語句可以隨時執行,不影響資料庫的運行。
sql server 2005、2008清理資料庫日誌
USE 資料庫名
ALTER DATABASE 資料庫名 SET RECOVERY SIMPLE
ALTER DATABASE 資料庫名 SET RECOVERY FULL
DBCC SHRINKDATABASE(資料庫名,0)
這個查詢語句可以隨時執行,不影響資料庫的運行。
清理ldf的操作可以使用sql server代理,每天自動執行一次,就不怕文件增長撐爆硬碟了。
2、一般mdf用不著收縮,收縮多了容易產生文件碎片,因為delete數據之後,mdf文件中可用頁面空間會保留在那裡,等下次有新數據進來時,會繼續使用。如果實在要清理,可以參考下面的語句:
sql server 2000、2005、2008 收縮mdf文件
DBCC SHRINKDATABASE(資料庫名)
DBCC SHRINKFILE(1,0)
DBCC UPDATEUSAGE(0)
執行上述操作後,你會發現mdf的文件減少了,ldf的文件增大了,再用上面1的日誌清理操作一次即可。
3、最後再附送一個查看數據表的行數、佔用文件空間、存儲情況的查詢語句
-- drop table #test
create table #test(
name varchar(50),
rows int,
reserved varchar(20),
data varchar(20),
index_size varchar(20),
unused varchar(20)
)
set nocount on
insert into #test
EXEC sp_MSforeachtable @command1="sp_spaceused '?'"
select * from #test order by cast(replace(reserved,'KB','') as int) desc
B. SQL三種恢復模式有什麼區別
一、定義不同
Simple簡單恢復模式,Simple模式的舊稱叫」Checkpoint with truncate log「。Full完整恢復模式,和Simple模式相反,Full模式的舊稱叫」Checkpoint without truncate log「。Bulk-logged 大容量日誌恢復。
二、功能不同
完整sql server恢復模式:
資料庫引擎把所有操作都記錄到事務日誌上,並且資料庫引擎絕對不會截斷日誌,完整恢復模式能使資料庫恢復到故障時間點。
簡單sql server恢復模式:
資料庫引擎最低限度地記錄大多數操作,並在每個檢查點之後截斷事務日誌。它不能備份或還原事務日誌,也不能還原單獨的數據頁。
大容量日誌模式:
資料庫引擎對大容量操作(select into和bulk insert)進行最小記錄。如果一個日誌備份包含任何大容量操作,就可以使資料庫恢復到日誌備份的結尾,但不能恢復到某個時間點,它僅用於大容量操作期間。
三、好處不同
在Simple模式下,SQL Server會在每次checkpoint或backup之後自動截斷log,也就是丟棄所有的inactive log records,僅保留用於實例啟動時自動發生的instance recovery所需的少量log,這樣做的好處是log文件非常小,不需要DBA去維護。
Full模式SQL Server不主動截斷log,只有備份log之後,才可以截斷log,否則log文件會一直增大,直到撐爆硬碟,因此需要部署一個job定時備份log。Full的好處是可以做point-in-time恢復,最大限度的保證數據不丟失,一般用於critical的業務環境里。
Bulk-logged是針對以下Bulk操作,會產生盡量少的log:
1、Bulk load operations (bcp and BULK INSERT).
2、SELECT INTO.
3、Create/drop/rebuild index 通常bulk操作會產生大量的log,對SQL Server的性能有較大影響,bulk-logged模式的作用就在於降低這種性能影響,並防止log文件過分增長。
C. 存儲過程,運行時提示ORA-06502: PL/SQL: numeric or value error: character string buffer too small
那就是你的數據類型長度太小了,如果是Varchar你嘗試著定義為Varchar(500) 或者更大,試下。
D. 易語言edb資料庫的最大存儲記錄是多少
根據您提供的信息,預記錄有2萬條,每條記錄包含5個欄位,每個欄位的最大長度為50個字元。根據這些參數,可以對資料庫的容量和性能進行初步評估。
資料庫容量:
每個欄位最大長度為50個,假設每個字元佔用1位元組(取決於資料庫的編碼方式),則每個記錄的大小為250個位元組。因此,2萬條記錄的總大小將達到5 MB(250位元組/條 * 2萬條)左右。對於現代的關系型資料庫管理系統(RDBMS),這個存儲量是非常小的,不會造成資料庫撐爆的情況。
資料庫性能:
對於每個欄位都是文本型數據,最大50個字元的情況,資料庫應該能夠輕松處理。但是要注意以下幾點:
1. 確保合適的索引:如果您需要經常查詢和檢索大量記錄,可以考慮在適當的欄位上創建索引,以加快查詢速度。
2. 定期清理舊數據:根據您的需求,保存30天內的數據,超過這個時間范圍數據可以定期清理,以減少資料庫的負擔。
3. 考慮優化資料庫配置和硬體資源:如果您預計資料庫訪問頻繁或者有其他特殊需求,可以考慮優化資料庫配置、增加硬體資源,以提升資料庫的性能和穩定性。
綜上所述,根據您提供的信息,存儲2萬條記錄對於現代的關系型資料庫來說並不會撐爆資料庫,並且資料庫的性能應該可以滿足需求。但是具體的情況還需要根據您的系統架構、資料庫管理系統以及硬體資源等因素進行綜合評估和優化。