- SQL code
--備份declare @sql varchar(8000) set @sql='backup database mis to disk=''d:\databack\mis\mis'+rtrim(convert(varchar,getdate(),112))+'.bak''' exec(@sql) --刪除15天前備份文件 set @sql='del d:\databack\mis\mis' +rtrim(convert(varchar,getdate()-15,112))+'.bak''' exec master..xp_cmdshell@sql --清除日志dump transaction databasename with no_log backup log databasename with no_log --查看數據庫里用戶和進程的信息sp_who --查看SQL Server數據庫里的活動用戶和進程的信息sp_who 'active' --查看SQL Server數據庫里的鎖的情況sp_lock --進程號--50是SQL Server系統內部用的,進程號大於的才是用戶的連接進程. --spid是進程編號,dbid是數據庫編號,objid是數據對象編號--收縮數據庫日志文件的方法--收縮簡單恢復模式數據庫日志,收縮后@database_name_log的大小單位為M backup log @database_name withno_log dbcc shrinkfile (@database_name_log, 5) --分析SQL Server SQL 語句的方法: set statisticstime {on | off} set statistics io {on | off} --圖形方式顯示查詢執行計划--在查詢分析器->查詢->顯示估計的評估計划(D)-Ctrl-L 或者點擊工具欄里的圖形--文本方式顯示查詢執行計划set showplan_all {on |off} set showplan_text { on | off } set statistics profile { on | off }
-
--完整備份,每周一次
USE Master
GO
declare @str varchar(100)
set @str='D:\DBtext\jgj\DBABak\FullBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.bak'
BACKUP DATABASE [demo] TO DISK=@str
WITH RETAINDAYS=15,NOFORMAT,NOINIT,
NAME=N'Demo完整備份',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO
--截斷日志
USE Master
GO
BACKUP LOG Demo WITH NO_LOG
GO
--收縮日志文件
USE Demo
GO
DBCC SHRINKFILE (N'Demo_log',0,TRUNCATEONLY)
GO
--差異備份,每天一次
USE Master
GO
declare @str varchar(100)
set @str='D:\DBtext\jgj\DBABak\DiffBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.diff'
BACKUP DATABASE [Demo] TO DISK=@str
WITH DIFFERENTIAL,RETAINDAYS=8,NOFORMAT,NOINIT,
NAME=N'Demo差異備份',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO
--日志備份,每小時一次
USE Demo
GO
declare @str varchar(100)
set @str='D:\DBtext\jgj\DBABak\logbak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.trn'
BACKUP LOG [Demo] TO DISK=@str
WITH RETAINDAYS=3,NOFORMAT,NOINIT,
NAME=N'Demo日志備份',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO
--刪除過期的備份文件,每天兩次
declare @str varchar(100),@dir varchar(100),@fileName varchar(30)
set @dir='del D:\DBtext\jgj\DBABak\'
set @filename=left(replace(replace(replace(convert(varchar,getdate()-15,20),'-',''),'',''),':',''),8)
set @str=@dir+'fullbak'+@filename+'*.bak'
exec xp_cmdshell @str
set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),'',''),':',''),8)
set @str=@dir+'diffbak'+@filename+'*.diff'
exec xp_cmdshell @str
set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),'',''),':',''),8)
set @str=@dir+'logbak'+@filename+'*.trn'
exec xp_cmdshell @str - SQL code
-- 如何刪除 SQL2005 過期的數據庫備份文件呢? 在 SQL2005 數據庫中,不可以自動刪除過期的備份文件,所以借用第三方插件完成此功能。 -- 方式一:通過 Forfiles 刪除指定目錄下過期的備份文件 目的:刪除目錄 i: \sqldataup 中天前的 . bak 文件: 步驟: 1 、定義 FORFILES 批處理腳本如下: C: \> FORFILES / P i: \sqldataup / M *. bak / C "cmd /C del /Q @path" / d - 5 如果執行成功則返回當前盤符 C: \> 。 --如果沒有需要刪除的文件則返回信息錯誤 : 用指定的搜索標准沒有找到文件。比如: --C:\>FORFILES /P i:\sqldataup /M *.bak /C "cmd /C del /Q @path" /d -5 -- 錯誤 : 用指定的搜索標准沒有找到文件。 2 、通過計划任務調用批處理腳本如圖所示,圖太長請看這里 3 、當然也可以用 SQLAgent 調用 CMDEXEC 完成批處理作業。 方式二:如果在 SQL2008 中因為默認安裝 Powershell 1.0 程序,故可以用 Powershell 編寫腳本來完成定時刪除過期文件。 太多內容,請看文章http://blog.csdn.net/claro/archive/2009/08/18/4458417.aspx。
- SQL code
--最好備份日志,以后可通過日志恢復數據。。。以下為日志處理方法 一般不建議做第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 sysfilesDBCC 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)
-
--查看表的索引信息
exec sp_helpindex tb
--結合sys.indexes和sys.index_columns,sys.objects,sys.columns查詢索引所屬的表或視圖的信息
select
o.name as 表名,
i.name as 索引名,
c.name as 列名,
i.type_desc as 類型描述,
is_primary_key as 主鍵約束,
is_unique_constraint as 唯一約束,
is_disabled as 禁用
from
sys.objects o
inner join
sys.indexes i
on
i.object_id=o.object_id
inner join
sys.index_columns ic
on
ic.index_id=i.index_id and ic.object_id=i.object_id
inner join
sys.columns c
on
ic.column_id=c.column_id and ic.object_id=c.object_id
go
--查詢索引的鍵和列信息
select
o.name as 表名,
i.name as 索引名,
c.name as 字段編號,
from
sysindexes i inner join sysobjects o
on
i.id=o.id
inner join
sysindexkeys k
on
o.id=k.id and i.indid=k.indid
inner join
syscolumns c
on
c.id=i.id and k.colid=c.colid
where
o.name='表名'
---查詢索引操作的信息
select * from sys.dm_db_index_usage_stats
--查詢指定表的統計信息(sys.stats和sysobjects聯合查詢)
select
o.name,--表名
s.name,--統計信息的名稱
auto_created,--統計信息是否由查詢處理器自動創建
user_created--統計信息是否由用戶顯示創建
from
sys.stats
inner join
sysobjects o
on
s.object_id=o.id
where
o.name='表名'
go
--查看統計信息中列的信息
select
o.name,--表名
s.name,--統計信息的名稱
sc.stats_column_id,
c.name---列名
from
sys.stats_columns sc
inner join
sysobjects o
on
sc.object_id=o.id
inner join
sys.stats s
on
sc.stats_id=s.stats_id and sc.object_id=s.object_id
inner join
sys.columns c
on
sc.column_id=c.column_id and sc.object_id=c.object_id
where
o.name='表名'
--查看統計信息的明細信息
dbcc show_statistics
--查看索引自動創建的統計信息
exec sp_autostats '對象名'
--關閉自動生成統計信息的數據庫選項
alter datebase 數據庫名 set auto_create_statistics off
--創建統計信息
create statistics 統計信息名稱 on 表名(列名)
[with
[[fullscan
sample number{percent|rows}]
[norecompute]
]
go
解釋一下上面的參數:
fullscan:指定對表或視圖中所有的行收集統計信息
sample number{percent|rows}:指定隨機抽樣應讀取的數據行數或者百分比 sample選項不能與fullscan選項同時使用
norecompute:指定數據庫引擎不自動重新計算統計信息
--計算隨機抽樣統計信息
create statistics 統計信息名稱 on 表名(列名)
with sample 5 percent---創建統計信息,按5%計算隨機抽樣統計信息
go
--創建統計信息
exec sp_createstats--參數自己去查下幫助,在這里不一一列舉
--修改統計信息
update statistics 表名|視圖名
索引名|統計信息名,索引名|統計信息名,.....
[with
[[fullscan
sample number{percent|rows}]
[norecompute]
]
---參數與create statistics 語句相似,下面介紹幾種常用應用
1.更新指定表的所有統計信息
update statistics 表名
2.更新指定表的單個索引的統計信息
update statistics 表名 索引名
3.對表進行全面掃描,更新統計信息
update statistics 表名(列名) with fullscan
--獲取磁盤讀寫情況
select
@@total_read as '讀取磁盤的次數',
@@total_write as '寫入磁盤的次數',
@@total_error as '磁盤寫入錯誤數',
getdate() as '當前時間'
--獲取數據庫文件的I/O統計信息
select * from fn_virtualfilestats(null,null)
--兩個參數
database_id--指定數據庫編號,如果為null,則為所有數據庫實例返回I/O統計信息
file_id --文件的編號,如果為null,則為所有文件返回信息
--獲取I/O工作情況
select
@@id_busy,--SQL自上次啟動以來的用於執行輸入和輸出操作的時間
@@timeticks, --每個時鍾周期對應的微秒數
@@id_busy*@@timeticks as 'I/O 操作毫秒數',
getdate() as '當前時間'
--查看SQL SEVER CPU活動,工作情況
select
@@cpu_busy,--自上次啟動以來的工作時間
@@timeticks, --每個時鍾周期對應的微秒數
@@cpu_busy*cast(@@timeticks as float)/1000 as 'cpu工作時間(秒)',
@@idie*cast(@@timeticks as float)/1000 as 'CPU空閑時間(秒)'
getdate() as '當前時間'
--獲取網絡數據包統計信息
select
getdate() as '當前時間',
@@pack_received as'輸入數據包數量',
@@pack_sent as '輸出數據包數量',
@@packet_error as '錯誤包數量'
服務器配置選項
--啟動AWE
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'awe enable',1--啟動AWE選項,用於支持超過4G內存 具體用法見筆記三
go
sp_configure 'show advanced options',0
reconfigure
go
--指定游標集中的行數
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'cursor threshold'--指定游標集中的行數,超過此行數,將異步生成游標鍵集
go
sp_configure 'show advanced options',0
reconfigure
go
--指定全文索引列的默認語言值
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'default full-text language'--2052代表簡體中文,具體的查詢聯機叢書
go
sp_configure 'show advanced options',0
reconfigure
go
--控制是否讓觸發器返回結果集
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'disallow results from triggers',1--1代表on
go
sp_configure 'disallow results from triggers',0--0代表off
go
sp_configure 'show advanced options',0
reconfigure
go
--控制最初為創建索引分配的最大內存量
sp_configure 'index create memory', 4096
GO
--設置可用的鎖的最大個數
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'locks'---要設置的話在后面加',數字'
go
sp_configure 'show advanced options',0
reconfigure
go
--設置SQL進程可使用的工作線程數
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'max worker threads'--要設置的話在后面加',數字'
go
sp_configure 'show advanced options',0
reconfigure
go
--指定一個查詢在超時前等待所需資源的時間
sp_configure 'query wait',數字
go
--指定在SQL SERVER超時之前遠程操作可以持續的時間
sp_configure 'remote query timeout',數字
go
--是否允許運行系統存儲過程xp_cmdshell
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go
sp_configure 'show advanced options',0
reconfigure
go
--從運行SQL SERVER實例的本地或遠程服務器上控制存儲過程的執行
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'remote access',1 --1表示允許
reconfigure
go
sp_configure 'remote access',0 --0表示禁止
reconfigure
go
sp_configure 'show advanced options',0
reconfigure
go
---更多的查看聯機叢書
--啟動,暫停和停止本地的SQL SERVER 服務
net start MSSQLSERVER --啟動
net pause MSSQLSERVER --暫停
net continue MSSQLSERVER ---繼續被停止的服務
net stop MSSQLSERVER --停止
--查詢服務器配置選項信息
select * from sys.configurations
go
--得到的結果中
configuration_id --配置選項的唯一ID
name --配置選項的名稱
value --配置選項的值
minimum --配置選項的最小值
maximum --配置選項的最大值
value_in_use --配置選項當前使用的運行值
description --配置選項的說明
is_dynamic --等於1時表示需要執行reconfiguration語句才能生效的變量
is_anvanced --等於1時表示需要執行show advanced語句才能生效的變量
--也可以使用sp_configure查詢服務器配置選項信息,只是參數有所不同,具體查看聯機叢書