搜尋此網誌

2011年6月23日 星期四

重建系統資料庫(SQL Server 2008 R2 )

重建系統資料庫

SQL Server 2008 R2
您必須重建系統資料庫,才能在 mastermodelmsdbresource 系統資料庫中修正損毀問題,或修改預設的伺服器層級定序。本主題將提供重建系統資料庫的逐步指示。

重建 master、model、msdb 和 tempdb 系統資料庫時,系統會在這些資料庫的原始位置中卸除並重新建立它們。如果您在重建陳述式中指定了新的定序,系統就會使用該定序設定來建立系統資料庫。使用者對這些資料庫所做的任何修改都將遺失。例如,您可能會在 master 資料庫中設有使用者定義的物件、在 msdb 中設有排程的作業,或在 model 資料庫中變更預設資料庫設定。
請在重建系統資料庫之前執行下列工作,以便確保您可以將系統資料庫還原成目前的設定。
  1. 記錄所有伺服器範圍的組態值。

    SELECT * FROM sys.configurations;
    
  2. 記錄所有套用至 SQL Server 執行個體的 Service Pack 和 Hotfix 以及目前的定序。您必須在重建系統資料庫之後重新套用這些更新。

    SELECT
    SERVERPROPERTY('ProductVersion ') AS ProductVersion,
    SERVERPROPERTY('ProductLevel') AS ProductLevel,
    SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
    SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime,
    SERVERPROPERTY('Collation') AS Collation;
    
  3. 記錄系統資料庫之所有資料和記錄檔的目前定序。重建系統資料庫會將所有系統資料庫安裝到其原始位置。如果您已將系統資料庫的資料或記錄檔移至不同的位置,就必須再次移動這些檔案。

    SELECT name, physical_name AS current_file_location
    FROM sys.master_files
    WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
    
  4. 找出 master、model 和 msdb 資料庫的目前備份。
  5. 如果 SQL Server 執行個體設定為複寫散發者,請找出散發資料庫的目前備份。
  6. 確定您擁有重建系統資料庫的適當權限。若要執行這項作業,您必須是系統管理員 (sysadmin) 固定伺服器角色的成員。如需詳細資訊,請參閱<伺服器層級角色>。
  7. 確認 master、model 和 msdb 資料與記錄範本檔案的複本都存在本機伺服器上。這些範本檔案的預設位置為 C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\Templates。這些檔案會在重建程序期間使用,而且它們必須存在,才能讓安裝程式順利執行。如果這些檔案已遺失,請執行安裝程式的修復功能,或手動從安裝媒體中複製這些檔案。若要在安裝媒體上找到這些檔案,請導覽至適當的平台目錄 (x86、x64 或 ia64),然後導覽至 setup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL.X\MSSQL\Binn\Templates。

下列程序會重建 master、model、msdb 和 tempdb 系統資料庫。您無法指定要重建的系統資料庫。若為叢集執行個體,您必須在使用中節點上執行此程序,而且必須先讓對應叢集應用程式群組中的 SQL Server 資源離線,然後再執行此程序。
這項程序不會重建 resource 資料庫。請參閱本主題後面的<重建 resource 資料庫程序>一節。

