星期五, 10月 30, 2015

[HyperV] 差異磁碟

紀錄建立差異步驟

  • Hyper-V 管理員 => 新增 => 磁碟
差異磁碟-1

星期四, 10月 29, 2015

[HyperV] 虛擬交換器

觀看 Windows Server 2012 R2 Hyper-V 深入探索 影片時,老師介紹虛擬交換器時,提到下面圖片是虛擬化化戰士考題,搞懂這題應該就搞懂虛擬交換器,拿來練習

考題,從課程 PowerPoint 中抓出來的

[HyperV] 虛擬交換器-考題

VM 網路卡 IP 設定,練習完要寫筆記時才發現,VM5 的 IP 順序反過來了,^^''

[HyperV] 虛擬交換器-IP 設定表


星期二, 10月 27, 2015

[HyperV] 辨別多張網路卡

觀看 Windows Server 2012 R2 Hyper-V 深入探索 影片時,老師提到 VM OS 內多張網路卡時,不要採用網路卡預設值,不容易分辨,VM OS 內的網路卡名稱要清楚明白

紅框內是 VM OS 內網路連線的預設名稱、橘框是 HyperV 管理員內的網路卡,兩者無法對應

[HyperV] 辨別多張網路卡-1

在 Hyper-V 管理員下有個 網路功能 Tag,會記載該 VM 上有那些網路卡,重點是有網路卡 Mac 資訊

[HyperV] 辨別多張網路卡-2

VM OS 命令提示字元內輸入 ipconfig /all 就可以找出網路卡 Mac 資訊

[HyperV] 辨別多張網路卡-3

兩者互相搭配就可以找出 Hyper-V 網路卡和 VM OS 網路卡的對應

更名後,紅框和橘框就一目了然啦

[HyperV] 辨別多張網路卡-4

最後要注意多張網卡情況下,Hyper-V 內設定的網路卡順序,並不一定就是 VM OS 內的網路卡順序

星期三, 10月 21, 2015

[SQL] Linked Server 使用資料表值函數

論壇問題
利用 Linked Server 呼叫資料表值函數
建立一個資料表值函數來測試
CREATE FUNCTION dbo.GetDepartment(@DepartmentID smallint)
RETURNS TABLE
AS
RETURN
(
    SELECT
        GroupName ,
        DepartmentID ,
        Name 
    FROM Adventureworks2014.HumanResources.Department
    WHERE DepartmentID = @DepartmentID
) 
GO
利用 Linked Server(已事先建立,名稱為 HyperV)四部份名稱來呼叫資料表值函數
SELECT * FROM HyperV.Adventureworks2014.dbo.GetDepartment(1)
GO
會得到下面錯誤訊息
訊息 4122,層級 16,狀態 1,行 22
不允許遠端資料表值函數呼叫。
改利用 OPENQUERY() 來呼叫
SELECT * 
FROM OPENQUERY
     (
         HyperV,
         'SELECT * FROM AdventureWorks2014.dbo.GetDepartment(1)'
     )
[SQL] Linked Server 使用資料表值函數

搜尋到這篇文章時 Remote table-valued function calls are not allowed 還想說,2008 的版本應該就不會有這個問題,實際在 2014 上測試,這問題來是存在

星期二, 10月 20, 2015

華碩商務管家

移除程式時, 一直按 YES 往下執行已經變成一種習慣,這習慣在移除華碩商務管家時竟然踢到鐵板,一開始還以為沒有辦法移除,後來看文字說明才發現問題在哪,徹底被打敗,Orz

移除華碩商務管家

星期三, 10月 14, 2015

[SQL] 警示應用 - 常見硬體錯誤訊息

學習 Alert 時,閱讀網路文章,有人把 823、824 和 825 這三個 Error 列為必設的 Alert,當時只知道是硬體錯誤相關,了解 DBCC CheckDB 和閱讀 王者歸來 SQL Server 2012 實戰指南 ch10 之後,就比較清楚 823、824 產生原因,且 DBCC CheckDB 通常不會是每日執行的檢查項目之一,搭配 Alert 來捕捉較常見的 Error,期望可以在最短的時間內知道資料庫毀損並進行處理
  • 建立 Alert
[SQL] 警示應用 - 常見硬體錯誤訊息-1

星期二, 10月 13, 2015

[SQL] DBCC CheckDB 發信通知

破壞 DB 後,利用 DBCC CheckDB 來檢查 AdventureWorks2014,發現錯誤就發 mail 通知
DBCC CHECKDB('AdventureWorks2014') WITH PHYSICAL_ONLY
   
IF @@ERROR > 0
    BEGIN
        EXEC msdb.dbo.sp_send_dbmail
            @profile_name = 'Database Mail Profile' ,                             
            @recipients = '收寄人 Email' ,                
            @subject = 'SQL Server 通知 - DBCC CheckDB 發現錯誤' , 
            @body = 'AdventureWorks2014 資料庫,DBCC CheckDB 發生異常' ,
            @body_format='TEXT'                                     
    END
收到的 Mail 通知
[SQL] DBCC CheckDB 發信通知
在網路上看見有人用 TRY CATCH 來捕捉 DBCC CHECKDB 產生的錯誤,試過發現 TRY CATCH 沒有辦法捕捉,只能用 @@ERROR 來判斷

星期四, 10月 08, 2015

[Win10] Hyper-V

在 Win10 上要啟動 Hyper-V 來使用,下面為啟動步驟,就看圖操作啦
  • Step1
[Win10] Hyper-V-1
  • Step2
[Win10] Hyper-V-2
  • Step3
