2011年4月30日 星期六

Crystal Reports與ASP.NET網路送印問題處理與分享

        最近接到一個需求,當使用者希望將原本的報表(Crystal Reports)直接送印到報表主機上的某一台印表機時,該如何進行,基本上程式不困難,但因為這個問題主要由是作業系統造成(Q152451 、 Q184291),所以需進行相關的修正後,程式的寫法也需要調整過才能進行,所以我在這整理一下我的作法並分享出來。

         很多人會問為何不要當報表打開後再直接手動按列印即可,何必要這個功能,但是你想如何有一個單位每天有幾百張報表要印,每一張都要等個10幾秒,那直接送印是不是就可以當掉許多的時間,而目前大部份的使用者在處理這個問題上,大部份都是在客戶端也需要裝上相對的驅動程式,才可以進行直接送印,但是這樣一來在日後部署上就會有問題,而且維護成本也會相對的變重。

設定的步驟如下:

1、先設定IIS的執行身份,這個問題主要是由於當進行網路列印時,Windows並不會指定帳號,所以必須指定固定帳號,並設定印表機的執行身份與權限。
設定伺服器端列印

存取 Machine.config 檔,其預設位置如下:
C:\WINNT\Microsoft.NET\Framework\<VersionNumber>\CONFIG\

<VersionNumber> 是安裝在電腦上的 .NET Framework 的版本。帳戶設定是位於這個檔案的 <ProcessModel> 標記內。帳戶的預設值是:userName="machine" password="AutoGenerate"

請編輯 Machine.config 檔中的組態設定。將預設值變更為:
userName="SYSTEM" password="AutoGenerate"


儲存檔案。
現在就能夠將伺服器上的列印權限賦與本機 SYSTEM 帳戶。

如果印表機是網路印表機,請將此網路印表機公開給本機 SYSTEM 帳戶。
當印表機安裝在電腦上時,這個印表機的設定會儲存在登錄中;而登錄是位於 HKEY_CURRENT_USER 登錄群組 (登錄檔) 之下。IIS 處理序永遠不會使用這個登錄群組,因為它一定是在本機系統帳戶的內容下執行,並且無法以「目前使用者」的身份登入伺服器。根據預設,SYSTEM 帳戶在登錄中並沒有設定任何印表機。有兩篇 Microsoft Knowledge Base 文件,Q152451Q184291 會說明如何將印表機設定公開給 System 帳戶。這兩篇文件都會要求您編輯 Web 伺服器上的登錄,並且將印表機設定從 HKEY_CURRENT_USER 群組複製到 HKEY_USERS/.DEFAULT 群組。

2、設定指定帳號後,就需要透過設定登錄檔的方式指定System帳號的可用印表機有那些。

您可以設定 SYSTEM 帳戶如果要解決這個問題的印表機。 若要設定 SYSTEM 帳戶的印表機,執行下列步驟:
這個方法會要求您修改使用 「 登錄編輯程式 」 登錄。
警告: 不當使用 「 登錄編輯器 」 可能會導致嚴重的全系統的問題,必須重新安裝 Windows 修正它們。 Microsoft 無法保證任何因使用登錄編輯程式所造成的問題可以獲得解決。使用此工具,請自行負擔相關的風險。
確定您目前登入伺服器的使用者具有您想要安裝的印表機。
啟動登錄編輯程式 (Regedit.exe)。
選取下列機碼:
      HKEY_CURRENT_USER
         \Software\Microsoft\Windows NT\Current Version\Devices

按一下 [登錄] 功能表的 [匯出登錄檔案]。
在 [檔案名稱] 文字方塊中,輸入 c:\Devices.reg。
選取下列機碼:
      HKEY_CURRENT_USER
         \Software\Microsoft\Windows NT\Current Version\PrinterPorts

按一下 [登錄] 功能表的 [匯出登錄檔案]。
在 [檔案名稱] 文字方塊中,輸入 c:\PrinterPorts.reg。
選取下列機碼:
      HKEY_CURRENT_USER
         \Software\Microsoft\Windows NT\Current Version\Windows

按一下 [登錄] 功能表的 [匯出登錄檔案]。
在 [檔案名稱] 文字方塊中,輸入 c:\Windows.reg。
從 [開始] 按鈕選取 [執行]。在執行] 對話方塊中鍵入 「 記事本 」 Devices.reg,「 記事本 」 開啟 Devices.reg。
文字 HKEY_CURRENT_USER 取代 HKEY_USERS\.DEFAULT
儲存檔案。然後匯入登錄連按兩下檔案,在 [檔案總管] 中。
對 PrinterPorts.reg 和 Windows.reg 重複執行修改後再匯入的步驟即可。
這些步驟僅適用於本機印表機。

