2013年10月31日 星期四

[享樂生活]IOI~隨意鳥地方義大利餐廳


隨意鳥101高空觀景餐廳
110台北市信義區信義路五段7號85F
02 8101 0016
相片集網址:http://www.flickr.com/photos/103855078@N03/sets/72157637147261506/

2013年10月24日 星期四

[SQL SERVER][T-SQL]字串轉日期出現"從字元字串轉換成日期及/或時間時,轉換失敗"的錯誤訊息

        TABLE中欄位CounterDateTime屬性是char,且資料類型都是"2013-10-24 15:18:51.0000"的資料,但是在做CONVERT的時候卻出現"從字元字串轉換成日期及/或時間時,轉換失敗"的錯誤訊息

透過ISDATE函數查詢發現該欄位回應值都是0

MSDN查了一下會回覆0有以下五種情形:
  1. NULL
  2. 在<資料類型>的任何資料類型類別目錄中所列的資料類型值,但字元字串、Unicode 字元字串或日期和時間除外。
  3. text、ntext 或 image 資料類型的值。
  4. 秒數有效位數超過 3 的任何值 (.0000 到 .0000000...  n)。 如果 expression 是 datetime2 值,則 ISDATE 會傳回 0。如果 expression 是有效的 datetime 值,則會傳回 1。
  5. 混合有效日期與無效值的任何值,例如 1995-10-1a。

所以我只要改寫一下就OK了
SELECT convert(datetime,substring (max([CounterDateTime]),1,19))
FROM [DBA-MarginProd-PerfLog].[dbo].[CounterData]

2013年10月22日 星期二

[SQL Server] [T-SQL] 出現"必須宣告純量變數"的警告訊息

        AP給了一段T-SQL語法如下圖,在SSMS中出現一堆"蚯蚓"滑鼠移過去確認問題都是出現"必須宣告純量變數",但是在語法之前都有宣告且字都沒有打錯。
 
發生原因:
        因T-SQL是逐行執行所以當執行到第十行的GO就將之前宣告的參數都從記憶體中取消,造成要執行第十一行時就出現"必須宣告純量變數"的錯誤訊息

解法一:將第十行的"GO"拿掉

解法二:將第九行及第十行一道最後執行

2013年10月12日 星期六

2013年10月8日 星期二

[ORACLE] ORA-03143 已不支援連線此伺服器版本

        簡單來說就是ORACLE 11g Client 程式無法連線到Oracle 8i的資料庫.沒辦法用最新版本的管理程式管理個版本的資料庫主機真是麻煩~

[SQL Server] 建立可透過排程自動啟動並結束的SQL Trace

關於SQL Trace及SQL Server Profiler的差別及使用注意事項可看文章最後的參考資料

透過以下程序就可以自動啟動,並且在指定時間停止
1. 依序展開[開始]->[Microsoft SQL Server 2008 R2]->[效能工具]->[SQL Server Profiler]

2. 在[SQL Server Profiler]視窗中的工具列依序展開[檔案]->[新增追蹤]

3. 在[連接到伺服器]視窗選擇要Trace的資料庫主機後按下[連接]

4. 在[追蹤屬性]視窗選擇您要監控的項目以及設定相關屬性後按下[執行]

5. 回到[SQL Server Profiler]視窗中的工具列依序展開[檔案]->[停止追蹤]

6. 在[SQL Server Profiler]視窗中的工具列依序展開[檔案]->[匯出]->[指令碼追蹤定義]->[對於 SQL Server 2005-2008 R2]後將檔案存放在您指定的路徑下且該副檔名為.sql,例如:Trace_Temp.sql

7. 使用 SSMS 管理工具,開啟Trace_Temp.sql