若要重建 SQL Server 執行個體的系統資料庫:

  1. 將 SQL Server 2008 R2 安裝媒體插入光碟機。
  2. 在 [命令提示字元] 視窗中,輸入下列命令。方括號是用來表示選擇性參數。請勿輸入方括號。使用 Windows Vista 作業系統並啟用使用者帳戶控制 (UAC) 時,執行安裝程式需要更高的權限。您必須以管理員的身分執行命令提示字元。
    Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName]
    參數名稱說明
    /QUIET 或 /Q指定安裝程式的執行不使用任何使用者介面。
    /ACTION=REBUILDDATABASE指定安裝程式要重新建立系統資料庫。
    /INSTANCENAME=InstanceName這是 SQL Server 執行個體的名稱。若為預設執行個體,請輸入 MSSQLSERVER。
    /SQLSYSADMINACCOUNTS=accounts指定要加入至 sysadmin 固定伺服器角色的 Windows 群組或個別帳戶。指定多個帳戶時,請以空格隔開這些帳戶。例如,您可以輸入 BUILTIN\Administrators MyDomain\MyUser。當您要指定的帳戶在帳戶名稱中包含空白時,請以雙引號括住該帳戶。例如,輸入 NT AUTHORITY\SYSTEM
    [ /SAPWD=StrongPassword ]指定 SQL Serversa 帳戶的密碼。如果執行個體使用混合驗證 (SQL Server 和 Windows 驗證) 模式,這就是必要的參數。
    安全性注意事項安全性注意事項
    sa 帳戶是已知的 SQL Server 帳戶,而且經常是惡意使用者的攻擊目標。請務必針對 sa 登入使用一個增強式密碼。
    請勿針對 Windows 驗證模式指定此參數。
    [ /SQLCOLLATION=CollationName ]指定新的伺服器層級定序。這個參數是選擇性的。如果沒有指定,就會使用伺服器的目前定序。
    重要注意事項重要事項
    變更伺服器層級定序並不會變更現有使用者資料庫的定序。所有新建立的使用者資料庫預設都會使用新的定序。
    如需詳細資訊,請參閱<設定和變更伺服器定序>。
  3. 當安裝程式完成系統資料庫的重建作業時,它就會返回命令提示字元,而且不會顯示任何訊息。您可以檢查 Summary.txt 記錄檔來確認此程序是否順利完成。這個檔案位於 C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Logs。

重建資料庫之後,您可能必須執行下列額外的工作:
  • 還原 master、model 和 msdb 資料庫的最新完整備份。如需詳細資訊,請參閱<備份和還原系統資料庫的考量>。
    重要注意事項 重要事項
    如果您已變更伺服器定序,請勿還原系統資料庫。這樣做會將新的定序取代成先前的定序設定。
    如果無法使用備份,或者還原的備份並非最新備份,請重新建立任何遺漏的項目。例如,請針對您的使用者資料庫、備份裝置、SQL Server 登入、端點等重新建立所有遺漏的項目。重新建立項目的最佳方式是執行建立這些項目的原始指令碼。 
安全性注意事項 安全性注意事項
我們建議您保護指令碼的安全,防止它們遭受未獲授權的人員更改。
  • 如果 SQL Server 執行個體設定為複寫散發者,您就必須還原散發資料庫。如需詳細資訊,請參閱<備份與還原複寫的資料庫>。
  • 將系統資料庫移至您先前記錄的位置。如需詳細資訊,請參閱<移動系統資料庫>。
  • 確認伺服器範圍的組態值符合您先前記錄的值。

下列程序會重建 resource 系統資料庫。當您重建 resource 資料庫時,所有 Service Pack 和 Hotfix 都會遺失,因此必須重新套用。

若要重建 resource 系統資料庫:

  1. 從 SQL Server 2008 R2 散發媒體啟動 SQL Server 安裝程式 (setup.exe)。
  2. 在左側導覽區域中,按一下 [維護],然後按一下 [修復]
  3. 安裝程式支援規則和檔案常式將會執行,以便確保您的系統已安裝必要元件而且電腦通過安裝程式驗證規則。按一下 [確定][安裝] 繼續進行。
  4. 在 [選取執行個體] 頁面上,選取要修復的執行個體,然後按 [下一步]
  5. 修復規則將會執行,以便驗證作業。若要繼續進行,請按 [下一步]
  6. [已完成修復準備工作] 頁面中,按一下 [修復]。[完成] 頁面會指出作業已完成。

語法和其他執行階段錯誤會顯示在 [命令提示字元] 視窗中。您可以檢查安裝程式陳述式是否有下列語法錯誤:
  • 在每個參數名稱前面遺漏了斜線 (/)。
  • 在參數名稱與參數值之間遺漏了等號 (=)。
  • 在參數名稱與等號之間存在空格。
  • 存在逗號 (,) 或語法中並未指定的其他字元。
重建作業完成之後,請檢查 SQL Server 記錄檔是否有任何錯誤。預設記錄檔位置是 C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Logs。若要找出包含重建程序結果的記錄檔,請在命令提示字元中,將目錄變更為 Logs 資料夾,然後執行 findstr /s RebuildDatabase summary*.*。這項搜尋將會為您指出包含重建系統資料庫結果的任何記錄檔。您可以開啟這些記錄檔,然後檢查它們是否有相關的錯誤訊息。