若要以便 IIS 使用 SYSTEM 帳戶來列舉網路印表機請依照下列步驟執行。
附註網路服務帳戶下執行處理程序,明確的權限到新建立的登錄需要。
請確定您目前登入伺服器以使用者身分已安裝的所需的網路印表機。
啟動 「 登錄編輯程式 」。
按一下下列機碼:
HKEY_CURRENT_USER\Printers\Connections
在 [登錄] 功能表上按一下 [匯出登錄檔案]。
在 [檔案名稱] 方塊中,輸入 c:\printconns.reg。
在 「 記事本 」 開啟 printconns.reg 檔案,請按一下 [開始]、 按一下 [執行]、 在 [開啟] 方塊輸入 記事本 printconns.reg,然後按一下 [[確定]]。
取代文字 HKEY_USERS\.DEFAULT HKEY_CURRENT_USER 文字。
儲存檔案。
將檔案匯入到登錄,按兩下在 [檔案總管] 中的檔案。
重新啟動列印多工緩衝處理器 」 服務。


3、當瞬間的列印排程過多時,可能也會出現相同的錯誤訊息,所以可以透過修改登錄檔的方式進行調整,並將原本預設值從75調整放大,藉以減少列印排程超過設定值而造成錯誤發生。

HKEY_LOCAL_MACHINE\SOFTWARE\Business Objects \Suite 11.x\Report Application Server\InprocServer\PrintJobLimit

4、設定System帳號可以存取相關的印表機。




5、當修改完上述的設定值之後,在程式進行直接列印的部份也需要進行調整,不可用ReportDocument.PrintOptions.PrinterName的方式來指定,必須用PrinterSettings的方式來進行印表機的設定,C#程式碼如下:

舊有寫法:

rptDoc.PrintOptions.PrinterName = printerSettings.PrinterName;


新的寫法:

PrinterSettings printerSettings = new PrinterSettings();
PageSettings pageSettings = new PageSettings();
rd.PrintOptions.CopyTo(printerSettings, pageSettings);
printerSettings.PrinterName = PrinterName;
printerSettings.PrintRange = PrintRange.AllPages;
printerSettings.Collate = false;
printerSettings.Copies = 1;
pageSettings.PrinterSettings = printerSettings;
rd.PrintToPrinter(printerSettings, pageSettings, false);


參考網址:
1、http://msdn.microsoft.com/zh-tw/library/aa290045(v=vs.71).aspx
2、http://support.microsoft.com/kb/184291

關鍵字:Q152451 、 Q184291、Crystal Reports、網路送印、IIS、Server Print、PrintJobLimit、C#

2011年4月28日 星期四

有效維護資料庫的最佳秘訣

        這是一篇從TechNet Magazine找到的一篇文章,個人覺得非常有參考的價值,所以放置網址進行參考鏈結,但由於版權所以就不將文字放置於個人的部落格之中,再請大家參考。

綜覽:
管理資料和交易記錄檔
消除索引片段
確保準確、最新的統計資料
偵測損毀的資料庫頁面
建造有效的備份策略

參考網址:http://technet.microsoft.com/zh-tw/magazine/2008.08.database.aspx

2011年4月26日 星期二

