搜尋本站文章

2010-12-23

SQL Server 2008 R2 版本,使用「指令碼產生精靈」,將資料表的資料,產生成 Insert 陳述式。

在 SQL Server Management Studio(SSMS) 2008 版本的管理工具之「指令碼精靈」,可以將資料表的資料,產生成 Insert 陳述式。

讓您可以很容易的將資料表以及其資料,轉移到新的環境上。
在 SQL Server 2005 版本時,需要另外安裝「SQL Server 資料庫發行精靈(SQL Server Database Publishing Wizard)」,才能具備此項功能。

以下是各個版本的整理說明:
在 SQL Server 2005 版本上,提供了額外安裝「資料庫發行精靈」。
在 SQL Server 2008 版本上,可以直接使用內建的「指令碼精靈」。
在 SQL Server 2008 R2 版本上,是提供了「產生和發佈指令碼」。


但是圖型介面的設定與先前版本都稍有不同,請參考 SQL Server 2008 R2 版本的實作步驟:

步驟01. 執行 SSMS 管理工具,連線到指定的 SQL Server 執行個體。
步驟02. 展開「資料庫」,選擇指定的資料庫,滑鼠右鍵,選擇「工作」\「產生指令碼」。


步驟03. 在「產生和發佈指令碼」視窗,點選「下一步」。請參考下圖所示:


步驟04. 在「選擇物件」頁面,若要編寫整個資料庫的指令碼,請選擇「編寫整個資料庫和所有資料庫物件的指令碼」;若要選取指定的物件,點選「選取特定的資料庫物件」。請參考下圖所示:



步驟05. 在選擇好後,點選「下一步」。
步驟06. 在「設定指令碼的儲存或發行方式」視窗,設定以下的選項。請參考下圖所示:


在「輸出類型」區域,點選「將指令碼儲存至特定位置」。
在「儲存至檔案」區域,點選「進階」。
在「進階編寫指令碼選項」視窗,在「要編寫指令碼的資料類型」區域,點選「結構描述和資料」。請參考下圖所示:



若僅是產生指定的資料表,請設定「編寫 Check 條件約束的指令碼」、「編寫外部索引鍵的指令碼」等選項。請參考下圖所示:



點選「確定」。
在「儲存至檔案」區域,在「要產生的檔案」方塊,點選「單一檔案」。
在「檔案名稱」區域,選擇此檔案要存放資料夾路徑。
在「另存新檔」區域,點選「Unicode 文字」。

步驟07. 點選「下一步」。
步驟08. 在「摘要」視窗,點選「下一步」。請參考下圖所示:

步驟09. 在「儲存或發佈指令碼」視窗,點選「完成」。請參考下圖所示:


步驟10. 檢視產生的指令碼。請參考下圖所示:




參考資料
將資料表的資料,產生成 Insert 陳述式:使用 SQL Server Management Studio 2008 指令碼精靈
http://sharedderrick.blogspot.com/2009/03/insert-sql-server-management-studio.html

使用「資料庫發行精靈」:Visual Studio 2008、SQL Server 2008、SQL Database Publishing Wizard
http://sharedderrick.blogspot.com/2009/02/visual-studio-2008sql-server-2008sql_27.html

2010-12-21

SSAS:將資料庫還原(Restore Database)到指定的資料夾路徑

在 SSAS(Analysis Services) 上備份的多維度資料庫,可以使用以下的方式於執行資料庫還原作業時,存放在指定的資料夾路徑。

步驟01. 執行 SSMS 管理工具,在「物件總管」上,設定連線到指定的 Analysis Server。
步驟02. 展開「資料庫」節點,滑鼠右鍵,選擇「還原資料庫」。

步驟03. 在「還原資料庫」視窗,設定以下的選項:
在「還原來源」區域,在「備份檔案」方塊,請自行輸入資料庫備份檔案的完整路徑與檔案名稱,例如:C:\DBC1.abf。


在「還原目標」區域,在「還原資料庫」方塊,輸入新的或是選擇既有的資料庫,例如:DBC1。
在「儲存位置」方塊,自行輸入要指定的資料夾路徑,這是用來存放資料庫的資料夾,例如:D:\mySSAS\DBCube。

請參考下圖所示:


步驟04. 點選「確定」,完成還原資料庫的作業。


經過測試,若你是在「還原資料庫」視窗,點選「瀏覽」圖示,這項功能是讓你選擇預設的資料夾路徑(可選擇預設的 BackupDir 或是 LogDir 資料夾路徑),並沒有提供讓你瀏覽資料夾的功能。
請參考下圖所示:



參考資料:
Analysis Server 屬性對話方塊 (Analysis Services - 多維度資料)
http://technet.microsoft.com/zh-tw/library/ms189366.aspx

管理備份與還原 (Analysis Services)
http://technet.microsoft.com/zh-tw/library/ms174874.aspx

SSAS(Analysis Services):將資料庫建立在指定的資料夾路徑

在 SSAS(Analysis Services) 上建立多維度資料庫,可以使用以下的方式於建立時,存放在指定的資料夾路徑。