在 INSTANCENAME 的說明中移除了錯誤的資訊。具名執行個體不需要指定伺服器名稱。
從<重建後的工作>中移除了套用最新 Service Pack 和任何適用 Hotfix 的需求。
在<重建系統資料庫程序>一節的步驟 1 中移除了從本機伺服器指向 setup.exe 的指示。

[SQL Server]談談SQL Server的定序(Collation)

[SQL Server]談談SQL Server的定序(Collation)

出處:http://www.dotblogs.com.tw/jimmyyu/archive/2009/08/30/10320.aspx


使用SQL Server的朋友們應該都知道SQL Server的資料庫有一個設定叫做定序(Collation),今天我們就來看看定序這東西是什麼,首先我們看一下Wiki上對定序的說明:



Collation is the assembly of written information into a standard order. One common type of collation is called alphabetisation, though collation is not limited to ordering letters of the alphabet. Collating lists of words or names into alphabetical order is the basis of most office filing systems, library catalogs and reference books..[Reference from here.]



這段話講得玄了點,我們看另一個比較易懂的說明:



Collation refers to a set of rules that determine how data is sorted and compared. Character data is sorted using rules that define the correct character sequence, with options for specifying case-sensitivity, accent marks, kana character types and character width.[Reference from here.]



這段話就簡潔多了,簡單來說定序指的就是決定資料被排序與比對的規則,而比對的規則一般可粗分為幾大類:



定序的分類

•Case sensitivity(CS)

簡單來說就是區分大小寫,A跟a是不同的,如果是Case Insensitive(CI)的話A在排序或者查詢時就會被視為相同,也就是查詢A,連同a也會被查詢到。

•Accent sensitivity(AS)

代表的是腔調上的差別,a跟á、o跟ó在腔調上是相同的,那查詢時是要視為相同,如果是的話,那就是Accent Insensitive(AI),如果不是的話就視為Accent sensitive。

•Kana Sensitivity(KS)

日文中的片假名(Hiragana)與平假名(Katakana)如果被視為相同,那就是Kana Insensitive(KI),反之就是Kane sensitive.。

•Width sensitivity(WS)

當半形字與全型自被視為相同(A跟A),那就是Width Insensitive(WI),反之就是Width sensitive。

一般當我們在創建資料庫時,我們會看到好多選項:



SQL Server 2005支援的定序就有上百種了,而後頭的BIN、CA、AI、KS、WS等等就是上頭我們提到的那些Sensitive或Insensitive了,我們看一下MSDN上更詳細的說明:


其中的BIN跟BIN2是我們前面沒提到的,這兩個定序是比較特別的,與前方提到的各種Sensitive或者Insensitive的定序是有所差異的,這種定序的執行效率比其它定序來的好,針對非unicode的資料,它是自動以ANSI Code來做為排序與比較的依據(CI、AI、KI、WI),而針對unicode資料,它則是以Unicode做為排序與比較的依據,而一旦以Unicode作為排序依據,Latin_1_General_BIN跟Japanese_BIN這兩種定序查詢回來的資料將會一模一樣,因為當資料都是非unicode時,都以ANSI Code來處理;當資料都是unicode時,就以Unicode來處理,而也因為以上特性,目前大部分的系統也習慣將資料庫的定序設定為BIN結尾的。



以下是一些我們常見到的定序結尾,C、A、K、S類的定序是可以複合被使用的,但只有BIN類的是無法結合C、A、K、S的定序被使用,這也是因為上一段中提到的BIN類定序是ANSI或Unicode來做排序與比較的原則而來。



定序的層級

我們在SQL Server中可以在以下四個定序設定等級,我們分別可以透過SSMS或SQL Expression在伺服器、資料庫、Table的欄位上指定定序:



•Server

安裝時,SQL Server會要求你指定所想要的預設定序,而系統資料庫與後續新建的資料庫都會以這個定序為預設值,若後續要修改可以參考(因為要re-install原諒我無法測試):

Setting and Changing the Server Collation

•Database

針對某個特定資料庫設定其定序,除了使用SSMS的介面變更外,也可以透過Alter Database指令來變更:

