2012-04-30

TechNet SQL 研討會-如何運用SQL Server 2012 建置災難復原系統





投影片檔案名稱: 20120426_如何運用SQL Server 2012 建置災難復原系統.7z


參考網址:
 TechNet 研討會 2012-04-26 :使用 SQL Server 2012 建置災難復原系統 / SQL Server 2012 執行安全稽核與防禦攻擊
http://technet.microsoft.com/zh-tw/hh846157.aspx 

TechNet SQL 研討會-如何運用SQL Server 2012 建置災難復原系統 https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032505193&culture=zh-tw

2012-04-20

SQL Server 2012 新功能:定義 Windows 群組的預設結構描述(Default Schema for Groups)

在 SQL Server 2012 版本上,可以定義 Windows 群組的預設結構描述。

但是在先前的版本,是無法定義 Windows 群組的預設結構描述。


準備工作:

步驟01. 建立Windows群組:WG1。

步驟02. 建立Windows登入帳戶:w1,隸屬於此Windows群組:WG1。

步驟03. 將此Windows群組:WG1,設定可以存取SQL Server。

步驟04. 設定此Windows群組:WG1在Northwind資料庫是隸屬於db_owner群組。

步驟05. 使用Windows登入帳戶:w1,登入到系統,並且建立資料表。


使用 SQL Server 2008 R2 版本為例

-- 01_SQL Server 2008_資料表



-- 02_SQLServer2008_使用者



-- 03_SQLServer2008_結構描述



-- 04_SQLServer2008_資料庫使用者_ 群組帳戶_預設結構描述




使用 SQL Server 2012 版本為例

-- 05_SQLServer2012_資料表



-- 06_SQLServer2012_使用者



-- 07_SQLServer2012_結構描述



-- 08_SQLServer2012_群組帳戶_指定預設結構描述為dbo





若是未指定此群組帳戶的預設結構描述
使用 SQL Server 2012 版本為例

-- 09_SQLServer2012_資料表



-- 10_SQLServer2012_使用者



-- 11_SQLServer2012_結構描述



-- 12_SQLServer2012_資料庫使用者_群組帳戶_沒有指定預設結構描述



若要修正這問題:
1. 刪除此Windows使用者帳戶、結構描述、所屬物件。
2. 重新設定此Windows群組帳戶的預設結構描述。



預設結構描述(Default Schema)

預設結構描述是伺服器在解析這個資料庫使用者的物件名稱時,所搜尋到的第一個結構描述。
除非另有指定,否則預設結構描述是此資料庫使用者建立之物件的擁有者。

如果使用者有預設結構描述,則使用預設結構描述。
如果使用者沒有預設結構描述,但使用者是有預設結構描述之群組的成員,則使用群組的預設結構描述。

如果使用者沒有預設結構描述,而是有預設結構描述之多個群組的成員,將使用最低 principle_id 之 Windows 群組的結構描述 (您無法明確選取其中一個可用的預設結構描述當做慣用結構描述)。
如果無法判斷使用者的預設結構描述,將使用dbo結構描述。

DEFAULT_SCHEMA可以在它所指向的結構描述建立之前設定。
當您建立對應到憑證或非對稱金鑰的使用者時,不能指定DEFAULT_SCHEMA。

如果使用者是系統管理員 (sysadmin) 固定伺服器角色的成員,則會忽略DEFAULT_SCHEMA的值。
系統管理員 (sysadmin) 固定伺服器角色的所有成員都有預設的dbo結構描述。



參考資料

CREATE USER (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms173463.aspx

2012-04-17

新手學SQL Server 2012「自主資料庫(Contained Database)」(1)

在過去,若是要將SQL Server資料庫搬移到另外一個「執行個體」上,需要考慮到不少事情,例如:登入帳戶的同步問題,tempdb系統資料庫所使用的「定序」等問題,這都會讓資料庫管理師在這方面需要費心維護與處理。

在SQL Server 2012版本上新推出了「自主資料庫(Contained Database)」,將可以大幅簡化這些問題,也能夠與SQL Azure資料庫有更緊密的整合。

請參考以下的網址:
新手學SQL Server 2012「自主資料庫(Contained Database)」(1)


2012-04-16

查詢資料庫狀態(Database States),使用 sys.databases 與 sys.master_files 為例

示範環境:
SQL Server 2012

雖然,「資料庫和檔案目錄檢視」:sys.databases 與 sys.master_files 都可以查詢資料庫狀態,
但使用 sys.databases 會是能即時反應資料庫狀態的異動。



請參考以下的範例程式碼:

-- 01_建立資料庫:Arch02
USE master
GO
IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'Ach02')
BEGIN
 ALTER DATABASE Ach02 
  SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
 DROP DATABASE Ach02