步驟01. 執行 SSMS 管理工具,在「物件總管」上,設定連線到指定的 Analysis Server。
步驟02. 展開「資料庫」節點,滑鼠右鍵,選擇「新增資料庫」。

步驟03. 在「新增資料庫」視窗,在「儲存位置」區域,自行輸入要存放的資料夾路徑,例如:
D:\mySSAS\DBCube

請參考下圖所示:


步驟04. 點選「確定」,完成建立資料庫的作業。



經過測試,若你是在「新增資料庫」視窗,在「儲存位置」區域,點選「...」圖示,這項功能是讓你選擇預設的資料夾路徑(可選擇預設的 BackupDir 或是 LogDir 資料夾路徑),並沒有提供讓你瀏覽資料夾的功能。
請參考下圖所示:



參考資料:
Analysis Server 屬性對話方塊 (Analysis Services - 多維度資料)
http://technet.microsoft.com/zh-tw/library/ms189366.aspx

2010-12-15

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(7)

在前一期文章中,介紹了討論使用資料庫鏡像監視器,觀察鏡像狀態、執行容錯移轉,使用強制服務(可能會遺失資料)、繼續資料庫鏡像工作階段、移除資料庫鏡像、實作不具有自動容錯移轉的高安全性模式等主題。

在本期文章裡,將繼續實作具有自動容錯移轉的高安全性模式、使用手動容錯移轉、遺失主體伺服器,執行自動容錯移轉、遺失見證伺服器時,執行手動容錯移轉、遺失主體伺服器與見證伺服器時、使用Transact-SQL陳述式來建置資料庫鏡像、建立資料庫鏡像端點 、設定夥伴伺服器等主題。



更多相關的技術文章,請參考:DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/




參考資料:
新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(1)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring1.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(2)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring2.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(3)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring3.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(4)
http://sharedderrick.blogspot.com/2010/10/sql-server-2008database-mirroring4.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(5)
http://sharedderrick.blogspot.com/2010/08/sql-server-2008database-mirroring5.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(6)
http://sharedderrick.blogspot.com/2010/10/sql-server-2008database-mirroring6.html

2010-12-10

認識「維護清除工作」所使用的 xp_delete_file;「Maintenance Tasks」

在 SQL Server 2005 版本上提供了「維護計畫(Maintenance Plan)」,其中所使用的「維護清除工作(Maintenance Tasks)」,具備以下的功能:
移除與維護計劃相關的舊檔案 (包括維護計劃和資料庫備份檔案所建立的文字報表)。

請參考下圖所示:





經過測試 xp_delete_file 這個擴充預存程序,目前可以支援刪除的附檔名,例如:bak、trn、log 等。
此外,可能是為了安全起見,此 xp_delete_file 擴充預存程序可能會檢查檔案的檔頭資訊,確認是否為維護計劃所產生的相關舊檔案。
如果你是自行將某個檔案的附檔名,改為 bak,好像也是無法利用此程式來刪除之。

請參考以下的範例程式碼:
--01 範例說明:
EXECUTE master.dbo.xp_delete_file 
 0, -- 0 表示:刪除[備份檔案]。1 表示刪除[維護計畫文字報表]
 N'\\NAS02\dbbackup\sql2008', -- 主要目錄的完整路徑
 N'trn', -- 刪除檔案的副檔名,僅需副檔名即可,例如:bak,若是要全刪除資料夾內的檔案,填入: * 。
 N'12/12/2010 13:29:51', -- 刪除早於下列時限的檔案
 1 -- 1 表示:要包含第一層的子資料夾,若是沒寫,就不會包含第一層的子資料夾。

--02 刪除指定資料夾內的備份檔案
EXECUTE master.dbo.xp_delete_file 1, N'C:\myAdmin\Device', N'bak'


或許會有朋友詢問,為何不使用 xp_cmdshell 擴充預存程序呢?
可能的原因是:在某些環境上,系統設定不可以使用此擴充預存程序。


根據預設,xp_cmdshell 選項會在新安裝上「停用」,而且可以使用以原則為基礎的管理或執行 sp_configure 系統預存程序來啟用。


使用這個 xp_delete_file 這個擴充預存程序,或許可以解決部份問題。


在 SQL Server 2005 版本上,此「維護清除工作」之功能是有 Bug的,請升級到 SQL Server 2005 Service Pack 2 來修正。


參考資料:
xp_delete_file
http://sqlblog.com/blogs/andy_leonard/archive/2009/03/11/xp-delete-file.aspx

清除工作不會刪除資料庫維護計劃報表,在您安裝 SQL Server 2005 Service Pack 2
http://support.microsoft.com/kb/938085

xp_cmdshell 選項
http://msdn.microsoft.com/zh-tw/library/ms190693.aspx

2010-11-17

新手學SQL Server 2008「公用程式控制點(UCP)」(2)

在前次的文章中,我們討論了認識「公用程式」與「公用程式控制點」,如何建立「公用程式控制點」、檢視「公用程式管理資料倉儲(UMDW)」資料庫以及註冊「Managed 執行個體」等主題。