ALTER DATABASE

•Column

針對某個欄位設定其定序,除了使用SSMS的介面變更外,也可以透過Alter Table的指令來變更:

Setting and Changing the Column Collation

•Expression

這部分的定序指定是在command透過collation的關鍵字來暫時複寫掉上面三個已經設定好的定序內容,相關用法可以參考:

COLLATE (Transact-SQL)

這些東西其實每天我們都會遭遇到,但因為目前SQL Server的相容程度與Unicode的盛行,讓我們可以免掉不少的困擾,連定序衝突的問題都不一定有機會遇到,不過上禮拜在客戶端到是遇到一次,所以就把在處理過程中查到的一些資料PO出來給大家參考參考囉。





** **補充資料****

SQL Server的Collate語法-定序名稱


CREATE DATABASE database_name 
    [ ON 
        [ PRIMARY ] [  [ ,...n ] 
        [ ,  [ ,...n ] ] 
    [ LOG ON {  [ ,...n ] } ] 
    ] 
    [ COLLATE collation_name ]
    [ WITH  ]
]
[;]



ALTER DATABASE [資料庫名稱] COLLATE [定序名稱]

繁體中文常用的定序名稱有:
Chinese_Taiwan_Stroke_CI_AS : 字典順序,不區分大小寫
Chinese_Taiwan_Stroke_CS_AS : 字典順序,區分大小寫。
建立資料庫或資料表時可以指定COLLATE那就是定序名稱,
可以指定的名稱列表如下
http://msdn.microsoft.com/zh-tw/library/ms180175.aspx




SQL2005
出處:http://blog.xuite.net/ro.tim/blog/20368709

變更伺服器定序
變更 SQL Server 2005 執行個體的預設定序是相當複雜的作業,需要執行下列步驟:
  • 確定已備妥重新建立使用者資料庫以及所有內含物件所需的所有資訊或指令碼。
  • 使用如大量複製這類工具來匯出所有資料。
  • 卸除所有使用者資料庫。
  • 重建 master 資料庫,以使用 setup 命令的 SQLCOLLATION 屬性來指定新定序。例如:
    start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=test SQLCOLLATION=SQL_Latin1_General_CP1_CI_AI
    如需有關重建 master 資料庫的詳細資訊,請參閱<如何:重建 SQL Server 2005 的 master 資料庫>。
  • 建立所有資料庫以及所有內含物件。
  • 匯入所有資料。




調整SQL資料庫定序 實例


Northwindmaster 調整定序為 Chinese_Taiwan_Stroke_CI_AS


查詢 Northwind 和 master 的定序
SELECT DATABASEPROPERTYEX('master', 'Collation')
SELECT DATABASEPROPERTYEX('Northwind', 'Collation')


查詢 Northwind 和 master 的定序
ALTER DATABASE Northwind COLLATE Chinese_Taiwan_Stroke_CI_AS
ALTER DATABASE master COLLATE Chinese_Taiwan_Stroke_CI_AS --無法 改變 資料庫 'master',因為它是系統 資料庫。

 SQL2000 系統資料庫 master 的定序調整
執行:C:\Program Files\Microsoft SQL Server\80\Tools\Binn\rebuildm.exe進行管理介面調整



SQL2005 系統資料庫 master 的定序調整
執行:cmd 開啟DOS 視窗
C:\Documents and Settings\Administrator>x: --變更到CD目錄下
X:>start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=xxx SQLCOLLATION=Chinese_Taiwan_Stroke_CI_AS -- 依提示,逐步完成設定

2011年6月10日 星期五

[轉載]要不要壓縮 Outlook Express 呢?

要不要壓縮 Outlook Express 呢?

出處:一抺淺藍部落格
時間:2010-06-10

最近我的 Outlook Express 老是出現這樣的訊息:
如要釋放磁碟空間,Outlook Express 可以壓縮郵件,這可能會需數分鐘時間。
"如要釋放磁碟空間,Outlook Express 可以壓縮郵件,這可能會需要數分鐘時間。"
到底要不要壓縮呢?磁碟空間還夠,郵件也沒有太多,卻在開機時一直問、打開 Outlook Express 也問、關閉也問。重點是,狠下心來壓縮,結果壓縮之後繼續問!

        如果您也遇到一樣的問題,在您決定要不要壓縮之前,讓我先來解釋一下這是怎麼回事。Outlook Express 儲存郵件,是根據所設定的資料夾為單位,一個資料夾儲存一個檔案。