[Win10] Hyper-V-3
  • Step4
[Win10] Hyper-V-4
  • Step5
[Win10] Hyper-V-5

星期三, 10月 07, 2015

[SQL] 還原參數 Move

[SQL] 模擬資料庫毀損 時,常需要把 DB 還原,原本都是用 SSMS 來 Step By Step 進行還原,心血來潮時直接下語法還原就出現下面錯誤

還原 TSQL
USER MASTER
GO

RESTORE DATABASE AdventureWorks2014 
FROM DISK = N'D:\AdventureWorks2014.bak' 
WITH 
    File = 1 , 
    RECOVERY , 
    REPLACE ,
    STATS = 10
訊息 5133,層級 16,狀態 1,行 3
檔案 "C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014MULTI\MSSQL\DATA\AdventureWorks2014_Data.mdf" 的目錄查閱失敗,有作業系統錯誤 3(系統找不到指定的路徑。)。

訊息 3156,層級 16,狀態 3,行 3
檔案 'AdventureWorks2014_Data' 無法還原到 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014MULTI\MSSQL\DATA\AdventureWorks2014_Data.mdf'。請使用 WITH MOVE 來識別該檔案的有效位置。

訊息 5133,層級 16,狀態 1,行 3
檔案 "C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014MULTI\MSSQL\DATA\AdventureWorks2014_Log.ldf" 的目錄查閱失敗,有作業系統錯誤 3(系統找不到指定的路徑。)。

訊息 3156,層級 16,狀態 3,行 3
檔案 'AdventureWorks2014_Log' 無法還原到 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014MULTI\MSSQL\DATA\AdventureWorks2014_Log.ldf'。請使用 WITH MOVE 來識別該檔案的有效位置。

訊息 3119,層級 16,狀態 1,行 3
計劃 RESTORE 陳述式的時候識別出問題。先前的訊息可提供詳細資料。
訊息 3013,層級 16,狀態 1,行 3
RESTORE DATABASE 正在異常結束。

星期二, 10月 06, 2015

[Win10] Windows 10 上安裝 SQL Server 2005

公司內部 DB 是 SQL Server 2005,習慣在 PC 上安裝最新的 SQL Server Express 版本和 2005 來使用,沒想到實際在 Win10 上安裝,會有相容性問題,畫面如下

[SQL] Windows 10 上安裝 SQL Server 2005-1

官方文件上查到說 Win10 已經不支援 SQL Server 2005,10 年前產品好像也沒什好意外,而且 2016 支援就要終止了

[SQL] Windows 10 上安裝 SQL Server 2005-2

原本想說那就算了,SQL Server 2014 Express 用一用就好,後來又想到 2005 備份,沒有辦法直接還原到 2008 R2 以上版本,還是必須安裝 2008 R2 來用會比較單純,沒想到安裝 2008 R2,也會出現相容性問題,最後就不管警告,實際安裝 2005 看看,安裝過程一切順利,再戰10 年(誤) ~~
  • 20160512
發現 SQL Server 2005 bak 檔案可以直接還原到 SQL Server 2014 上,但相容性層級會被提升到 SQL Server 2008 (100),參考資料:SQL2014的資料庫相容性層級可以相容到Level 90嗎?

星期四, 10月 01, 2015

[SQL] 模擬資料庫毀損

要練習 DBCC 資料庫毀損相關議題,第一件事要先學會破壞資料庫,這篇紀錄如何破壞,以 AdventtureWorks2014 HumanResources.Employee 當成破壞目標
  • 查詢 Table 內的 Index_id
SELECT
    T.name AS TableName , 
    I.name AS IndexName ,
    I.index_id ,
    I.type ,
    I.type_desc
FROM sys.indexes AS I
    JOIN sys.tables AS T ON I.object_id = T.object_id
WHERE T.name = 'Employee'
[SQL] 模擬索引毀損-1
  • 查詢 Index 所在 Page
-- SQL Server 2012 之前版本使用
DBCC IND ([AdventureWorks2014], 'HumanResources.Employee', 1)
GO

-- SQL 2012 開始有此 DMF
-- 該語法故意和 DBCC IND 欄位相對應
SELECT
    allocated_page_file_id AS PageFID
    ,allocated_page_page_id AS PagePID
    ,allocated_page_iam_file_id AS IAMFID
    ,allocated_page_iam_page_id AS IAMPID
    ,object_id AS ObjectID
    ,index_id AS IndexID
    ,partition_id AS PartitionNumber
    ,rowset_id AS PartitionID
    ,allocation_unit_type_desc AS iam_chain_type
    ,page_type AS PageType
    ,page_level AS IndexLevel
    ,next_page_file_id AS NextPageFID
    ,next_page_page_id AS NextPagePID
    ,previous_page_file_id AS PrevPageFID
    ,previous_page_page_id AS PrevPagePID
FROM sys.dm_db_database_page_allocations(DB_ID('AdventureWorks2014'), OBJECT_ID('HumanResources.Employee'), 1 , NULL, 'DETAILED')
WHERE is_allocated = 1;
GO
sys.dm_db_database_page_allocations DMF 第三個參數為 index_id,分別填入 1 (PK_Employee_BusinessEntityID)和 4 (AK_Employee_LoginID),就可以查詢 index 所在 Page

PK_Employee_BusinessEntityID,Page 733 為欲破壞 Page,PageType = 1 表示是 Data Page

[SQL] 模擬索引毀損-2

AK_Employee_LoginID,Page 5133 為欲破壞 Page,PageType = 2 代表是 Index Page

[SQL] 模擬索引毀損-3