END
GO
CREATE DATABASE Ach02
GO

-- 02_查詢資料庫狀態
-- sys.databases:ONLINE
SELECT name N'資料庫', state_desc N'資料庫狀態' FROM sys.databases
WHERE name='Ach02'

-- sys.master_files:ONLINE
SELECT name N'資料庫', state_desc N'資料庫狀態'  FROM sys.master_files
WHERE name='Ach02'
GO

-- 01_查詢資料庫狀態



-- 03_對資料庫:Ach02 設定為:離線
USE master
GO
ALTER DATABASE Ach02 
 SET OFFLINE;
GO

-- 04_查詢資料庫狀態
-- sys.databases:OFFLINE
SELECT name N'資料庫', state_desc N'資料庫狀態' FROM sys.databases
WHERE name='Ach02'

-- sys.master_files:ONLINE
SELECT name N'資料庫', state_desc N'資料庫狀態'  FROM sys.master_files
WHERE name='Ach02'
GO

-- 02_查詢資料庫狀態



-- 05_查詢資料庫:邏輯檔案、實體檔案、資料庫狀態
SELECT DB_NAME (mf.database_id) N'資料庫',mf.name N'邏輯檔案', mf.type_desc N'檔案類型',mf.physical_name N'實體檔案', db.state_desc N'資料庫狀態'
FROM sys.master_files mf INNER JOIN sys.databases db
ON mf.database_id = db.database_id

WHERE DB_NAME (mf.database_id) = 'Ach02'
GO

-- 03_查詢資料庫狀態



-- 06_對資料庫:Ach02 設定為:上線
USE master
GO
ALTER DATABASE Ach02 
 SET ONLINE;
GO

-- 07_對資料庫:Ach02 設定為:EMERGENCY
USE [master]
GO
ALTER DATABASE [Ach02] 
 SET  EMERGENCY  WITH NO_WAIT
GO

-- 08_查詢資料庫狀態
-- sys.databases:EMERGENCY
SELECT name N'資料庫', state_desc N'資料庫狀態' FROM sys.databases
WHERE name='Ach02'

-- sys.master_files:ONLINE
SELECT name N'資料庫', state_desc N'資料庫狀態'  FROM sys.master_files
WHERE name='Ach02'
GO

-- 04_查詢資料庫狀態


-- 09_查詢資料庫:邏輯檔案、實體檔案、資料庫狀態
SELECT DB_NAME (mf.database_id) N'資料庫',mf.name N'邏輯檔案', mf.type_desc N'檔案類型',mf.physical_name N'實體檔案', db.state_desc N'資料庫狀態'
FROM sys.master_files mf INNER JOIN sys.databases db
ON mf.database_id = db.database_id

WHERE DB_NAME (mf.database_id) = 'Ach02'
GO

-- 05_查詢資料庫狀態





認識 sys.databases (Transact-SQL)

包含 Microsoft SQL Server 的執行個體中每個資料庫各一列。

如果資料庫不在線上,或者 AUTO_CLOSE 設為 ON 且資料庫已關閉,則某些資料行的值可能是 NULL。
如果資料庫是離線狀態,則低權限的使用者就看不到對應的資料列了。

如果資料庫在離線狀態時,使用者要查看對應的資料列,至少必須具備 ALTER ANY DATABASE 伺服器層級權限或 master 資料庫中的 CREATE DATABASE 權限。

剛上線的資料庫不一定馬上能接受連接。
若要識別資料庫可接受連接的時間,請查詢 sys.databases 的 collation_name 資料行或 DATABASEPROPERTYEX 的 Collation 屬性。

當資料庫定序傳回非 Null 值時,表示資料庫可接受連接。
對於 AlwaysOn 資料庫,可以查詢 sys.dm_hadr_database_replica_states 的 database_state 或 database_state_desc 資料行。

--
認識 sys.master_files (Transact-SQL)

依照 master 資料庫的儲存情況,資料庫的每個檔案都會有一個資料列。這是單一全系統的檢視。

附註
當您卸除或重建大型索引時,或卸除或截斷大型資料表時,Database Engine 會延遲取消配置實際的頁面及其相關聯鎖定,直到認可交易之後。
延遲的卸除作業並不會立即釋出已配置的空間。

因此,在卸除或截斷大型物件之後,sys.master_files 立即傳回的值不一定能反映實際可用的磁碟空間。

--
認識 資料庫狀態

資料庫永遠都在特定的狀態。
例如,這些狀態包括 ONLINE、OFFLINE 或 SUSPECT。

若要驗證資料庫目前的狀態,請選取 sys.databases 目錄檢視中的 state_desc 資料行或是在 DATABASEPROPERTYEX 函數中的 Status 屬性。

