希格工作室

2011年9月10日 星期六

SQL2008手記 --- 專有名詞整理

以下是所有曾出現在SQL相關的專有名詞的完整名稱



l   AWE:Address Windowing Extensions
l   BIDS:Business Intelligence Development Studio
l   BOL:Books Online
l   CLR:Common Language Runtime
l   ISV:Independent Software Vendor
l   IFI:Instant File Initialization
l   LUR:Least Recently Used
l   MAXDOP:Maximum Degree of Parallelism
l   MMC:Microsoft Management Console
l   MTF:Microsoft Tape Format
l   NUMA:Non-Uniform Memory Access
l   OLAP:Online Transaction Processing
l   OLTP:Online Analytical Processing 
l   ODBC:Open Database Connectivity
l   RTO:Recovery Time Objective 
l   RPO:Recovery Point Objective
l   SAN:Storage Area Network
l   SMO:SQL Server Management Objects
l   SSD:Solid State Drive
l   SNAC:SQL Native Access Client
l   SSMS:SQL Server Management Studio
l   SSCM:SQL Server Configuration Manager
l   SCC:System Configuration Checker
l   SLAs:Service level agreements
l   TCO:Total cost of ownership
l   TDS:Tabular Data Stream
l   TDE:Transparent Database Encryption
l   VIA:Virtual Interface Adapter
l   VAS:Virtual Address Space
l   VLFs:Virtual Log Files
l   VSS:Shadow Copy Service
l   VDI:Virtual Device Interface
l   WMI:Windows Management Instrumentation
l   XML/A:XML for Analysis

SQL2008手記 --- 規劃你的SQL SERVER 2008

規劃你的SQL SERVER 2008