8.在Trace_Temp.sql檔案中找到以下的程式碼並修改參數後存檔,關於sp_trace_create的相關參數請參考TECHNET
    declare @rc int
    declare @TraceID int
    declare @maxfilesize bigint
    declare @stoptime datetime
  set @maxfilesize = 100
  set @stoptime '2013-10-08 07:15:00'
    -- Please replace the text InsertFileNameHere, with an appropriate
    -- filename prefixed by a path, e.g., c:\MyFolder\MyTrace. The .trc extension
    -- will be appended to the filename automatically. If you are writing from
    -- remote server to local drive, please use UNC path and make sure server has
    -- write access to your network share

  exec @rc = sp_trace_create @TraceID output, 2, N'D:\myTrace\TraceLog',        @maxfilesize@stoptime 
    參數說明
    @TraceID output, 2 --> 指定在到達 max_file_size 時,關閉目前的追蹤檔,建立一個新檔案
     @tracefile=N'D:\myTrace\TraceLog' --> 指定存放路徑
     @maxfilesize = 100 --> 單一Trace檔案大小上限
     @stoptime = '2013-10-08 07:15:00' --> 停止Trace時間

9. 將Trace_Temp.sql排入排程(SQL或Windows排程皆可)

10. 待Trace完成後,再用SQL Server Profiler工具開啟或是匯入到SQL Server中做後續分析

參考資料
    1. 德瑞克老師的使用 SQL Profiler 建立「SQL 追蹤(SQL Trace)」
    2. Facebook的Super SQL Server 楊老師的文件"資料庫管理主題 VII, 如何藉由SQL Server Profiler快速產生sp_trace程序"
    3.TECHNET sp_trace_create (Transact-SQL)

2013年10月3日 星期四

[SQL Server] 透過SSMS產生還原資料庫的指令檔,還可以追交易紀錄檔喔~

        還原資料庫的時候如果只是還原一個 .bak,不論是透過SSMS或是指令都是很簡單的事情,但是如果是要還原交易紀錄檔,或是備份有分成完整+差異或完整+增量,我都是自己一行一行寫,真的很累人,碰到比較大的資料庫或是交易紀錄檔很多的.....那真的會自己寫到死,如果中間有寫錯一個,那又要再來一次~真的很想哭~後來看到保哥的這篇文章,真是如獲至寶啊~

產生還原資料庫指令碼的程序如下
1. 開啟Microsoft SQL Server Management Studio
2. 在要還原的資料庫上右鍵->工作->還原->資料庫

3. 在[還原資料庫-MyDB]視窗中的確認以下相關資訊(如下圖所示)後按下[指令碼]
     a. [目的地資料庫]
     b .[來源資料庫]
     c. [選擇要還原的備份組]:勾選要還原的項目

4.就可以產生以下的指令碼,天啊~如果要自己寫是多麼痛苦的事情啊
RESTORE DATABASE [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB_backup_2013_10_02_220001_1783058.bak' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_02_230000_9407058.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_000001_6391058.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_010001_5991547.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_020001_2523547.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_030000_9679547.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_040001_7287547.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_050001_4131547.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_060001_0507547.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_070000_8443547.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_080001_5427547.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_090001_7419547.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_100001_5938796.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_110001_3406796.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_120001_1342796.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_130000_7874796.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_140001_5014796.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_150001_2170796.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [MyDB] FROM  DISK = N'H:\DB_Backup\MyDB\MyDB_backup_2013_10_03_160000_9638796.trn' WITH  FILE = 1,  NOUNLOAD,  STATS = 10
GO

附註:使用這項功能當然有些限制的
 1. MSDB資料庫是OK的。
 2. 要還原的資料庫日期存在備份組中,例如要還原的資料庫時間已超過備份組的時間,那就沒辦法做到。
 3. 所以還是自己寫隻Restore程式或許會更方便。
 

[Windows Server] 主機突然發生所有的Service Port都正常,但執行相關程式都無法連接,最後主機就異常重開機

在此紀錄一下很像網路或是防火牆所造成的系統無法連線,實際上是Storage出問題。
       
       資料庫突然無法連線,透過PING及TELNET Service Port皆正常,但是使用遠端桌面連線或是SSMS都會出現無法連線的錯誤訊息,沒過多久連PING都PING不到了,後來透過主機管理界面發現機器都藍底白字或是異常重開機,進入系統查看事件檢視器到底發生甚麼事情時,就發現每台出問題的主機事件檢視器都會有EMC PowerPath異常切換的錯誤發生(如下圖),切換不到一分鐘後系統就Crash了。