在本期文章中,繼續延續先前的實作練習,討論如何註冊「資料層應用程式(DAC)」、組態「Managed 執行個體」的全域原則、組態「Managed 執行個體」的個別原則、監視「Managed 執行個體」等。



更多相關的技術文章,請參考:DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/




參考資料:
新手學SQL Server 2008「公用程式控制點(UCP)」(1)
http://sharedderrick.blogspot.com/2010/11/sql-server-2008ucp1.html

2010-11-15

在 SQL Server 上,是否該停用「超執行緒(HT,Hyper-Threading」?

筆者整理了以下的討論,作為各位的參考依據:

在「Microsoft SQL Server 2008 Tuning Tips for PeopleSoft Applications」一文中,提到以下的描述:
Hyper-threading is Intel’s implementation of simultaneous multithreading technology. 
The performance benefits of using hyper-threading are dependent upon workload. 

For PeopleSoft applications, it is recommended that you disable hyper-threading for the database server via the BIOS as our lab testing has shown little or no improvement.


Be aware: To Hyper or not to Hyper 一文中提到:
需要依據工作負載、使用的硬體設備,以及執行的作業方式等,經過測試後來決定是否停用 「超執行緒(HT,Hyper-Threading」。
Great! The experiment confirms the theory. So does it mean you have to disable HT when using SQL Server? 
The answer is it really depends on the load and hardware you are using. 
 
You have to test your application with HT on and off under heavy loads to understand HT's implications. 
Keep in mind that not only lazywriter thread can cause slowdown but any thread that performs large memory scan - for example a worker thread that scans large amount of data might be a culprit as well. 
For some customer applications when disabling HT we saw 10% increase in performance. 

So make sure that you do your home work before you decide to hyper on not to hyper :-)


Course 2786B: Designing a Microsoft SQL Server 2005 Infrastructure 中提到:
Hyperthreading allows a CPU to execute multiple threads simultaneously. 
Consequently, the CPU throughput increases. 
A CPU that supports hyperthreading contains two architectural states on a single physical core. 

Each state acts as a logical CPU for the operating system. 
However, the two logical CPUs use the same execution resources, so you do not get the performance benefits of using two physical CPUs.

以及以下的描述:
4. Is hyperthreading beneficial for a database server? Why or why not?
Answers will vary. 
Under certain conditions, the performance of a database server may improve if hyperthreading is enabled. 
However, a hyperthreaded CPU is not as effective as a dual core CPU or two individual CPUs.


摘錄與整理胡百敬老師 在 SQL Server 似乎因 Hyperthreading 誤判 一文內的建議:
今天看到 MVP 的 mailing list 中討論,就微軟的回答,似乎 Hyperthreading 只適用於 OLTP 大量使用者存取,但其語法都很簡單的情況。

若 OLTP 單一 batch 很複雜,或是 DW/DSS/OLAP 以分析為主,需要大量平行運算的的工作,最好都使用實體的 CPU 數(不是主機板上的 socket 數),其理由為:SQL Server 以所有的 CPU 運算力都相同為前提,設計平行計畫。但 Hyperthreading 的 CPU 並非如此。其建議是:

•在語法上採用 MAXDOP <實體 CPU 數>。 
•可以針對連接透過 Resource Governer 設定 CPU 數,但非所有版本的 SQL Server 都能使用這項功能。 
當然,也可以透過執行個體的 max degree of parallelism 設定

KB 322385 超執行緒的環境中的 SQL Server 支援(SQL Server support in a hyper-threaded environment) 一文討論如下:

Performance
The performance of hyper-threaded environments varies. 
Conservative testing has shown 10 to 20 percent gains for SQL Server workloads, but the application patterns have a significant affect. 

You might find that some applications do not receive an increase in performance by taking advantage of hyper-threading. 
If the physical processors are already saturated, using logical processors can actually reduce the workload achieved.

For example, applications that cause high levels of contention can cause decreased performance in a hyper-threaded environment. 
We recommend that you test your application thoroughly to make sure that a hyper-threaded environment provides you the performance gain that you want versus the purchase of equivalent physical CPUs. Hyper-threading can be very helpful but hyper-threading cannot replace the full power of an additional physical CPU.





以下資料摘錄自「超執行緒 - 维基百科」一文:

Intel Core i7 系列的 CPU 支援超執行緒的技術,令到四核心的處理器,有總共8個執行緒(2010年推出的Core i7 980X 6核心系列將有12個執行緒)。

超執行緒(HT, Hyper-Threading)是英特爾所研發的一種技術,於2002年發佈。
超執行緒技術原先只應用於Xeon處理器中,當時稱為“Super-Threading”。之後陸續應用在Pentium 4中,將技術主流化。

運作方式
每個單位時間內,CPU只能處理一個執行緒,以這樣的單位進行,如果想要在單位時間內處理超過一個的執行緒,是不可能的。
除非是有兩個核心處理單元,英特爾的HT技術便是以單個核心處理單元,去整合兩個邏輯處理單元,也就是一個實體核心,兩個邏輯核心,在單位時間內處理兩個執行緒,模擬雙核心運作。

顧慮
由於處理器實際上只有一個核心,能夠提升的效能約為5~15%左右,且萬一發生資源互搶的情形時,整體效能反而會下拉。
這亦是AMD不提供虛擬雙核心處理器的理由。

另外,由於架構的不同,AMD的處理器對多工處理的表現會較好,所以沒有迫切性令產品支援相關的技術。

要令到電腦支持超執行緒技術,必須要軟體和硬體的配合。
處理器本身要支援超執行緒,晶片組亦要支援相關處理器。

為此,當時的Intel推出了新的晶片組,i865PE和i875P。
要充分發揮超執行緒的效能,使用者要使用Windows 2000之後的作業系統,而Windows XP家用版亦同樣支援超執行緒技術。

除了微軟的Windows外,Linux kernel 2.4.x亦開始支援該技術。
軟體方面,不是所有程式都可以發揮超執行緒,通常優化了多處理器的程式都可以支援到。

此類軟體通常是图形或视频处理軟體。早期,遊戲軟體的支援是比較少。
但隨著多核心技術的普及,愈來愈多遊戲軟體支援多線程的處理器。


參考文件:
Microsoft SQL Server 2008 Tuning Tips for PeopleSoft Applications
http://download.microsoft.com/download/E/C/5/EC567749-20C0-4DC5-99B7-FA7C77A097EA/PeopleSoft%20on%20SQL%202008.docx

Performance Tuning Guidelines for Windows Server 2008 R2
http://www.microsoft.com/whdc/system/sysperf/Perf_tun_srv-R2.mspx

Be aware: To Hyper or not to Hyper
http://blogs.msdn.com/b/slavao/archive/2005/11/12/492119.aspx

The Perils of Hyperthreading for SQL Server
http://sqlblog.com/blogs/kevin_kline/archive/2007/08/18/the-perils-of-hyperthreading-for-sql-server.aspx

Course 2786B: Designing a Microsoft SQL Server 2005 Infrastructure
http://www.microsoft.com/learning/en/us/course.aspx?ID=2786B&locale=en-us

超執行緒的環境中的 SQL Server 支援 SQL Server support in a hyper-threaded environment
http://support.microsoft.com/kb/322385/zh-tw

--
社群討論:
Is it still recommended to disable hyperthreading on computers running SQL Server?
http://social.msdn.microsoft.com/Forums/en-US/sqlsetupandupgrade/thread/4180d5b8-f0ce-4d27-8e90-a5bc64c64ef2

SQL Server 2008 R2, Switch Hyperthreading and Turbo Mode On or Off?
http://social.msdn.microsoft.com/Forums/en-US/sqlsetupandupgrade/thread/24b98bde-3b59-4f69-b9ba-2d7d931f7008

MICROSOFT SQL SERVER PERFORMANCE TUNNING
http://netic.wordpress.com/2010/02/17/microsoft-sql-server-performance-tunning/

SQL 2008 Hyper-Threading Support
http://stevenrobert.wordpress.com/2009/11/11/sql-2008-hyper-threading-support/

SQL Server 似乎因 Hyperthreading 誤判
http://byronhu.wordpress.com/2010/10/16/sql-server-%E4%BC%BC%E4%B9%8E%E5%9B%A0-hyperthreading-%E8%AA%A4%E5%88%A4/

超執行緒 - 维基百科
http://zh.wikipedia.org/zh/%E8%B6%85%E5%9F%B7%E8%A1%8C%E7%B7%92

--
Intel® Hyper-Threading Technology (Intel® HT Technology)
http://www.intel.com/technology/platform-technology/hyper-threading/index.htm

超執行緒有損伺服器效能?
http://www.zdnet.com.tw/enterprise/topic/server/0,2000085723,20102668,00.htm

KB:954835_有多核心處理器電腦上您可能無法安裝 SQL Server 2005
在 Microsoft SQL Server 2008 中,不會發生這個問題。
http://support.microsoft.com/kb/954835

2010-11-13

檢視 SQL Server 「登入失敗(Login Failures)」報表

適用版本:SQL Server 2005、2008、R2。

系統預設有啟動對「登入失敗」的事件執行記錄。

在 SSMS 管理工具上,可以使用以下的步驟來檢視此報表:
步驟01. 在「物件總管」上,連線到指定的執行個體。
步驟02. 展開「安全性」\「登入」。
步驟03. 在「登入」節點上,滑鼠右鍵,選擇「報表」\「標準報表」\「登入失敗」。
請參考下圖所示:

但在 SSMS 管理工具內的報表,在呈現細部資料上,有些問題,改要為匯出成 Excel 檔案後,就可以閱讀細部的資料。
步驟如下:
步驟01. 在報表上,滑鼠右鍵。
步驟02. 選擇「匯出」\「Excel」。
請參考下圖所示:




若需要以 Transact-SQL 方式來查詢登入失敗的紀錄,則是去查詢「預設的追蹤(default trace)」所記錄的檔案。
其實,前述的圖型介面的報表之資料,也是來自於「預設的追蹤(default trace)」。

請參考以下的範例:
declare @curr_tracefilename varchar(500); 
declare @base_tracefilename varchar(500); 
declare @indx int ;
declare @temp_trace table (
 Error int
 ,StartTime datetime
 ,NTUserName nvarchar(128)collate database_default 
 ,NTDomainName nvarchar(128) collate database_default 
 ,HostName nvarchar(128) collate database_default 
 ,ApplicationName nvarchar(128) collate database_default 
 ,LoginName nvarchar(128) collate database_default 
 ,SPID int
 ,ServerName nvarchar(128) collate database_default 
 ,TextData nvarchar (max) collate database_default );

select @curr_tracefilename = path FROM sys.traces where is_default = 1 ; 
set @curr_tracefilename = reverse(@curr_tracefilename)
select @indx  = PATINDEX('%\%', @curr_tracefilename) 
set @curr_tracefilename = reverse(@curr_tracefilename)
set @base_tracefilename = LEFT( @curr_tracefilename,len(@curr_tracefilename) - @indx) + '\log.trc';

insert into  @temp_trace
 select Error, StartTime, NTUserName, NTDomainName, HostName, ApplicationName, LoginName, SPID, ServerName, TextData
 from ::fn_trace_gettable( @base_tracefilename, default ) 
 where EventClass = 20 --signifies login failed

select dense_rank () over (order by S.loginname) loginrank, (dense_rank () over (order by S.loginname))%2 as l_loginrank , T.Error
 , convert(nchar(20), T.StartTime,120) "HitDate", T.NTUserName, T.NTDomainName, T.HostName, T.ApplicationName
 , T.LoginName, T.SPID, T.ServerName, T.TextData
 , case when S.loginname is null then 'InvalidLoginName' else S.loginname end as loginname_1
 , case when T.Error in (18462,18463,18464,18465,18466,18467,18468,18471,18487,18488) 
                 then 4 --''Password Related Problems''
                 else case when T.Error in (18458,18459,18460) 
                                   then 2 --''Licensing Related Problems''
                                        else case when T.Error in (18452,18450,18486,18457) 
                                                          then 1 --''Authentication Related Problems''
                                                          else case when T.Error in(18451,18461) 
                                                                                then 5 --''Server''''s Mode of Operation''
                                    else case when T.Error in (17197) 
                                                                                                  then 6 --''Slow Server Response''
                                          else 3 --''Others'' 
                                     end
                            end
                                                 end
                          end
        end  "Type"
,       (dense_rank() over ( order by (case when T.Error in (18462,18463,18464,18465,18466,18467,18468,18471,18487,18488) 
                                                                                then 4 -- ''Password Related Problems''
                                                                                else case when T.Error in (18458,18459,18460) 
                                                                                         then 2 --''Licensing Related Problems''
                                                                                         else case when T.Error in (18452,18450,18486,18457) 
                                                                                                  then 1 --''Authentication Related Problems''
                                                                                                  else case when T.Error in(18451,18461) 
                                                                                                           then 5 --''Server''''s Mode of Operation''
                                                                                                           else case when T.Error in (17197) 
                                                                                                                    then 6 --''Slow Server Response''
                                                                                                                        else 3-- ''Others'' 
                                                                                                                        end
                                                                                                           end
                                                                                                  end
                                                                                         end
                                                                                end )))%2  as l1
