42.統計APP應用的DB連接及IP情況
select b.hostname ,a.client_net_address, b.program_name ,count(1) as Qty
from sys.dm_exec_connections a(nolock) inner join sys.sysprocesses b(nolock)
on a.session_id=b.spid
where b.spid>50
--and a.client_net_address like'XXX.XXX.XXX.%'--限定某一類IP
group by b.hostname,a.client_net_address,b.program_name
order by 4 desc
43.查看及收縮數據庫log
--查看日志大小
select DB_NAME(database_id),name,size/128
from sys.master_files
where type_desc='LOG' and size/128>1000
order by size desc
--拼收縮腳本
select 'use '+DB_NAME(database_id)+char(10)+'GO'+char(10)+'DBCC SHRINKFILE (N'''+name+''', 0, TRUNCATEONLY)'+CHAR(10)+'GO'
from sys.master_files
where type_desc='LOG' and size/128>1000
order by size desc
44.權限授權,例如將某表的select 權限授予指定用戶
use [DB]
GO
GRANT SELECT ON [表] TO [用戶]
GO
45.查看現在正在SQL Server執行的命令
首先查看sysprocesses系統表的數據(存放有關在 Microsoft SQL Server 實例中運行的進程的信息,這些進程可以是客戶端進程或系統進程)。
查詢示例:
select * from master..sysprocesses
在等到所有執行命令的進程ID了,如果要查看該進程的具體的SQL語句,可以利用以下語句查看:
dbcc inputbuffer(進程號)
例如:
dbcc inputbuffer(56)
46.將數據庫設置為單用戶模式
EXEC sp_dboption '數據庫名字', 'Single User', 'TRUE'
EXEC sp_renamedb '數據庫名字', '更新后的數據庫名字'
EXEC sp_dboption '更新后的數據庫名字', 'Single User', 'FALSE'
47.查看SQL Server當前正在執行的查詢語句
select db_name(r.database_id) as db_name ,s.group_id ,r.session_id ,r.blocking_session_id as blocking ,s.login_name ,r.wait_type as current_wait_type ,r.wait_resource ,r.last_wait_type ,r.wait_time/1000 as wait_s ,r.status as request_status ,r.command ,r.cpu_time ,r.reads ,r.writes ,r.logical_reads ,r.total_elapsed_time ,r.start_time ,s.status as session_status ,substring( st.text, r.statement_start_offset/2+1, ( case when r.statement_end_offset = -1 then len(convert(nvarchar(max), st.text)) else (r.statement_end_offset - r.statement_start_offset)/2 end ) ) as individual_query from sys.dm_exec_requests r inner join sys.dm_exec_sessions s on r.session_id=s.session_id outer APPLY sys.dm_exec_sql_text(r.sql_handle) as st where ((r.wait_type<>'MISCELLANEOUS' and r.wait_type <> 'DISPATCHER_QUEUE_SEMAPHORE' ) or r.wait_type is null) and r.session_id>50 and r.session_id<>@@spid order by r.session_id asc
48.導出所有Job的創建腳本
step1 .在Microsoft SQL Server Management Studio中,選擇SQL Server Agent->Jobs,按F7打開Object Explorer Details窗口,選中所有Job;
Step2.點擊鼠標右鍵,選擇Script Job as->CREATE To->New Query Editor Windows,然后所有Job會以SQL腳本的方式顯示在查詢窗口中。
49 安裝SQL Server實例過程報錯
錯誤信息
TITLE: Microsoft SQL Server 2008 R2 Setup ------------------------------ The following error has occurred: The process does not possess the 'SeSecurityPrivilege' privilege which is required for this operation. Click 'Retry' to retry the failed action, or click 'Cancel' to cancel this action and continue setup. For help, click: http://go.microsoft.com/fwlink?LinkID=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=10.50.1600.1&EvtType=0x88792597%25400xD69AB41D ------------------------------ BUTTONS: &Retry Cancel ------------------------------
原因
此行為是設計使然。 除了添加以本地管理員身份運行安裝程序的用戶帳戶之外,安裝用戶帳戶還需要以下默認用戶權限才能成功完成安裝程序。
本地策略對象顯示名稱 | 用戶權限 |
管理審核和安全日志 | SeSecurityPrivilege |
解決方案:
- 以具有管理憑據的用戶身份登錄到計算機。
- 單擊 " 開始",單擊 " 運行",鍵入 Control Admintools,然后單擊 "確定"。
- 雙擊 " 本地安全策略"。
- 在 " 本地安全設置 " 對話框中,單擊 " 本地策略",雙擊 " 用戶權限分配",然后雙擊 " 管理審核和安全日志"。
- 在 " 管理審核和安全日志 " 對話框中,單擊 " 添加用戶或組"。
- 在 " 選擇用戶或組 " 對話框中,鍵入用於安裝程序的用戶帳戶,然后單擊 "確定" 兩次。
- 單擊 " 退出 " 以關閉 " 本地安全設置 " 對話框。
此問題的詳細資料可參照以下網址:
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/1960bc81-d48e-462f-933a-c51cd9f94651/install-sql-server-2008-rtm-on-windows-server-2008-r2-cluster?forum=sqlsetupandupgrade
https://docs.microsoft.com/zh-cn/troubleshoot/sql/install/installation-fails-if-remove-user-right
在安裝SQL Server 2016時,會提前檢查,例如檢查不通過,報錯如下,處理方法一樣的
修改后,需要重啟電腦才能生效
50.通過scripts管理復制訂閱的表(增加/刪除)
--查看復制訂閱屬性 select * from distribution..MSdistribution_agents --添加復制分發對象 exec configdb.dbo.uxpm_repl_addarticle @publisher_db ='XXXXDB',@publication ='????',@article ='表名' --刪除復制分發對象 exec configdb.dbo.uxpm_repl_droparticle @publisher_db ='XXXXDB',@publication ='????',@article ='表名' --啟動快照,初始化數據 select 'EXEC msdb.dbo.sp_start_job '''+name+'''' from msdb..sysjobs where name like '%????%'------publication的名字 and category_id=15
51.SQL Server 密碼策略調整
我們知道SQL Server 賬號的密碼策略(復雜度和生命期等)是基於Windows的,那么怎么查看和修改呢?相信有些同學還不是很清楚。
其實,策略如下:
復雜度策略
lockout策略(重試拒絕策略)
52 刷新表的統計信息
update statistics 表名
更新統計信息時,會對表加只讀鎖,所以會阻塞對表的修改操作。sql server會按照一定的百分比,掃描表中的數據,更新統計信息,而不會掃描整個表的所有數據。由於掃描數據的百分比很小,這個鎖定過程持續的時間會很短,所以影響不大。另外,更新統計信息后,會導致相關表的執行計划無效,之前編譯緩存的存儲過程如果再次執行,會被重新編譯。
53.查看鏡像數據庫的狀態及鏡像信息
SELECT * FROM sys.database_mirroring a inner join sys.databases b on a.database_id =b.database_id WHERE name in ('DB1', 'DB2', 'DB3' )
命令在主庫上執行。
54.鏡像會話的暫停與恢復
ALTER DATABASE AdventureWorks2008R2 SET PARTNER SUSPEND;--暫停會話 ALTER DATABASE AdventureWorks2008R2 SET PARTNER RESUME;--恢復會話
55.數據庫鏡像阻塞復制日志讀取器的解決的辦法
可參閱 https://www.cnblogs.com/TeyGao/p/3521270.html
DBCC TRACESTATUS(1448) --查看跟蹤標記的狀態 DBCC TRACEON(1448,-1) -- 開啟跟蹤 DBCC TRACESTATUS(1448) --查看跟蹤標記的狀態
DBCC TRACEOFF(1448,1) --關閉跟蹤
其中,TRACEON和TRACEOFF第二個參數代表啟用標志的范圍,1是Session Scope,-1是Global Scope,如果不指定該值,則保持默認值Session Scope。
56. 復制訂閱未正常刪除的情況下,分離DB報錯。
Cannot drop the database 'XXXDB' because it is being used for replication. (.Net SqlClient Data Provider)
解決方案
EXEC sp_removedbreplication @dbname='db_name'
再次分離,報錯消失了。