發表文章

目前顯示的是有「SQL SERVER」標籤的文章

SQL Server AgentAgent多項作業轉存script(備份)

圖片
第一步:在要轉出的SQL Server Agent上按 [F7] , 會在右邊視窗出現 [物件總管詳細資料] 第二步:在 [物件總管詳細資料] 視窗中選取要轉出的作業,可用[Shift]或者[Ctrl]rl]做多筆選取,然後按右鍵轉出檔案即可。

sql server 設定index FillFactor(填滿因素)

圖片
SQL SERVER儲存資料的單位為Page(頁面),在建立Index時,SQL SERVER預設會在Page填滿資料(FillFactor為0或100),此時如果新增資料時,因為Page已滿,Index所以必須使用另一個Page儲存資料,在一連串的異動資料後,會導致資料散佈在各Page上,當SQL SEVER要讀取Index時,因為資料散佈在Page而使效能低落。為了避免因為異動資料而引起的效能低落,在建立Index時可以指定Page保留一定的空間。 當Page有保留一定空間(假設FillFactor為80)時,新增的會插入現在的Page的預留空間,如此資料就不會分散。 如果FillFactor設定太小(如30),會造成建立Index時,每一個Page都只用30%的空間,這樣同樣會有資料散佈的問題以及會浪費儲存空間。 設定FillFactor可以搭配PAD_INDEX,該選項的為FillFactor的設定也套用在Index的中間(intermediate-level)。 使用 fill factor 選項,主要指定 Microsoft SQL Server 在使用現有的資料建立新索引時,應該在每一頁填滿多少空間。填滿因數會影響效能,因為當頁面填滿之後,SQL Server 就必須花費時間進行頁面的分割。 PS: A、填滿因數的預設值為 0;有效值介於 0 到 100 之間。當 FILL FACTOR 設定為 0 或 100 時,分葉層級會完全填滿。 B、填滿因數只會用於建立或重建索引時。所有分頁都不會保持在特定的填滿程度。 --檢視資料庫中所有的index SELECT DB_NAME() DBName, OBJECT_NAME([object_id]) AS TableName, name AS IndexName, is_primary_key, is_unique, type_desc, fill_factor, has_filter, filter_definition FROM SYS.INDEXES WHERE  OBJECT_NAME([object_id]) IN (SELECT Table_Name FROM INFORMATION_SCHEMA.CONSTRAI...

SQL server 重建INDEX

出處來源: http://blog.miniasp.com/post/2009/01/18/Let-SQL-Server-Tell-You-Which-Indexes-to-Rebuild-or-Reorganize.aspx 執行以下命令會把需要重建的INDEX列出來,再根據列出來的命令去執行重建即可 SELECT 'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' + CASE WHEN ps.avg_fragmentation_in_percent > 15 THEN 'REBUILD' ELSE 'REORGANIZE' END + CASE WHEN pc.partition_count > 1 THEN ' PARTITION = ' + CAST (ps.partition_number AS nvarchar( MAX )) ELSE '' END , avg_fragmentation_in_percent FROM sys.indexes AS ix INNER JOIN sys.tables t ON t.object_id = ix.object_id INNER JOIN sys.schemas s ON t.schema_id = s.schema_id INNER JOIN ( SELECT object_id , index_id , ...

查詢SQL SERVER 缺少INDEX的命令

-- 查詢缺少INDEX的命令 SELECT DatabaseName = DB_NAME(database_id) ,[Number Indexes Missing] = count(*) FROM sys.dm_db_missing_index_details GROUP BY DB_NAME(database_id) ORDER BY 2 DESC; -- 查詢缺少INDEX的項目 SELECT TOP 10 [Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0) , avg_user_impact , TableName = statement , [EqualityUsage] = equality_columns , [InequalityUsage] = inequality_columns , [Include Cloumns] = included_columns FROM sys.dm_db_missing_index_groups g INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle ORDER BY [Total Cost] DESC; 查出缺少的INDEX建議後,用下面的命令建立INCLUDE( 涵蓋索引 ) create index  idx3  on  Person.Person(MiddleName,EmailPromotion) include (FirstName,LastName,Title,PersonType) equality_columns用法 CREATE NONCLUSTERED INDEX IX_dbo_My_Table__Float_Filtered ON dbo . My_Table ( my_...

sql server 15023 error [SQL SERVER問題: 使用者、組或角色 '*****' 在當前資料庫中已存在]

一般在建立使用者時即可指定使用者的對應,如果使用者建立後,才發現無法利用 Management Studio 調整對應(出現 錯誤:15023)可以利用下面的 指令 調整  Use [myDB資料庫名稱] go sp_change_users_login 'update_one', ' DBuser( 資料庫使用者) ', ' PowerUser( 系統登入的使用者) ' 將myDB資料庫的使用者 DBuser 對應到-->系統登入的使用者 PowerUser ,也就是說 PowerUser 登入系統後,對於資料庫(例如myDB) 的存取權限就相當於 DBuser!

SQL SERVER帳號轉移(含密碼)

https://support.microsoft.com/zh-tw/kb/918992 COPY以下程式碼在舊的SQL SERVER上執行,執行完後會產生2支 預存程序: sp_hexadecimal  預存程序和  sp_help_revlogin  預存程序 USE master GO IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL DROP PROCEDURE sp_hexadecimal GO CREATE PROCEDURE sp_hexadecimal @binvalue varbinary(256), @hexvalue varchar (514) OUTPUT AS DECLARE @charvalue varchar (514) DECLARE @i int DECLARE @length int DECLARE @hexstring char(16) SELECT @charvalue = '0x' SELECT @i = 1 SELECT @length = DATALENGTH (@binvalue) SELECT @hexstring = '0123456789ABCDEF' WHILE (@i <= @length) BEGIN DECLARE @tempint int DECLARE @firstint int DECLARE @secondint int SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) SELECT @firstint = FLOOR(@tempint/16) SELECT @secondint = @tempint - (@firstint*16) SELECT @charvalue = @charvalue + SUBSTRING(@hexstring, @firstint+1, 1) + SUBSTRING(@hexstring, @secondint+1, 1) SELECT @i = @i + 1 END SELECT @hexvalue = @charvalue GO IF OBJECT_ID ('sp_help_re...

SQL Server對稱金鑰加密存取資料

資料庫在針對需要加密資料欄位存取時需先建立對稱金鑰, 參考網站: https://dotblogs.com.tw/dc690216/2009/09/10/10558 建立好對稱金鑰後,在每次SELECT取資料或者存資料時,都需先OPEN對稱金鑰 --加密 OPEN SYMMETRIC KEY 對稱金鑰 DECRYPTION BY PASSWORD = '對稱金鑰設定的密碼' updateXXXXXXXXXXXXXXXXXX close SYMMETRIC KEY 對稱金鑰 --解密 OPEN SYMMETRIC KEY 對稱金鑰 DECRYPTION BY PASSWORD = '對稱金鑰設定的密碼' select XXXXXXXXXXXXXXXXXXXXXX  close SYMMETRIC KEY 對稱金鑰

SQL SERVER--好用的File Table

http://www.dotblogs.com.tw/skychang/archive/2013/06/17/105580.aspx

SQL SERVER2012出現復原暫止,CLIENT連不上SERVER

圖片
問題:SQL SERVER2012出現復原暫止,CLIENT連不上SERVER 原因:在例行計畫重開機時,無法找到iSCSI的裝置,因為在資料庫中有一個FILE STREAM的TABLE把資料夾指到iSCSI的設備去,造成單一資料庫無法啟動。 解決方式:把iSCSI重新連線後,SQL SERVER再重新啟動即OK。

善用Database Engine Tuning Advisor改善SQL效率

http://www.dotblogs.com.tw/jimmyyu/archive/2009/10/13/11039.aspx

sql server tempdb更改資料庫檔案位置,改善資料庫的效能

sql server的tempdb設計如果設計不好會影響到資料庫的運行效能,預設的起始大小是8MB如果資料庫的訪問量小,不會有什麼影響,如果大量的的訪問做join時,就會大大的影響SELECT的效能,把TEMPDB一開始啟動的大小設大一點,可以減小TEMPDB的擴充次數。大小容量可以參考平時的容量來設定。 另一個是設定檔案位置到少使用到的磁碟機,這樣也可以增加效能,如果有大一點的記憶體空間可以做成RAMDISK,把TEMPDB設到這裡來是最好的做法。 TEMPDB檔案數增加的數目,最大化磁碟頻寬,並減少配置結構中的爭用的 tempdb 中的資料檔案。 一般而言,如果的邏輯處理器數目小於 8 或等於 8,請使用相同數目的資料檔案做為邏輯處理器。 如果邏輯處理器數目大於 8,使用 8 為資料檔案,然後如果爭用持續,請增加資料檔案數目 (最多的邏輯處理器數目) 的 4 的倍數直到爭用降低至可接受的層級,或變更的工作負載/程式碼。 以下是更改TEMPDB的檔案路徑到F:\(RAMDISK的磁碟機代號),執行完後下次重新啟動就會在新的磁碟機建立TEMPDB.MDF了。 USE master; GO ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'f:\tempdb.mdf'); ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'f:\templog.ldf'); GO 以下SQL為查詢TEMPDB的語句,可以監控TEMPDB的增長情形 SELECT SUM(    unallocated_extent_page_count         + user_object_reserved_page_count         + internal_object_reserved_page_count         + mixed_extent_page_count         + ver...