,       (row_number() over ( order by (case when T.Error in (18462,18463,18464,18465,18466,18467,18468,18471,18487,18488) 
                                                                   then 4 --''Password Related Problems''
                                                                   else case when T.Error in (18458,18459,18460) 
                                                                                then 2--''Licensing Related Problems''
                                                                                else case when T.Error in (18452,18450,18486,18457) 
                                                                                         then 1 --''Authentication Related Problems''
                                                                                         else case when T.Error in(18451,18461) 
                                                                                                  then 5 --''Server''''s Mode of Operation''
                                                                                                  else case when T.Error in (17197) 
                                                                                                           then 6 --''Slow Server Response''
                                               else 3-- ''Others'' 
                                               end
                                          end
                                                                                         end
                                                                                end
                                                                   end ),T.StartTime desc))%2  as l2
from @temp_trace T 
left outer join sys.syslogins S on(T.LoginName = S.loginname)

請參考下圖所示:


參考資料:
預設的追蹤(Default Trace)之簡介,文章編號:S071006803
http://www.dbworld.com.tw/default.aspx

2010-11-10

下載 SQL Server code-named 「Denali」- Community Technology Preview 1 (CTP1)

在 2010/11/08,Microsoft 開發團隊公布了 SQL Server 2008 下一個版本 Code Name:Denali 的 Community Technology Preview 1 (CTP,社群技術預覽)版本的軟體,可供於下載與測試之用。

版本編號:11.0.1103.9。
目前僅提供英文版本。

下載的網址:
Microsoft® SQL Server® code-named 'Denali' - Community Technology Preview 1 (CTP1)



參考資料:
SQL Server Code-Named "Denali" CTP1 Release Notes
http://social.technet.microsoft.com/wiki/contents/articles/sql-server-code-named-quot-denali-quot-ctp1-release-notes.aspx

SQL Server Code-Named "Denali" CTP1 Release Notes
http://social.technet.microsoft.com/wiki/contents/articles/sql-server-code-named-quot-denali-quot-ctp1-release-notes/revision/17.aspx

SQL Server "Denali" What's New (Database Engine) -- MSDN 線上叢書
http://msdn.microsoft.com/en-us/library/bb510411(v=SQL.110).aspx

Microsoft® SQL Server® code-named 'Denali' - Community Technology Preview 1 (CTP1)
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6a04f16f-f6be-4f92-9c92-f7e5677d91f9

Microsoft Delivers SQL Server 2008 R2 Parallel Data Warehouse and the next version of SQL Server, SQL Server Code-Named “Denali”
http://blogs.technet.com/b/dataplatforminsider/archive/2010/11/09/microsoft-delivers-sql-server-2008-r2-parallel-data-warehouse-and-the-next-version-of-sql-server-sql-server-code-named-denali.aspx

2010-11-03

查詢 SQL Server 上面全部資料庫的檔案大小

可以快速查詢全部的資料庫,其包含了資料檔案、交易記錄檔案的大小。

適用版本:
SQL Server 2005、2008、2008 R2

SELECT DB_NAME(database_id) N'資料庫', physical_name N'實體檔案', type_desc N'檔案類型', state_desc N'檔案狀態', size*8.0/1024 N'檔案大小(MB)'
FROM sys.master_files

請參考下圖所示:


上述範例,只包含了資料檔案、交易記錄檔案的檔案大小,但不包含實際上使用的資料量。
可以參考:
顯示每一個資料庫的所使用的磁碟空間之完整版本


參考資料:
顯示每一個資料庫的所使用的磁碟空間之完整版本; Displays the disk space reserved and used by the each database
http://sharedderrick.blogspot.com/2008/01/displays-disk-space-reserved-and-used_02.html

檢視全部的資料庫,其交易記錄檔案所使用的空間資訊; Transaction log space usage statistics for all databases
http://sharedderrick.blogspot.com/2008/01/transaction-log-space-usage-statistics.html

檢視資料庫,其硬碟使用空間與資料實際使用空間;Displays the disk space reserved and used by the whole database
http://sharedderrick.blogspot.com/2008/05/displays-disk-space-reserved-and-used.html

查詢目前資料庫內,每一個資料表的磁碟空間使用資訊 -- Displaying disk space information about eyvery table
http://sharedderrick.blogspot.com/2008/05/displaying-disk-space-information-about.html

新手學SQL Server 2008「公用程式控制點(UCP)」(1)

在管理多台資料庫伺服器時,對於資料庫管理人員而言,需要一個能夠長時間觀察系統運行的工具,可以用來檢視系統在這段時間的執行狀況、耗用資源量等等

在 SQL Server 2008 R2 版本上提供了「公用程式控制點(UCP)」,讓資料庫管理人員可以長期間來觀察系統資源的使用量,藉此來分析系統的運作情形,以及推估系統的使用量。



更多相關的技術文章,請參考:DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

2010-10-25

SQL Server 2008 R2 版本的資料庫,無法在 SQL Server 2008 版本上使用;Error 948 The database 'xxx' cannot be opened because it is version 661. This server supports version 655 and earlier. A downgrade path is not supported.

幾個朋友詢問:在附加資料庫或是還原資料庫時,遇到以下的錯誤訊息:

訊息 1813,層級 16,狀態 2,行 1
無法開啟新資料庫 'R2V105016'。CREATE DATABASE 已經中止。
訊息 1813,層級 16,狀態 2,行 1
無法開啟新資料庫 'R2V105016'。CREATE DATABASE 已經中止。
訊息 948,層級 20,狀態 1,行 1
無法開啟資料庫 'R2V105016',因為版本為 661。這個伺服器支援 655 及更早的版本。不支援降級路徑。
--
訊息 1813,層級 16,狀態 2,行 1
Could not open new database 'R2V105016'. CREATE DATABASE is aborted.
訊息 1813,層級 16,狀態 2,行 1
Could not open new database 'R2V105016'. CREATE DATABASE is aborted.
訊息 948,層級 20,狀態 1,行 1
The database 'R2V105016' cannot be opened because it is version 661. This server supports version 655 and earlier. A downgrade path is not supported.
請參考以下的圖示:




經過詢問,這幾位朋友的使用情境是:
要將 SQL Server 2008 R2 版本的資料庫,佈署、附加到 SQL Server 2008 版本的環境上。

例如:程式設計師的開發環境,安裝的是 SQL Server 2008 R2 express 版本,但是客戶端伺服器機器是:SQL Server 2008 版本。

基本上,在新版本 SQL Server 上的資料庫,是沒辦法直接使用附加、還原的方式,將資料庫搬移到舊版本的 SQL Server 上。

也提醒各位:
SQL Server 2008 R2 與 SQL Server 2008 是不同的版本;SQL Server 2008 R2 是目前最新的版本。

SQL Server 2008 R2 版本的資料庫,是無法在 SQL Server 2008 版本上使用。


以下提供查詢 SQL Server 以及資料庫的版本資訊之方式:

/*  DATABASEPROPERTYEX (Transact-SQL)  
傳回指定資料庫選項的目前設定,或指定資料庫的屬性。

語法範例:
DATABASEPROPERTYEX('資料庫名稱','Version')

屬性:Version
建立資料庫所用 SQL Server 程式碼的內部版本號碼。僅供參考之用。不支援。我們無法保證未來的相容性。

-- 請勿再使用 DATABASEPROPERTY 語法
DATABASEPROPERTY (Transact-SQL) 
傳回指定資料庫和屬性名稱的具名資料庫屬性值。

重要事項: 
下一版的 Microsoft SQL Server 將不再提供此功能。
請勿在新的開發工作中使用此功能,並且儘速修改使用此功能的應用程式。 
請改用 DATABASEPROPERTYEX。 
*/
-- 查詢 SQL Server 執行個體的版本,資料庫的內部版本等資訊
USE master
GO
SELECT SERVERPROPERTY('ProductVersion') N'執行個體的版本', 
 SERVERPROPERTY('ProductLevel') N'執行個體的版本層級',
 DATABASEPROPERTYEX('master','Version') N'資料庫的內部版本號碼';
請參考以下的圖示:

以下為 SQL Server 2008 R2 版本的資訊:

以下為 SQL Server 2008 版本的資訊:



若是將 SQL Server 2008 版本的資料庫,附加到 SQL Server 2008 R2 版本上。
也就是說:
將舊版的資料庫,附加到新版本的 SQL Server 上,將會看到以下類似的訊息:

將資料庫 'DB2' 從版本 655 轉換為目前版本 661。
資料庫 'DB2' 正在執行從版本 655 升級到版本 660 的步驟。
資料庫 'DB2' 正在執行從版本 660 升級到版本 661 的步驟。
--
Converting database 'DB1' from version 655 to the current version 661.
Database 'DB1' running the upgrade step from version 655 to version 660.
Database 'DB1' running the upgrade step from version 660 to version 661.

請參考以下的圖示:




可能的處理方式:

SQL Server 2008 R2 版本,使用「指令碼產生精靈」,將資料表的資料,產生成 Insert 陳述式。
http://sharedderrick.blogspot.com/2010/12/sql-server-2008-r2-insert.html

將資料表的資料,產生成 Insert 陳述式:使用 SQL Server Management Studio 2008 指令碼精靈
http://sharedderrick.blogspot.com/2009/03/insert-sql-server-management-studio.html

使用「資料庫發行精靈」:Visual Studio 2008、SQL Server 2008、SQL Database Publishing Wizard
http://sharedderrick.blogspot.com/2009/02/visual-studio-2008sql-server-2008sql_27.html


參考資料:
DATABASEPROPERTYEX (Transact-SQL)
http://technet.microsoft.com/zh-tw/library/ms186823.aspx

DATABASEPROPERTY (Transact-SQL)
http://technet.microsoft.com/zh-tw/library/ms176049.aspx

2010-10-20

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(6)

在前一期文章中,介紹了認識自動修復頁面、可嘗試執行自動修復頁面的錯誤類型、無法自動修復的頁面類型、認識自動修復頁面的動作順序、認識 suspect_pages 資料表等主題,並帶領各位按部就班來準備「資料庫鏡像」基礎環境與建置高效能模式的環境等主題。

在本期文章裡,將繼續討論使用資料庫鏡像監視器,觀察鏡像狀態、執行容錯移轉,使用強制服務(可能會遺失資料)、繼續資料庫鏡像工作階段、移除資料庫鏡像、實作不具有自動容錯移轉的高安全性模式等主題。



更多相關的技術文章,請參考:DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/





參考資料:
新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(1)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring1.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(2)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring2.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(3)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring3.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(4)
http://sharedderrick.blogspot.com/2010/10/sql-server-2008database-mirroring4.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(5)
http://sharedderrick.blogspot.com/2010/08/sql-server-2008database-mirroring5.html  

2010-10-13

設定「大型物件(LOB)」資料同步最大之上限,以使用「交易式複寫(Transactional Replication)」技術為例;Error: 7139

若是資料表中使用到資料類型:text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)等,一般統稱為「大型物件(Large Object,LOB)」。

雖然這類的資料類型,可以存放到 2 GB的資料量。
而且在使用「交易式複寫」上,也是可以使用到這些「大型物件(Large Object,LOB)」。

但是依據預設值,最大可以進行複寫資料是:65536 (位元組,Byte)。
換算下來,差不多是:65536/1024/1024 = 0.0625 (MB)。

若是資料量超過上限,將會遭遇到以下的錯誤訊息,請參考下圖所示:
Error: 7139, Severity: 16, State: 1
Length of LOB data (247504) to be replicated exceeds configured maximum 65536.
The statement has been terminated.
--
訊息 7139,層級 16,狀態 1,行 7
要複寫的 LOB 資料 (67504) 長度超過設定的最大值 65536。
陳述式已經結束。




調整 max text repl size 選項,可以使用 T-SQL 與 SSMS 管理工具來實踐。

(1)使用 T-SQL 陳述式來調整:
--01 查詢是否已經啟用 max text repl size (B)
-- 預設值為 65536,-1 表示沒有任何限制 (除了資料類型所加諸的限制以外)。
SELECT name N'組態選項的名稱', value N'針對這個選項所設定的值', value_in_use N'這個選項目前有效的執行值',  
 description N'組態選項的描述'  ,minimum N'組態的最小值', maximum N'組態的最大值'
FROM sys.configurations  
WHERE name='max text repl size (B)'  
請參考下圖所示:

--02 設定啟用 max text repl size (B) :使用 sp_configure 來啟用 max text repl size (B)
-- 設定會立即生效,伺服器不必重新啟動。
USE master;  
GO  
EXEC sp_configure 'show advanced option', '1';  
GO  
RECONFIGURE  
GO  
--  
EXEC sp_configure'max text repl size (B)'  , '-1'  
RECONFIGURE WITH OVERRIDE  
GO  
  
--03 再度查詢是否已經啟用 max text repl size (B)
SELECT name N'組態選項的名稱', value N'針對這個選項所設定的值', value_in_use N'這個選項目前有效的執行值',  
 description N'組態選項的描述'  ,minimum N'組態的最小值', maximum N'組態的最大值'
FROM sys.configurations  
WHERE name='max text repl size (B)'  
請參考下圖所示:



(2)使用 SSMS 管理工具來調整:
步驟01. 在SSMS管理工具,在「物件總管」,點選指定的伺服器,滑鼠右鍵,選擇「屬性」。

步驟02. 在「伺服器屬性」視窗,點選「進階」頁籤,在「其他」區域,設定「文字複寫大小上限」的屬性值。
請參考下圖所示:



關於 max text repl size 選項

max text repl size 選項可用來指定在單一 INSERT、UPDATE、WRITETEXT 或 UPDATETEXT 陳述式中,可以加入至複寫資料行或擷取資料行中的 text、ntext、varchar(max)、nvarchar(max)、varbinary(max)、xml 和 image 資料的大小上限 (以位元組為單位)。
預設值為 65536,-1 表示沒有任何限制 (除了資料類型所加諸的限制以外)。

這個選項適用於「交易式複寫」和「異動資料擷取」。當同時針對交易式複寫和異動資料擷取設定伺服器時,指定的值會套用到這兩個功能。
快照式複寫與合併式複寫會忽略這個選項。

設定會立即生效,伺服器不必重新啟動


交易式複寫在使用大型物件 (LOB) 資料類型的考量:

在使用「交易式複寫」上,若是資料表中使用到資料類型:text、ntext、image,建議請改用:varchar(max)、nvarchar(max)、varbinary(max)來取代。

如果您使用的是 text、ntext 或 image,請注意下列問題:

(1)WRITETEXT 和 UPDATETEXT 陳述式應在外顯交易中換行。

(2)記錄文字作業可透過使用已發行資料表上具有 WITH LOG 選項的 WRITETEXT 與 UPDATETEXT 來複寫。 WITH LOG 選項是必要的,因為交易式複寫會在交易記錄中追蹤變更。

(3)只有所有的「訂閱者」都執行 SQL Server,才能使用 UPDATETEXT 作業。 WRITETEXT 作業複寫為 UPDATE 陳述式,因此它們也可以與非 SQL Server 訂閱者一起使用。

(4)可設定的參數 max text repl size 會控制可複寫的 text、ntext 、varchar(max)、nvarchar(max) 和 image 資料的最大值 (以位元組為單位)。
這允許支援:ODBC 驅動程式和 OLE DB 提供者;無法處理這些資料類型大數值的 SQL Server Database Engine 執行個體;以及擁有系統資源 (虛擬記憶體) 條件約束的「散發者」。
當其中一個資料類型的資料行發行後,且執行超過設定限制的 INSERT、UPDATE、WRITETEXT 或 UPDATETEXT 作業時,作業就會失敗。

(5)發行 text、ntext 和 image 資料行時,應擷取與 UPDATETEXT 或 WRITETEXT 作業相同交易之內的文字指標 (並可重複讀取)。
例如,不要在某一個交易中擷取文字指標,然後在另一個交易中使用。 它可能已經移動過而且已經無效。


參考資料:
交易式複寫考量
http://technet.microsoft.com/zh-tw/library/ms151254.aspx

max text repl size 選項
http://msdn.microsoft.com/zh-tw/library/ms186225.aspx

sp_configure (Transact-SQL)
http://technet.microsoft.com/zh-tw/library/ms188787.aspx

2010-10-08

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(4)

在前一期文章中,介紹了認識資料庫鏡像的角色切換、自動容錯移轉、手動容錯移轉、輪流升級、強制服務(可能會遺失資料)、資料庫鏡像端點、設定資料庫鏡像端點的存取權、建置資料庫鏡像的相關注意事項等主題。

在本期文章裡,將繼續討論識鏡像狀態、監視資料庫鏡像、資料庫鏡像監視器、資料庫鏡像狀態資料表、設定警示的臨界值等主題。

完整的文章,請參考:第104期之一《新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(4)》


更多相關的技術文章,請參考:DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/





參考資料:
新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(1)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring1.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(2)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring2.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(3)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring3.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(5)
http://sharedderrick.blogspot.com/2010/08/sql-server-2008database-mirroring5.html