例如您的郵件信箱為了分類,設定三個資料夾,分別叫做「熟朋友」、「半生不熟朋友」、「雞肋」,那麼系統就以三個檔案  "熟朋友.dbx"、"半生不熟朋友.dbx、雞肋.dbx 來儲存郵件。要尋找這些檔案的位置,請從選單上依次點選 [工具] / [選項] / [維護] / [檔案資料夾],就知道了。

 觀念:
為什麼要壓縮呢?簡單的來說,儲存郵件就好像不斷的把活頁紙夾到活頁本一樣,一張一張疊起來。可是要講究效率,當刪除郵件時,不可能把中間一頁活頁紙拔出 來,剩下來後面的紙張一張一張也拔出來,一一往前補齊,這樣實在太慢了。因此刪除郵件的時候,就是那份不要的郵件仍在,但是打個叉叉,以後閱讀的時候就跳 過去,這樣管理郵件實在快太多了。當然這樣做也有缺點,例如今天有 100 封垃圾信,統統刪除之後,其實還佔 100 封信的空間。而所謂「壓縮」,其實就是把打叉叉的信剔除掉,後面的信件一一往前推。

所以,當郵件越多,所謂「壓縮」的時間就越長。其實這裡我不免要抱怨一下,這應該是翻譯的問題,壓縮不是這個意思,這不過是重整而已,並沒有根據資料邏輯重新製作索引,不算典型的壓縮。
無論如何,按照道理如果您同意壓縮郵件,八九不離十能體驗到空間變得更節省。定時壓縮能減少很多錯誤的產生,甚至預防整本郵件毀損,所以當您看到提醒的時候,有時間的話不妨順手壓一壓吧!


警語出現的時機,不一定是檔案累積到一定的大小或數量,而是「時候到了」。Outlook Express 每開關 100 次就會提醒您要壓縮郵件資料夾,要是不理他,每次肯定沒完沒了,在您生氣的同時,請也體諒一下忠言逆耳呀!壓縮完畢,就會歸零重新算啦。

但問題是,有很多升級到 Windows XP SP3 的朋友,明明花了數個小時把幾萬封郵件都壓縮過了,為什麼立刻又出現提醒的警語呢?明明已經壓縮過還繼續問,分明沒有歸零啊!為什麼?既然忘了歸零我們就來幫忙歸零吧。

(1)請按一下 [開始] / [執行],打 regedit,再按 [確定],出現登錄編輯程式。

(2)依序打開資料夾,HKEY_CURRENT_USER, Identities,接著一組長長的碼,每個人都不一樣,請打開,接著繼續展開 Software, Microsoft, Outlook Express,接著點一下 "5.0"。

修改機碼


在右邊的窗格請點兩下 [Compact Check Count],這裡就是計算開關 Outlook Express 次數的地方。在數值資料請填 0。注意不要自作聰明填負數,這沒有用的。
修改機碼


接著按 [確定],關閉登錄編輯程式就可以了。



--------------------------------
原因:因為Outlook Express 6為了避免收件匣損毀,所以當OE啟動關閉達到100次,就會強制出現這個警告視窗

視窗:「如果要釋放磁碟空間,Outlook Express 可以壓縮郵件,這可需要數分鐘的時間」

解決方法:

1.「開始」->「執行」->「regedit」

2.選HKEY_CURRENT_USER\Identities\(OE的 UUID)\Software\Microsoft\Outlook Express\5.0

3.尋找Compact Check Count 這一個 key value。

4.修改Compact Check Count的值為0,就可以讓OE重新計數

--------------------------------



     要保養您的郵件資料夾,保持效率,避免資料流失,請記得要定時壓縮郵件資料夾。另外常用的資料夾,例如收件匣、寄件備份等,應該儘量保持簡單,也就是把郵件移到別的資料夾儲存,以免發生萬一的時候,信件流失,欲哭無淚啊!