SQL Server 2008 R2 SP1 CTP 開放下載測試

       SQL Server 2008 R2 SP1 CTP 包含多個更新的項目,並且修正相關客戶反應的問題項目,也包含支援增強和Windows 錯誤報告的部份,下列是主要的更新項目:



  • 擴展DMV(Dynamic Management Views)的支援:



  • sys.dm_exec_query_stats的DMV中有新增一個欄位去改善與支援執行過久的查詢,藉以進行問題排除。新的DMVs 和 XEvents 在查詢效能計數器上,可以用來說明與觀測OS的設定和資源,另外可以用來表示SQL Server Instance的交互關係。



  • 改善ForceSeek提示語的查詢效能:



    • FORCESEEK 索引提示語法上提供參數的方式允許可以控制Index,當然舊的語法還是可以正常運作,但是新的語法提供可以透過 'scan' 的參數進行存取Index,可以示需求決定是否進行語法上的置換。



  • 針對Data-tier Application Component Framework (DAC Fx)進行資料庫支援的改善:



    • 新的 Data-tier Application (DAC) Framework v1.1 和 DAC 更新精靈啟用新的資料庫結構管理與在地更新服務。這個新的更新服務將可以用來更新SQL Azure中已存在的資料庫結構和SQL Server技術支援經由DAC。一個DAC是一種entity,經由應用程式可包含資料庫的全部物件和instance物件。DAC提供一個單一單元編輯控制、部署和資料管理層的管理。關於更多的資訊,可以參考:Designing and Implementing Data-tier Applications.



  • PowerPivot對於磁碟快取控制:



    • 這個部份的更新將介紹二個新的設定,這個設定可以讓你決定快取在你的系統中保留的時間,而這個磁碟快取的設定放在PowerPivot的設定頁面中,你可以指定多久沒有動作後可以從記憶體中載出。你同樣能夠限制多久後可以刪除保留在磁碟中的快取。

    系統需求:


    • Supported Operating Systems:Windows Server 2003 R2 (32-Bit x86);Windows Server 2003 R2 x64 editions;Windows Server 2003 Service Pack 2;Windows Server 2008 R2;Windows Server 2008 Service Pack 2

      參考網址:
      ·         SQL Server 2008 R2 SP1 Express

      2011年4月22日 星期五

      挑戰SQL Server資料庫專家接班人

              近日接受IT-Home的專訪,日前終於上架了,這次的專訪主要是由於參加微軟的比賽得到名次,所以擁有的殊榮,為了保存這次的內容,所以特別收錄在我的Blog,下列的訊息是轉貼自PC-HOME的文字內容。




      學習SQL語言不難,但要精通管理資料庫卻不是件易事。目前任職鼎新電腦軟體工程師的徐振煒,在看過出神入化的SQL應用後,就決心要精通資料庫系統這個領域





      在今年的1月22日,臺灣微軟舉辦了「尋找下一個SQL Server 武林盟主」大會,並邀請了5位SQL Server領域知名的講師、技術顧問來擔任評審,目的是要選出新的SQL Server五虎將。不過,這比賽並不是這麼容易通過,需從上百人中一路過關斬將,才能進到決賽的10強。

      而這10強,還要在最後的上機考試應付詭譎多變的題目,勝出後才能成為五虎將。而目前在鼎新電腦擔任軟體工程師的徐振煒,就是這最後獲勝五人的其中一員。


      在神通電腦任職時,領教了SQL語法的威力
      一開始徐振煒對於SQL(Structured Query Language)的看法,跟許多程式設計師一樣,認為它沒什麼特別之處。這是因為他們學SQL時,大多是SELECT之類的基本指令,只要將資料取出即可,所以很少著重整體執行效率。而這經常讓SQL Server效率降低,所以他一度覺得SQL的資料庫很差。

      而這觀念,直到他進了神通電腦任職,並遇見一位姓汪的專案經理後,才徹底顛覆過來。徐振煒說,那時在神通電腦跟著經理進行過數個專案,每每都被他對SQL出神入化的應用技巧給嚇到。像某次專案,客戶要求他們用一個完全陌生的程式語言開發,結果經理依舊如期將專案完成。徐振煒說,雖然經理不熟悉該語言,但只要將複雜的運算交給SQL處理。如此一來,程式碼只要能執行資料庫存取的指令即可。

      還有一次專案,該報表系統太複雜,需要進行多個邏輯運算,極度地耗費CPU資源。徐振煒說,那時他用Java開發,他的方式是將資料撈出來後再進行運算。但因為資料量過大,該系統跑出一張報表最快也需要10分鐘,有時還會執行失敗。但是汪經理一樣用SQL開發,一張報表卻僅花2分鐘左右就完成,這是因為他將所有的運算與邏輯都在資料庫端處理掉。而這些專案,都讓徐振煒徹底對SQL改觀,並且開始學習相關的應用。



      程式設計師設計資料庫時,大多重應用面而無力兼顧管理面
      雖然在神通電腦工作打開了他對SQL的眼界,並且也學習了不少經驗。但管理資料庫管理系統的實力,卻非那時突飛猛進的。真正的轉變,是之後到了歌倫比亞美語集團上班磨練出來的,因為他同時負責系統開發與資料庫維護。那時,因為徐振煒也非專門的資料庫設計師,所以他當時從程式設計師的角度切入,大多都偏重應用面,管理面通常較無力兼顧。

      這在營運初期時,因為交易量小,所以負責好備份與回復的工作,大多還看不出問題。但隨著公司日漸壯大,交易量一天天的成長,他看到資料庫也跟著出問題,不是當機就是反應慢,有時甚至連問題錯在哪個環節都不清楚。

      那時,他請廠商來幫忙解決。但每個人大多都給他相同的答案:「資料庫換成Oracle就全部解決了,何必這麼辛苦?」。不過,那時的徐振煒已經對SQL語法的運用,有相當程度的了解。他知道並非工具的問題,而是在於人。如果管理者對於資料庫不了解,就算換再好的資料庫也是徒然。

      再加上,那時公司其他部門對於他的質疑。認為一個資料庫都搞不定,遇到問題就只會買設備解決,那對公司有何貢獻?因為這些事件的發生,讓徐振煒強迫自己去找解決的方法。

      那時公司用的是SQL Server 2000資料庫系統,而他覺得下一版2005在工具與效能上,都較前者好。所以決定將資料庫轉移到SQL Server 2005上,並且用資料庫內建的監測工具去觀察資料庫,並進行效能上的調整。再加上他期間不斷看書找資料,或參加研討會與學員或講師交換心得。因為這樣,讓他逐漸累積管理資料庫的實力。


      參加SQL Server的能力挑戰賽,竟然是因為獎品有XBOX
      目前為現任五虎將的徐振煒,當我問他為何參加「尋找下一個SQL Server武林盟主」大會?他笑說:一開始因為獎品是他夢寐以求的XBOX 360,所以他才決定參賽,不過最主要還是想驗證自己的實力。因為在公司使用SQL Server,畢竟是閉門造車,沒有到外面闖闖也不知道自己的程度到哪。


      而且,其實還有比XBOX 360更具誘惑的獎品,那就是與五位專家共進晚餐的機會。因為平時就經常參加相關的研討會,所以對這五位有基本認識,但以往都只能以學員的身分聽取授課,並沒有機會與時間能面對面交流。所以在得知有這機會後,使他對比賽更期待。

      由於SQL Server 武林盟主大會是第一屆舉辦,所以賽前的準備方向上較無跡可尋,但徐振煒也並不是坐等比賽開始。像他在賽前就努力翻閱SQL Server認證考試最新的考古題,或是上微軟論壇看SQL Server最常被網友提問的問題。甚至,他還追蹤了五位專家的部落格,觀察他們最近對於SQL Server的心得或感想,並依照這大方向去猜題。

      不過這樣的努力,只讓他猜中部份考題。徐振煒說,考題範圍實在太廣泛,根本預測不到會出什麼樣的題目。大多還是依靠日常的實戰經驗,才能順利通過考題。

      而五虎將的比賽過程,雖然他自己很緊張,但過程其實非常輕鬆。前半比賽大多採機智問答的形式進行,而後半部比賽則採上機考。在上機考時,每位學員皆會分配到一臺沒有網路的電腦,並且連SQL Server內建的小幫手功能都移除,這目的在於驗證選手的實力。

      上機考的考題則有五大項:資料庫維護、HA架構、Security、開發及其他。徐振煒說,要不是當初在歌倫比亞美語集團身兼開發及資料庫維護,他根本不可能對各項設定如此熟悉。

      而我們也好奇,徐振煒成為新一代的五虎將後,對他的生活帶來什麼變化?他笑說,成為五虎將後,目前並沒有給他帶來什麼變化。真要說的話,大概就是週遭同事得知他是SQL Server五虎將後,經常會尋求他的幫忙。

      而未來,徐振煒希望能繼續精進自己專業,成為一位SQL Server專家。並且希望自己,不單單成為一位顧問,而是能透過自己的專業出版相關書籍,來幫助更多的人了解與使用SQL Server。文⊙陳思翰

      陪伴學習SQL Server的工具書

      倍。而徐振煒在學習資料庫時,則有四本是他最喜歡的書。

      第一本《資料庫系統之理論與實務》是他在學校上課時用到的書,書中對於SQL語法的說明非常詳細,讓他的基本功練的非常紮實。第二本《SQL Server 2005 Performance Tuning效能調校》則是關於SQL Server效能調校,這本書幫助他解決不少工作上的問題。而書上的範例,在他解決問題時能有個對象比較解法,順便驗證自己的能力。
       
      而最後二本為原廠的Training Kit系列叢書,分別是《Training Kit | SQL Server 2008 資料庫開發》與《Microsoft SQL Server 2005 設計資料庫伺服器基礎架構》。這兩本徐振煒考證照時,提供了不少幫助。裡面不只有考古題,書中對於資料庫設定與說明都介紹的非常詳盡,重點是每個章節都會附上幾個範例說明,在練習時能更趨近於業界的實做。文⊙陳思翰




      其他內容請參考IT-HOME 499期的雜誌內容。


      參考連結:

      1. http://news.pchome.com.tw/magazine/report/ct/iThome/4353/130314240089307075007.htm
      2. http://210.59.230.11/magazine/this/ct/iThome/4353
      3. http://www.ithome.com.tw/itadm/article.php?c=67156

      2011年4月19日 星期二

      如何使用 T-SQL 與 ADO.Net 操作 SQL Server 2008 - Filestream的功能(內附原始碼)

              由於上次推出 [啟用與設定SQL Server 2008 新功能 - FileStream] 的介紹後,本篇我再來說明一下如何利用,T-SQL與ADO.NET來使用FileStream的新功能。同樣的我先把上一期介紹過的Table Schema貼上來給大家參考,然後再利用T-SQL的方式來進行介紹。

      Table Schema:

      CREATE TABLE [dbo].[cary_files](
      [sn] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE,
      [systemid] [int] NOT NULL,
      [filedata] [varbinary](max) FILESTREAM NULL
      ) ON [PRIMARY]
      GO;


      我先利用Insert的指令寫入資料表中,先嘗試利用空值(Null)寫入FileStream的欄位中。

      INSERT INTO [cary_db].[dbo].[cary_files]
      VALUES (newid (), 1, NULL);

      再將空字串('')寫入FileStream的欄位中。

      INSERT INTO [cary_db].[dbo].[cary_files]
      VALUES (newid (), 2,
      CAST ('' as varbinary(max)));

      最後再將文字內容('test data')整個寫入到FileStream的欄位中。

      INSERT INTO [cary_db].[dbo].[cary_files]
      VALUES (newid (), 3,
      CAST ('test data' as varbinary(max)));

      查詢結果:

      SELECT [sn] ,[systemid] ,[filedata]
      FROM [cary_db].[dbo].[cary_files]







      寫入的資料如果只是純文字的話,可以透過下列的語法進行轉型,即可得知欄位的內容。

      SELECT [sn] ,[systemid] ,cast([filedata] as varchar(100)) ac
      FROM [cary_db].[dbo].[cary_files]








      如果想要針對FileStream的欄位進行修改時,同樣地可以使用Update來進行更新,此步驟主要將原本的 'test data' 更改為 'Cary test data'。

      UPDATE [cary_db].[dbo].[cary_files]
      SET [filedata] = CAST('Cary test data' as varbinary(max))
      WHERE [SerialNumber] = 3;


      刪除的話,使用Delete即可。

      DELETE [cary_db].[dbo].[cary_files]
      WHERE SerialNumber = 1;


       以上的介紹主要透過T-SQL的語法來操作FIleStream,當然你可以包含在一個交易中,確保文件與資料的同步化,因為在以往如果只有文件的路徑存在資料庫,異動分成兩個程序時,如果有一邊失敗,容易造成資訊與文件不同步的情況,所以存放在FileStream算是一個不錯的選擇。

      接下來我再透過ADO.Net的方式來操作剛剛建立的FIleStream,另外我再介紹如何將一個圖檔寫入FileStream後,再讀取出來。

      範例:











      在介紹前先說明一下程式中主要會使用到兩個Function,我先列出在下面進行說明,然後程式會從FileStream的欄位中,讀取出資料,並載入右邊空白的Picture的物件中,而寫入FileStream的程式碼也是大致相同,差別在 FileAccess.Read中要改用FileAccess.Write,然後在寫入資料庫中即可,另外我也有介紹如何利用程式將FileStream中的文字轉出,詳細的部份再請參考程式碼。


      • PathName:會將路徑當做 Token 傳給 BLOB。應用程式會使用此 Token 來取得 Win32 控制代碼,並在 BLOB 資料上運作。
      • GET_FILESTREAM_TRANSACTION_CONTEXT():會傳回代表工作階段之目前交易的 Token。應用程式會使用此 Token 將 FILESTREAM 檔案系統資料流作業繫結至此交易。


      FileStream to Image:

      using (SqlConnection connection = new SqlConnection(ConnectionString))
      {
          connection.Open();
          SqlCommand command = new SqlCommand("", connection);

          SqlTransaction tran = connection.BeginTransaction(
             System.Data.IsolationLevel.ReadCommitted);
          command.Transaction = tran;

          command.CommandText =
                " SELECT [filedata].PathName(), "
              + " GET_FILESTREAM_TRANSACTION_CONTEXT () from [cary_db].[dbo].[cary_files]"
              + " WHERE systemid = 2";
          using (SqlDataReader reader = command.ExecuteReader())
          {
              while (reader.Read())
              {
                  // Get the pointer for the file
                  string path = reader.GetString(0);
                  byte[] transactionContext = reader.GetSqlBytes(1).Buffer;

                  // Create the SqlFileStream
                  SqlFileStream fileStream = new SqlFileStream(path,
                                          (byte[])reader.GetValue(1),
                                              FileAccess.Read,
                                              FileOptions.SequentialScan, 0);

                  pic_target.Image = Image.FromStream(fileStream);

                  // Read the contents as bytes and write them to the console                      
                  fileStream.Close();
              }
          }
          tran.Commit();
      }


      FileStream to String:

      SqlFileStream fileStream = new SqlFileStream(path,
      (byte[])reader.GetValue(1),
      FileAccess.Read,
      FileOptions.SequentialScan, 0);

      byte[] contents = new byte[fileStream.Length];
      fileStream.Read(contents, 0, (int)fileStream.Length);
      string results = System.Text.Encoding.ASCII.GetString(contents);


      原始下載:
      http://blogger-files.googlecode.com/files/TestFormApplication.rar

      參考網址:
      http://technet.microsoft.com/zh-tw/library/cc645962.aspx
      http://msdn.microsoft.com/zh-tw/library/cc716724.aspx#Y700
      http://msdn.microsoft.com/zh-tw/library/bb933877(v=SQL.100).aspx

      2011年4月18日 星期一

      Outlook當機問題與修復方式

              最近開始轉用Outlook,因為必須把相關的信件收到本機端,另外還有他的相關功能非常的好用,由其是行事曆的功能,另外我本身有使用Rainlendar,所以可以透過此軟體進行GoogleOutlookRainlendar之間的資訊同步化,但是使用Outlook一陣子之後,開始發現常常會收信收到一半就當機,要不然就是寄信寄不出去,問題蜂擁而至,需要不斷的重新啟動軟體,與朋友討論的結論後,發現大家也有相同的問題,但是都沒有比較好的解決方法,在我快放棄的同時,我終於找到解決這個問題的方法,基本上Outlook的信件與個人資訊都是放在.pst的檔案上,所以此檔案如果因當機或不正常關機時,可能會有檔案毀損的情況發生,所以可以透過下列的教學進行.pst檔案的修復即可,目前檔案修復後就一切正常了,而且也不會再發生Outlook當機的情況,目前已過了2個禮拜左右,正常使用中。

      程式名稱:ScanPST.exe
















      參考連結:
      http://support.microsoft.com/kb/2495970/zh-tw

      2011年4月14日 星期四

      SQL Server:SQL Server 專家的十個秘密

      以下的內容是我從TechNet Magazine轉載來的資訊,個人覺得非常有參考的價值,但原文是英文的而在TechNet上文字好像是以簡體為主,所以我又整理了一下,其中在儲存設備的部份我又加入了個人文章的鏈結,再提供給大家參考。

      維護 SQL Server 環境可能是一項非常複雜的任務。您可以通過本文提供的十種方式來降低複雜性並減輕壓力。

      原作者:Paul S.Randal
      過去數年來,許多公司紛紛精簡了其 IT 部門。很多資料庫管理員 (DBA) 不得不承擔大量的 SQL Server 資料庫管理工作。更糟糕的是,往往公司內部沒有真正有經驗的 DBA,而是隨便找個人來充任。而且有時候,DBA 純粹成了救火隊員,在不斷湧現的危機之間疲於奔命。這樣惡劣的環境是不正常的,也難以持久。沒有人願意處於這種持續壓力和干擾之下。

      擺脫這種境況的一個方法是花點功夫來簡化您的 SQL Server 環境,使之更易於理解和管理。作者根據擔任 SQL Server 顧問的實際經驗總結出了以下十種方式,可以清楚的讓 SQL Server DBA 提高對環境的控制力,並減少發生危機的可能性。這些方式按大致的重要程度列出,越往後越重要。

      10.編制清單
      有多少次當您被要求還原受損的資料庫資料時,您甚至不知道這些資料的存在?SQL Server 資料庫很容易在公司內氾濫。DBA 團隊可能不知道資料庫中哪些資料不在了,從而失去對 SQL Server Instance的控制。這樣一來,未進行備份、修補的資料庫可能無法採取恰當的保護,並錯失其他很多必要的管理任務。

      因此,當務之急是掌握您可控制的公司Instance和資料庫最新清單。這可以讓你有效的管理它們、必要時進行合併,並正確劃定範圍和規劃專案及升級的唯一途徑。編制清單還可以讓您在與公司內各個團隊協商之後,公佈您負責的已知Instance清單來明確您的職責。您可以擬定已知Instance的支援策略,並要求新Instance嚴格遵守您的配置準則,否則將不予支援。

      有許多工具可以讓您創建 SQL Server 清單,例如,像 SQLPing3 和 SQLRecon 這樣的簡單工具、Microsoft 評估和計畫工具包含 Quest Discovery 嚮導等。

      9.標準化配置
      如果您負責的資料庫和 SQL Instance數量在不斷增長,您會發現不同配置的數量也在以類似的方式增長。如果您不得不記住不同Instance的配置細節,那麼很難在面對不同Instance時取得較佳的效能。

      解決方法是盡可能標準化配置資訊,如磁碟機代號、伺服器配置選項、資料庫設置、資料庫維護、安全設置等等。SQL Server 2008 中引入了基於策略的管理功能,可以定義和實施策略。此外,Microsoft 的 SQL Server 技術專家 Lara Rubbelke 開發出了企業策略管理 (EPM) 框架,可輕鬆擴展到 SQL Server 2005SQL Server 2000 Instance上。您可以從 CodePlex 獲取該 EPM 框架。圖 1 顯示了一個 EPM 框架報告示例。

          圖 1 企業策略管理框架報告

      8.瞭解 I/O 子系統
      有幾個與 I/O 子系統有關的因素會對 SQL Server Instance造成影響。您需要認識到這些因素及其可能的影響:

      I/O 子系統的讀/寫輸送量和磁碟空間容量。必須能滿足工作負荷峰值要求,並能在您不得不為增長的資料量購買更多容量之前提供足夠的空間。您可以分析並確定 I/O 瓶頸並將資料或日誌檔移至 I/O 子系統的其他部分,從而更均勻地平衡負載。

      I/O 子系統可以透過RAID的機制執到資料保護的作用。保護好資料和日誌檔,避免因驅動器故障和其他潛在問題而遭受損失是很重要的。但這往往要進行折衷 - RAID-10 的冗余能力勝過 RAID-5,價格也更昂貴。有關詳細指南,請參見白皮書 “物理資料庫存儲設計”。

      I/O 子系統的 RAID 等級、NTFS 分配單元/簇大小和分區對齊是否配置正確。有關詳細資訊,請查看作牙D的博客帖子 “Are your disk partition offsets, RAID stripe sizes, and NTFS allocation units set correctly?"

      PS:對於儲存架構的部份,也可以參考我的另一篇文章,SQL Server 儲存設備 (Storage) 最佳調整作業

      7.創建自訂維護計畫
      作者在教授資料庫維護課程時,總是以“你不能只是把資料庫付諸生產,然後聽之任之”作為開頭語。索引會隨時間變得越來越零碎,從而導致性能降低。統計資訊逐漸過時,從而導致不良查詢和惡化的性能。I/O 子系統可能遭到破壞,對備份的需求永無止境。

      您可以為資料庫定制一個全面的維護計畫,來解決以上所有問題。自訂的計畫遠比不能充分滿足需求的通用計畫好得多。作者曾于 2008 年 8 月在《TechNet 雜誌》上發表了 “高效維護SQL Server 資料庫的關鍵技巧” 一文,其中介紹了如何創建好的維護計畫。建立自己的維護計畫的最佳開始方式是使用 Ola Hallengren 編寫的免費腳本。作者極力推薦大家使用該腳本。

      6.確保系統安全性
      花點時間主動發現安全問題是很有必要的,可以防止事件發生,而不用事後再做處理。作者的另一篇《TechNet 雜誌》文章,“常見的 SQL Server 安全性問題和解決方案”,列出了十個最常見的安全問題以及規避方法。此外,發現漏洞時別忘了及時修補系統。

      5.處理好與開發團隊的關係
      在任何 IT 部門中,DBA 團隊與開發團隊之間的關係往往是主要矛盾之一。這兩個團隊通常都不理解對方的優先事項和關注點 - 從開發時期到 SQL Server 設計決策。在行為、性能問題以及部署與支援職責等方面,兩個團隊常常持不同觀點。

      您可以通過積極而有效地參與開發團隊的工作來使自己的任務進展更順利。共同組織教育課程是一種頗為奏效的方式,尤其是當氣氛很友好時。在將設計付諸生產之前,與出席的 DBA 團隊成員一起進行評審並充分測試代碼,這有望避免可能進一步有損團隊關係的破壞性錯誤。

      4.制定全面的災難恢復策略
      無論您的基礎結構有多牢固,當災難降臨時您必須具備應急計畫。您無法預知損壞、停電、火災、意外資料丟失或其他諸多潛在問題,因此,您需要一個計畫來應對這些問題並進行恢復。

      您可以和管理層一起擬定資料庫的停機時間及資料遺失補救策略,對如何從各種資料丟失類型中恢復做出規劃,並確定如何將資料庫和所有 SQL Instance納入公司的業務連續性計畫。弄清楚所有資料庫和Instance的相對重要性,以便確定災難恢復的優先次序。

      您還需要借助其他技術來說明瞭解問題發生的時間,例如,頁面校驗、一致性檢查、SQL 代理警報和 System Center Operations Manager 警報等。災難恢復基礎結構可通過備份、日誌傳送、複製和資料庫鏡像等方式來讓您保護資料,並有可能通過資料庫鏡像或容錯移轉群集將容錯移轉到冗余系統上。以下兩個 Microsoft 白皮書可為您提供說明:“High Availability with SQL Server 2008(SQL Server 2008 高可用性)” 和 “Proven SQL Server Architectures for High Availability and Disaster Recovery(具備高可用性和災難恢复功能的 SQL Server 架構)”。

      3.定期備份並進行測試
      無論您的高可用性和災難恢復計畫有多周詳,您都必須對資料庫進行定期備份。如果您的資料庫遭到破壞或滅頂之災,那麼您唯一的資源或許只有最後的備份,倘若您沒有任何備份,可能會給公司帶來極其嚴重的後果。您不僅需要備份,還需要定期進行恢復測試,以保證這些備份在需要時能夠正常使用。

      您可以從作者 2009 年為《TechNet 雜誌》撰寫的兩篇文章中找到更多資訊:“Understanding SQL Server Backups(了解 SQL Server 備份)” 和 “SQL Server:Recovering From Disasters Using Backups(SQL Server:使用備份進行災難恢复)”。

      2.監視和維護性能
      效能調整佔據了 DBA 的大部分時間,但有很多方法可以簡化這個過程:

      建立性能基準,以便了解性能是否真的發生了變化。
      將系統分解為可在無外部因素干擾下隔離測量的基礎單元。
      使用等待-排隊方法快速查明性能問題。
      採用系統基礎單元、效能計數器監視性能,並等待統計資訊。這樣您會知道效能何時開始下降。可使用 SQL Server 2008 中的效能資料收集器功能以及 SQL Server 2005 的效能儀錶板。
      制定維護計畫。
      借助工具認真規劃和執行索引策略,如資料庫引擎優化顧問、DTA、缺失索引動態管理視圖 (DMV) 和索引使用 DMV。

      1.懂得從何處尋找資訊
      要做的事情無窮無盡,懂得何時放手並尋求說明才是上上之策。您應當瞭解自己的局限性,清楚自己不可能瞭解有關 SQL Server 的一切。如果有人能說明您完成任務或解決問題,那麼您沒有必要自己苦苦掙扎並浪費寶貴的時間。

      您的首要 SQL Server 資訊來源是 SQL Server 的線上叢書,您可以下載並安裝到本地,或在 MSDN 中連線搜索。《SQL Server 連線叢書》很適合用來查詢語法,但如果你有更複雜的操作問題,或正嘗試解決某個問題,那麼最好的辦法是將問題發佈到連線論壇。MSDN 上有許多 SQL Server 論壇,還有一些熱門的社區網站,如 SQL Server Central

      還有一種尋求說明的快速方式是借助 Twitter 的 SQL Server 社區。發佈問題時加上 #sqlhelp 雜湊標籤,很多 SQL 專家(包括作者)便可以看到您的問題。

      此外,可以參加專門討論 SQL Server 的會議,例如,每年的 PASS 社區高峰會、兩年一次的 SQL Server Connections 或更頻繁的 SQL 星期六主題日。可以關注社區中很多 SQL Server 專家的博客。您可以通過 MVP Thomas LaRock 維護的博客排名,瞭解這些博客的活躍程度及關注價值。

      您可能已經因工作強度過大而不堪重負,但如果能抽出一些時間來瞭解這些建議,您會發現自己獲益匪淺。您的系統將運行得更順暢,您將更有條理,您將獲得更多的寧靜 - 您終將成為一名更為專業的 DBA。

      作者介紹:
      Paul S.Randal是 SQLskills.com 的常務董事、Microsoft 區域總監和 SQL Server MVP。從 1999 年到 2007 年,他一直在 Microsoft 的 SQL Server 存儲引擎團隊工作。他曾編寫過 DBCC CHECKDB/repair for SQL Server 2005,並在 SQL Server 2008 的開發過程中負責核心存儲引擎部分的工作。Randal 是災難恢復、高可用性和資料庫維護方面的專家,經常在全球出席一些會議。您可以訪問他的博客 SQLskills.com/blogs/paul,也可以通過 Twitter (Twitter.com/PaulRandal) 與他聯繫。

      2011年4月9日 星期六

      Windows Azure Platform 免費申請介紹(免費試用且不需輸入信用卡)

              相信大家對MicrosoftWindows Azure Platform已有一定的了解,如果有不清楚的部份可以到微軟的網頁進行了解,那裡都有非常詳細的介紹,因為我之前都是使用 Hadoop 自行架設,所以一直沒有試用,在近日剛好心血來潮,想說先來申請個30天的試用,一看竟然申請試用還要輸入信用卡,而且超過使用量時還會自動扣款,想一想有點想打退堂鼓,但到後來看到一個網頁的介紹是可以跟微軟直接申請,而且不需輸入信用卡資訊,所以在此介紹一下。


      1、先進入下列網址進行註冊,進入後先選擇你的區域,但是區域上沒有台灣地區,所以我是選擇 [Hong Kong],然後在Promo Code的地方可以輸入[CloudCover]即可。


      網址:http://windowsazurepass.com/?campid=AA2D1C8A-FC44- E011-B3BB-001F29C6FB82


      2、在這個步驟中,會先確認你是否有Windows Live ID,如果有的話先登入你的Windows Live ID即可,如果沒有的話也可透過下方 [Sign Up] 進行申請的動作。



      3、登入Windows Live ID之後需要再次填寫個人資訊做確認。




      4、送出個人資訊後,需要檢閱30天試用的合約,並輸入你的First Name與Last Name並送出。


      5、同意合約並送出後即可完成申請的動作,預計約為2-3個工作天,但是依照我收到的情況,大約是12個小時後就會收到。


      6、收到後原本以為會有啟動碼之類的,但是並沒有,因為他將你的Windows Live ID進行整合了,所以只需要登入即可。


      7、登入後就可以看到一個完整的管理畫面,不需安裝其他任何的軟體,而他的介面全部都是利用SliverLight設計完成的,使用上感覺滿好用也不會卡卡的。



      經過上述的動作後,目前帳號已開啟使用,我會另外再整理有關使用的程序與方法給大家。

      Windows Azure Platform 使用費率表:
              
      每月包含的免費項目:
      Windows Azure
      一個小型運算執行個體 25 小時的時數
      500 MB 儲存空間
      10,000 筆儲存異動
      SQL Azure
      1 GB 網路版本資料庫 (僅前 3 個月提供)
      Windows Azure 平台 AppFabric
      100,000 筆存取控制異動
      2 個服務匯流排連線
      資料傳輸 (視地區而定)
      500 MB 輸入
      500 MB 輸出
      每月使用量超過上述額度的任何使用量將比照標準費率收費。此入門特惠方案將於 2011 6 30 日截止,此後所有使用量將比照標準費率收費。



      標準費率:
      Windows Azure
      運算*
      超小型執行個體**:每小時 $0.05
      小型執行個體 (預設):每小時 $0.12
      中型執行個體:每小時 $0.24
      大型執行個體:每小時 $0.48
      超大型執行個體:每小時 $0.96
      虛擬網路***
      Windows Azure Connect - CTP 期間不收費
      每月每 GB 的資料儲存量 $0.15
      10,000 筆儲存異動 $0.01
      內容傳遞網路 (CDN)
      從歐洲和北美洲地區傳輸資料,每 GB $0.15
      從其他地區傳輸資料,每 GB $0.20
      10,000 筆異動 $0.01
      SQL Azure
      網路版本
      每個資料庫每月 $9.99,最高 1 GB
      每個資料庫每月 $49.95,最高 5 GB
      商用版本
      每個資料庫每月 $99.99,最高 10 GB
      每個資料庫每月 $199.98,最高 20 GB
      每個資料庫每月 $299.97,最高 30 GB
      每個資料庫每月 $399.96,最高 40 GB
      每個資料庫每月 $499.95,最高 50 GB
      AppFabric
      存取控制 (Access Control)
      100,000 筆異動 $1.99
      服務匯流排 (Service Bus)
      每一連線 $3.99,採「付費使用」方式計費
      5 個連線套件 $9.95
      25 個連線套件 $49.75
      100 個連線套件 $199.00
      500 個連線套件 $995.00
      資料傳輸
      北美洲與歐洲地區
      輸入每 GB $0.10
      輸出每 GB $0.15
      亞太地區
      輸入每 GB $0.30
      輸出每 GB $0.45
      2011 6 30 日之前,離峰時間的資料輸入不計費。2011 6 30 日之後將依正常資料輸入費率計費。



      參考網址:
      http://www.microsoft.com/taiwan/windowsazure/