1.選擇你的作業環境及硬體需求和功能,去配合所需版本。
3.盡量安裝到64位元的作業系統上,以獲得最大支援能力。
4.依你的SQL Server版本,盡量加大你的記憶體空間及速度(SQL是記憶體怪獸,根據預設值,SQL是會將記憶體全部配置給自己使用,有其它程式需要才吐出來給它,所以有多少吃多少,Web以上版本就支援到64GB了而Datacenter版本則是根本無限制。)。
5.正式環境上不要和domain System或其應用程式混裝在同一台機器上(其一原因如上)。
6.SQL Instance最多可以到50組,意思是同一台機器可灌50次相同或不同的SQL Sever版本,但是若沒必要就不需要這麼做。
7.最佳化的硬體分配,將tempdb、Data Files、Transaction Log拆放在與安裝位置不同的實體硬碟裡(額外還有SnapShot[快照]及備份資料)。
8.若有需要,透過File Group再將 Data Files分別切割並存放在不同實體硬體裡(FG有兩種方式,一種是資料表資料分割,一種是資料表分別存放,依需要選擇)
9.若有需要,可將單純只存放SQL Server Data Files的硬碟在規劃時就格式化成64K的檔案配置(因SQL的page是以8K為一單位,Table是以8個連續的page為最小基礎單位的)
10.透過磁碟陣列加快或安全化你的SQL Server資料保存及速度(官方建議為RAID 1,5,10,應該不會有人用RAID 0去存資料吧,快歸快,死了就全死了)。
11.個人覺得別把T-LOG放在SSD,T-LOG這東西是只要有任何活動,它都會直接寫入磁碟,所以I/O次數非常的大,雖然說SSD的寫入限制其實很大,但如果你不希望哪天突然SERVER突然當掉卻找不到原因的話(官方建議置於RAID0+1的環境下)。
12.使用整合式Windows驗證,停用SA(2008預設停用),啟用強式密碼驗證。
13.安裝時決定好你的系統定序(中文版預設Chinese_Taiwan_Stroke_CI_AS,Instance安裝後無法變更),它將決定非數值之排序與大小寫區分及其它。
14.事先決定好基本空間並給予一個合理的預設大小和成長緩衝。
15.設定適當且正確的資料庫及LOG的預期成長,不要使用預設值MB。
16.使用SQL Profiler記錄你的使用者經驗,來改善資料庫規格,以提升效能。
17.完善的備份策略(悲觀的備份策略)
開始前的準備
l預設復原模式(recover mode)最好選擇完整(Full)
l定期進行業完整備份及差異備份
l瞭解Log運作及備份時機
l決定你的備份時間和備份用的裝置(硬碟、磁帶等)
l你能夠承受多少資料的損失?
l何時測試你的備份?
l不要任意變更復原模式,否則每次變更後,必須重做一次完整備份。
l鏡像備份到多個裝置上( MIRROR TO ) , 但此功能在2008上沒有介面,需透過指令設定,最多4個裝置(此為同步備份)。
l備份策略最好包含System Database(tempdb可不備)
操作
1.建立備份裝置(Backup Device)
2.建立要備份的資料庫去對應備份裝置
3.第一次備份請用完整備份(Full Backup),並固定時間進行一次完整備份(如每月一次或每星期一次),或者只做第一次。
4.短區間內可進行自動排程的差異備份(Differential Backup),(如每日一次或兩次)。
5.如遇移轉或問題時,可建立交易記錄的備份(T-Log)。
6.T-Log也可隨時進行備份,在每次Full/Diff備份之間,但無論如何,還原時T-Log只有Full/Diff完後的最後幾次是有用的。
7.建立檔案群組(File Group - FG)並替FG建立各別備份,當FG損壞或誤刪改時,可只針對該FG進行還原而不影響其它DB與資料。
8.備份與還原都要謹記依序備份並依序還原,Full->Diff1->Diff2->Log。
9.有Copy Only的備份模式,僅以指令操作,該使用好處為不會打亂備份的順序。
10.完整備份請在離鋒時期或第一次建置時或壓縮後再操作,因耗用資源與時間較大,會影響正常使用者。
11.使用VERIFYONLY進行備份檔案(或裝置)的完整性驗證。
還原
1.瞭解需要還原的原因,若是災難復原,需先確定災難發生時間,以決定從什麼時間點的備份開始還原以及能救多少的資料。
2.無論如何,災難發生時記得先手動備份T-LOG,並視情況加上參數WITH No_Truncate,不把Log定義為可清除,以便重做
3.復原模式若是簡單(Simple Mode),則不需要救T-Log了,因為無法得知Log的時間點。
4.若損壞的包含System Database,則需先針對損壞的部份還原。
5.還原時記的要依序還原,而且只有最後一個階段才可下WITH Recovery,其它階段需為WITH NoRecovery。
6.STOPMARK -- 在有備份T-Log情況下,若執行過的語法有使用交易(Tran)包起來,並且有給予其別名,亦可當做一還原點,可用來將異常點排除的T-Log還原,但是在還原點以後的資料都會漏失(包含造成異常或正常的語法資料)。
7.還原master  database方式,啟動至Single-User Mode再還原,完畢後切還原樣,重啟服務。
8.model database有問題時,可在sql server啟動加註 –T3608 跳過model database,再還原它。`
9.FileGroup可以分開備份也可以分別還原,T-Log的還原不區分FG,在還原時會自行比對FG資料。
註記:
l   備份雖會清除LOG,但並不會釋放實體硬碟空間。
l   復原模式:簡單(Simple)無法建立Log的還原點;完整(FULL)可建立Log還原點;大量記錄(Bulk-logged)在特定處理大量資料時不記錄Log(DBCC、bcp…)
l   SQL 2008支援Online Backup/Restore
l   有時master database若壞掉,會連登入都有問題,此時只能重建再還原它。
l   2008以後,還原前會強制要求先做一次T-Log備份,除非你下了With Replace
l   還原備份時的內部流程,先刪除DB,複製裝置(Data Copy)裡的資料成為新的DB,執行Recovery的重做(Redo)和不做(Undo)。




以上是整理書上和實務上的經驗。


參考資料:MCTS SQL SERVER 2008 R2


(未完--持續修改)
Copyright by Sigglas 2011

2011年8月16日 星期二

令人不解的VS2008 AJAX and AJAXToolkit with TabContainer

至今為止仍停留在ASP.NET的基礎的我,
對於什麼MVC、WPF、WCF...之類的雖然多少知道一些,但總覺得沒什實感。

AJAX也是。

相信有碰過AJAX的都不陌生,不過對我很陌生,雖然我知道它在做什麼的,但是工作上沒用到,所以也不曾理會過(真不稱職)。

現在才去試著去瞭解它在VS上的開發,因此我很開心的打開VS2008,選了AJAX範本



然後你會發現它預設帶了這個東西


<asp:ScriptManager ID="ScriptManager1" runat="server" />
微軟的解釋是:控制項可管理具有 AJAX 功能的 ASP.NET 網頁所適用的用戶端指令碼。依預設,ScriptManager 控制項會透過網頁對 Microsoft AJAX Library 註冊指令碼。這可讓用戶端指令碼使用類型系統延伸模組,以及支援部分頁面呈現與 Web 服務呼叫等功能。
http://msdn.microsoft.com/zh-tw/library/cc295440(v=Expression.40).aspx
總之就是要有它才會動就對了。

接著我想做類似這種東西的功能










http://www.asp.net/ajaxlibrary/AjaxControlToolkitSampleSite/tabs/tabs.aspx

但是VS2008內建卻沒有?









GOD!只有這5個你也敢出來混。

原來還得自己去上面的網址抓套件.......

當我抓好並增加到我的組件後,多了非常多的套件,真是非常之感動。

結果當我簡單打好了基本的標籤語法後(我習慣都用打的)


<asp:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="1">
            <asp:TabPanel runat="server" HeaderText="TabPanel1" ID="TabPanel1">
            <HeaderTemplate>123</HeaderTemplate>
            <ContentTemplate>456</ContentTemplate>
            </asp:TabPanel>
            <asp:TabPanel ID="TabPanel2" runat="server" HeaderText="TabPanel2">
                <HeaderTemplate>234</HeaderTemplate>
            <ContentTemplate>678</ContentTemplate>
            </asp:TabPanel>
        </asp:TabContainer>

依2008的運行方式來想,這種東西應該是不需要額外再去Bind它,所以我就很自然的Run下去

疑?

空白的?

WTF?

我做Ajax上傳時也不會這樣啊
https://sites.google.com/site/siggblog/sample/shangchuanjizidongfasongmail

當我右鍵下去發現資料都是存在的,但是style都是hidden,我還很天真的寫了script去指定它顯示.....結果不行。

於是我就TabContainer1.Visable=true;TabContainer1.DataBind();之類的蠢事。
結果當然也是不行。

於是我開始Google,但是完全沒有人有這種問題,而且每個人都是直接向我這樣打就能Run了,我說....是七月到了我見鬼嗎?難到就真這麼神奇?

於是我花了兩個小時在幹這鬼打牆的事,由於我個人認為這應該是件滿蠢的事,所以我也不打算問人(上網問)。

最後我終於GOO到了一個BLOG
http://www.zhangyongjun.com/BLOG/article.asp?id=6618

我原本以為這份文件對我沒什麼用處,就草草看完然後繼續找,但是我越找越覺得哪怪怪的,於是我又回頭重看一次,看到了一個重點。

如下圖

ToolkitScriptManager?
怎麼有種即視感?

想到沒?

這跟我一開始建好的PAGE裡的<asp:ScriptManager ID="ScriptManager1" runat="server" />不是很像嗎?

於是我先不管它這麼多,照著網頁上的做,我拉了一個ToolkitScriptManager出來
結果發生了

只能在此頁面加入一個 ScriptManager 的執行個體。

的錯誤。

故得知ScriptManager一個頁面應該只能擁有一個,而且ToolkitScriptManager和ScriptManager是相同的東西。

於是我試著把ScriptManager給砍了,只留ToolkitScriptManager再試行一次。






喔喔喔喔!

喔喔喔喔!!


喔喔喔喔!!!


見證奇蹟的時刻到了。





果然是件很蠢的事情啊!



簡而言之

用AjaxControlToolkit就要用ToolkitScriptManager,至於ScriptManager是沒辦法使用的。

這叫人情何以堪

學我最近去上課的老師常說的一句話

這個時後我只有一個字可以形容:氣!