[SQL][MCSA]70-462 考試預備 ( 2/4 )
Resource Governor
-
There are two built-in workload group
- Internal : This is used by database engine exclusives and user have no control.
- Default : This is used by all the workloads which are not assigned to any other group.
資料來源 : http://blog.sqlauthority.com
Error Log
- 預設狀況下,SQL Server 會保留六個 Error Log,當每次重新啟動的時候就會自動產生一個新的,會將原本的 Errorlog 給 rename 成為 Errorlog.1 , 原本的 1 變成 2 , 把最後一個給刪除。
- 此部分可以修改機碼下面的 HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer 的 NumErrorLogs 的屬性值,最大值是 99。
- 如果在特殊狀況下要重新產生一個新的 Errorlog,可以透過 master 資料庫內的系統預存程序 sp_cycle_errorlog 來產生。
- 除了 SQL Server Instance 有 Errorlog 外,SQL Agent 也會有自己的 log,但如果要重新產生一個新的 Log 時,則是呼叫 msdb 資料庫內 sp_cycle_agent_errorlog 來產生
Contained Databases
- A Contained Database is a database which contains all the necessary settings and metadata, making database easily portable to another server
-
SQL Server 2012 supports Partially Contained Databases
-
Enable Contained Database
sp_configure 'show advanced options',1 GO RECONFIGURE WITH OVERRIDE GO sp_configure 'contained database authentication', 1 GO RECONFIGURE WITH OVERRIDE GO
-
Create Contained Database
CREATE DATABASE [ContainedDatabase] CONTAINMENT = PARTIAL GO
-
Create User in Contained Database
USE [ContainedDatabase] GO CREATE USER ContainedUser WITH PASSWORD = 'password'; GO
- Connect Contained Database ( 要指定 Default Database 為 Contained Database )
-
Enable Contained Database
Transparent Data Encryption ( MSDN : http://msdn.microsoft.com/zh-tw/library/bb934049.aspx )
-
建立主要金鑰
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<MasterKeyPasswordHere>';
-
建立或取得受到主要金鑰保護的憑證
CREATE CERTIFICATE ServerCertificate WITH SUBJECT = 'Server Certificate'; GO
-
建立資料庫加密金鑰,並使用憑證保護它
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128 ENCRYPTION BY SERVER CERTIFICATE ServerCertificate; GO
-
設定資料庫使用加密
ALTER DATABASE AdventureWorks2012 SET ENCRYPTION ON; GO
如果要將該加密的資料庫移到別的主機,則要先將憑證備份並到目的端主機重新建立該憑證
-- 憑證備份 BACKUP CERTIFICATE TestSQLServerCert TO FILE = 'TestSQLServerCert' WITH PRIVATE KEY ( FILE = 'SQLPrivateKeyFile', ENCRYPTION BY PASSWORD = '*rt@40(FL&dasl1' ); GO -- 憑證還原 CREATE CERTIFICATE TestSQLServerCert FROM FILE = 'TestSQLServerCert' WITH PRIVATE KEY ( FILE = 'SQLPrivateKeyFile', DECRYPTION BY PASSWORD = '*rt@40(FL&dasl1' ); GO
Partitioned Tables and Indexes( MSDN : http://msdn.microsoft.com/zh-tw/library/ms190787.aspx )
-
Partition function 決定資料分割的界限值,可以在函數上設定間隔值是屬於的哪一側 (左或右)。若未指定,LEFT 便是預設值。
-- 分割為四個區塊 CREATE PARTITION FUNCTION myRangePF1 (int) AS RANGE LEFT FOR VALUES (1, 100, 1000); GO
-
Partition scheme 決定使用的 Partition Function 和所對應存放的 FileGroup;但如果指定 ALL,則只能指定一個 FileGroup。在 2012 版本中最多可以指定 15,000 個 FileGroup,之前版本最多只能 1000 個。
CREATE PARTITION SCHEME myRangePS1 AS PARTITION myRangePF1 TO (test1fg, test2fg, test3fg, test4fg);
-
Partitioning column
CREATE TABLE PartitionTable (col1 int PRIMARY KEY, col2 char(10)) ON myRangePS1 (col1)
在使用上比較如果需要知道特定值是屬於哪個區塊內,可以用 $PARTITION 來配合 Partition Function 來使用,他會回傳一個從 1 開始的整數值,使用方式如下
SELECT $PARTITION.RangePF1 (10) ; GO
如果需要將 Partition Table 的內部份資料移到其他 Table,則可以透過 Alter Table Switch Partition 的方式來進行
CREATE TABLE PartitionTable (col1 int, col2 char(10)) ON myRangePS1 (col1) ; GO CREATE TABLE NonPartitionTable (col1 int, col2 char(10)) ON test2fg ; GO ALTER TABLE PartitionTable SWITCH PARTITION 2 TO NonPartitionTable ; GO
Copy Database Wizard
-
可以使用兩種方式進行資料庫複製:
- Detach and Attach method : 速度快,但來源資料庫要被離線進行檔案複製。
- SQL Management Object metho : 速度慢但可以讓資料庫還持續保持 online 的狀況。
- 除了複製資料庫之外, Copy Database Wizard 另外還可以針對其他像是登入帳號或者是 SQL Aent 的 JOB 進行複製,但 Source 來源資料庫一定要在 SQL 2000 以上才有支援。
Server Roles ( MSDN : http://msdn.microsoft.com/zh-tw/library/ms188659(SQL.110).aspx )
Role |
說明 |
sysadmin | 可以執行所有活動。 |
serveradmin | 可以變更伺服器的組態選項及關閉伺服器。 |
securityadmin | 可以管理伺服器登入及其屬性,具有 GRANT、DENY 及 REVOKE 伺服器層級權限設定給他人。 |
processadmin | 可以結束在伺服器中執行的處理序 |
setupadmin | 可以加入和移除連結伺服器。 |
bulkadmin | 可以執行 BULK INSERT 陳述式。 |
diskadmin | 可以管理磁碟檔案。 |
dbcreator | 可以建立、改變、卸除及還原任何資料庫。 |
public | 當未被授與或拒絕安全物件的特定權限時,該使用者會繼承授與該物件之 public 的權限。 |
Database Roles ( MSDN : http://msdn.microsoft.com/zh-tw/library/ms189121.aspx )
Role |
說明 |
db_owner | 可以在資料庫上執行所有的組態和維護活動,也可以卸除資料庫。 |
db_securityadmin | 可以修改角色成員資格及管理權限。 |
db_accessadmin | 可以針對登入帳號,賦予加入或移除資料庫的存取權。 |
db_backupoperator | 可以備份資料庫。 |
db_ddladmin | 可在資料庫中執行任何「資料定義語言」(DDL) 的命令。(可建立變更物件) |
db_datawriter | 可以加入、刪除或變更所有使用者資料表中的資料。 |
db_datareader | 可以從所有使用者資料表讀取所有資料。 |
db_denydatawriter | 不能加入、修改或刪除資料庫中使用者資料表的任何資料。 |
db_denydatareader | 不能讀取資料庫中使用者資料表的任何資料。 |
Application Roles ( MSDN : http://msdn.microsoft.com/zh-tw/library/ms190998(SQL.110).aspx )
-- 建立 CREATE APPLICATION ROLE weekly_receipts WITH PASSWORD = '987Gbv8$76sPYY5m23' , DEFAULT_SCHEMA = Sales; GO -- 變更 ALTER APPLICATION ROLE weekly_receipts WITH NAME = receipts_ledger; GO -- 刪除 DROP APPLICATION ROLE receipts_ledger GO
-- 指定使用 Application Role DECLARE @cookie varbinary(8000); EXEC sp_setapprole 'Sales11', 'fdsd896#gfdbfdkjgh700mM' , @fCreateCookie = true, @cookie = @cookie OUTPUT; GO -- 恢復到原本使用者 EXEC sp_unsetapprole @cookie; GO