OFFLINE:
資料庫是無法使用的。 明確的使用者動作可使資料庫變成離線狀態,並且在採取其他的使用者動作之前都是離線狀態。

例如,可以將資料庫設成離線,好讓檔案移到新的磁碟中。 在完成移動後,就會將資料庫重新啟動為線上狀態。

EMERGENCY:
使用者已變更資料庫並將狀態設為 EMERGENCY。 資料庫是在單一使用者模式下,而且可以進行修復或還原。
資料庫是標示為 READ_ONLY、記錄已停用並限定只有系統管理員 (sysadmin) 固定伺服器角色的成員才可存取。

EMERGENCY 主要是做為疑難排解的用途。
例如,標示為有疑問的資料庫可以設為 EMERGENCY 狀態。 這將可允許系統管理員唯讀存取資料庫。
只有系統管理員 (sysadmin) 固定伺服器角色的成員,可以將資料庫設定為 EMERGENCY 狀態。


參考資料

資料庫狀態
http://msdn.microsoft.com/zh-tw/library/ms190442.aspx

sys.databases
http://msdn.microsoft.com/zh-tw/library/ms178534.aspx

sys.master_files
http://msdn.microsoft.com/zh-tw/library/ms186782.aspx

2012-04-13

SQL Server 2012 已不支援 AWE 記憶體管理


這意謂的是:選擇使用 32 位元版本,卻無法使用超過 4 GB 以上的記憶體。

-- 01_SQL Server 2012 中已停止的 Database Engine 功能



請參考以下表格的整理:

-- 02_SQL Server 2012,32 位元版本,最大可用的記憶體




在使用 Microsoft SQL Server 2008 R2,[設定] 選項 已啟用 awe已被取代。

在下一個版本中,Microsoft SQL Server 2012 版本這個組態選項,此功能會使用這個組態選項會從產品移除。

因此,當您從 SQL Server 2008 R2 升級至 SQL Server 的下一個版本時,您就無法使用更多的記憶體比在 32 位元的 SQL Server 的執行個體中的何種虛擬位址空間限制。

如果您必須有更多的記憶體 SQL Server 這個執行個體,您必須考慮移轉至 SQL Server 的 64 位元執行個體



-- 03_SSMS_SQLServer2012已不支援AWE



-- 04_SSMS_SQL2008R2之前(含)的版本是有支援AWE





參考資料:

SQL Server 2012 中已停止的 Database Engine 功能
http://technet.microsoft.com/zh-tw/library/ms144262.aspx

"已啟用 awe 「 SQL Server 」 功能已被取代
http://support.microsoft.com/kb/2644592/zh-tw

2012-04-03

SQL Server 2012_SSMS 2012 管理工具 - 小技巧:在「查詢編輯器」上,放大、縮寫;Zoom in、Zoom out

示範版本:
SQL Server 2012 版本。

在「查詢編輯器」上,可以使用以下的方式來快速放大或縮小


(1) 按下鍵盤:CTRL + 滑鼠滾輪



(2) 在「查詢編輯器」的左下角,也可以設定要顯示的百分比。



-- 01_尚未縮放,預設的:100%



-- 02_設定為:200%



-- 03_設定為:50%



-- 04_檢視_預設提供的顯示比例






參考資料

使用 SQL Server Management Studio 新介面
http://technet.microsoft.com/zh-tw/hh826046

SQL Server Management Studio 中的功能
http://msdn.microsoft.com/zh-tw/library/ms174219(v=sql.110).aspx

Usando Zoom no Management Studio do SQL Server Denali (pt-BR)
http://social.technet.microsoft.com/wiki/contents/articles/6504.aspx

2012-04-02

SQL Server 2012_SSMS 2012 管理工具 - 小技巧:產生「檢查物件是否存在」的Transact-SQL指令碼

示範版本:
SQL Server 2012 版本。

使用SSMS管理工具的「物件總管」,可以產生建立、刪除物件的Transact-SQL指令碼。
若是沒有產生判斷物件是否存在的Transact-SQL指令碼。

-- 01_產生刪除資料庫的Transact-SQL指令碼



-- 02_沒有包含檢視物件是否存在的判斷式





若是要產生「檢查物件是否存在」的Transact-SQL指令碼,可以使用以下的方式:

步驟01. 在 SSMS 管理工具,點選上方的「工具」\「選項」。

步驟02. 在「選項」視窗,設定以下的的參數:

-- 03_設定「檢查物件是否存在」



-- 04_產生判斷物件是否存在的指令碼






參考資料:

選項 (SQL Server 物件總管/指令碼頁面)
http://msdn.microsoft.com/zh-tw/library/bb326600.aspx