2013年8月14日 星期三

[SQL Server]建立連結伺服器(DB LINK)

情境說明:
  1. 自A資料庫能夠查詢B資料庫上的物件(ex:Table, View....)
  2. B資料庫已有帳號且有權限存取特定資料庫
  3. SQL Server 對 SQL Server
  4. 資料庫版本SQL Server 2008 R2
步驟:
  • 使用圖形介面
    1. 開啟[SQL SERVER Management Studio]
    2. 展開[伺服器物件]後在[連結的伺服器]上[右鍵],點選[新增連結的伺服器]
    3. 在[新增連結的伺服器]視窗中的[一般]頁籤依序輸入如下欄位
      • 連結的伺服器:輸入[AR]
      • 伺服器類型:點選[其他資料來源]
      • 提供者:下拉選單選[Microsoft OLE DB Provider for SQL Server]
      • 產品名稱:輸入[SQLNCLI]
      • 資料來源:輸入B主機IP[10.48.16.10]
    4. 在[新增連結的伺服器]視窗中的[安全性]頁籤依序輸入如下欄位,輸入完後按下[確定
      • 點選[使用此安全性內容建立]
      • 遠端登入:[User Name]->此User在B資料庫主機上需要有權限
      • 指定密碼:[Password]->User密碼
    5. 以上程序完成後便可使用此DB Link,例如:SELECT * from [AR]..[B資料庫名稱].[dbo].[TABLE NAME]

  • 使用T-SQL
             USE [master]
             GO
             EXEC master.dbo.sp_addlinkedserver
                 @server = N'AR',
                 @srvproduct=N'SQLNCLI',
                 @provider=N'SQLOLEDB',
                 @datasrc=N'10.48.16.10'
             GO
             USE [master]
             GO
             EXEC master.dbo.sp_addlinkedsrvlogin
                @rmtsrvname = N'AR',
                @locallogin = NULL ,
                @useself = N'False',
                @rmtuser = N'User Name',
                @rmtpassword = N'Password'
            GO
          
            P.S. sp_addlinkedserver 參數說明
                    @server = N'AR',  連結的伺服器
                    @srvproduct=N'a',  產品名稱(SQLNCLI)
                    @provider=N'SQLOLEDB', 提供者
                    @datasrc=N'b',   資料來源(預設執行個體)
                    @provstr=N'c',   提供者字串(可不填)
                    @catalog=N'd'   目錄(資料庫名稱,可不填)

參考資料及說明
  1. sp_addlinkedserver(建立連結伺服器)
  2. 連結伺服器的安全性
  3. T-SQL及圖形介面對應

2013年8月11日 星期日

透過本機群組原則部屬BGINFO

        最近因為資料庫開始大量升級到SQL Server 2008 R2 x64有時候開了很多遠端桌面,開到最後都快搞不清楚我是在操作哪台主機,後來看到BGINFO這隻程式可以將系統相關資訊,而且很多講師也都有使用,加上又是微軟推薦的,當然就要拿來用啦~

        因為我是只用在資料庫主機上,並沒有所有網域主機都要用,所以就沒有用網域的LOGIN SCRIPT,在文章的最後也有附上網域的做法。
  1. 在[C:\]建立[BGINFO]資料夾
  2. 將下載回來的[BGINFO.zip]檔案解壓縮到[C:\BGINFO]路徑下
  3. 雙擊[Bginfo.exe]
  4. 當出現[BGInfo License Agreement]的授權按下[Agree]
  5. 在[BGInfo - Default Configuration]視窗中,依據您的需求選擇您需要的資訊,可參考下圖
  6. 設定完後選擇工具列的[File]->[Save As]
  7. 自訂檔案名稱後將檔案放在[C:\BGINFO]路徑下後按下[存檔]
  8. 回到[BGInof]主畫面後按下[OK],關閉程式
  9. 在[C:\BGINFO]路徑下建立[BGInfo.cmd]後透過NOTEPAD編輯
  10. 將[C:\BGINFO\bginfo.exe C:\BGINFO\Config.bgi  /Timer:0 /NolicPrompt]貼到 [BGInfo.cmd]中後存檔離開
  11. 依序點擊[開始]->[執行]->輸入[gpedit.msc]後按下[確定]
  12. 在[本機群組原則編輯器]視窗中依序展開[使用者設定]->[Windows設定]->[指令碼(登入/登出)]並雙擊右邊視窗中的[登入]
  13. 在[登入-內容]視窗中按下[新增]
  14. 在[新增指令碼]視窗中的指令碼名稱指到[C:\BGINFO\BGInfo.cmd]後按下[確定]
  15. 回到[登入-內容]視窗中按下[確定],關閉[本機群組原則編輯器]視窗
  16. 以上步驟完成後,任何使用者登入都會出現系統資訊了
參考資料
  1. 下載BgInfo v4.20
  2. 如何利用GPO logon script來部署BGinfo

2013年3月19日 星期二

安裝 Attunity 過程中出現 AttunitySSISOraAdapters.dll 及 AttunitySSISOraConnections.dll 的錯誤訊息

        在安裝 Microsoft Connector Version 1.2 for Oracle by Attunity 過程中出現如下圖的錯誤訊息,其原因是未安裝 Microsoft Visual C++ 2008 SP1 可轉散發套件,安裝了此套件後,此問題便可解決。
        Attunity有分32及64位元的版本,且64位元的安裝檔包含32位元的安裝程式。



載點 : Microsoft Visual C++ 2008 SP1 可轉散發套件 (x86)
載點 : Microsoft Visual C++ 2008 SP1 可轉散發套件 (x64)

載點 : Microsoft Connectors for Oracle
           Microsoft Connectors v1.2 for Oracle for SQL 2008 / 2008 R2 的版本
           Microsoft Connectors v2.0 for Oracle for SQL 2012 的版本

2013年2月5日 星期二

變更SQL Server 2000 Cluster啟動帳號程序

最近因安管要求變更一些系統帳號,剛好有一組帳號是目前SQL Server 2000 Cluster中的啟動帳號,所以就在此紀錄一下變更程序
SQL Server程序
1. 將啟動資料庫的帳號加入到各節點主機中的LOCAL/ADMINISTRATORS群組中
2. 開啟SQL Server 服務主機上的Enterprise Manager
3. 在"SQL Server Enterprise Manager"主控台視窗中依序展開 "主控台跟目錄" > "Microsoft SQL Servers" > "SQL Server 群組" > "PS-DB-XYZ(SQL Cluster Name)"
4. 在"PS-DB-XYZ(SQL Cluster Name)上"右鍵"內容"
5. 在"SQL Server屬性"視窗點選"安全性"頁籤
6. 在"安全性"頁籤下的"啟動服務帳號"窗格中將"指定帳戶"變更為新的啟動帳號,當然密碼也要跟著變更
P.S : 這樣變更完成後會自動在每個節點上添加該帳號所需要的權限
7. 變更完成後按下"確定"

SQL Server代理程式(SQL Agent)
1. 開啟SQL Server 服務主機上的Enterprise Manager
2. 在"SQL Server Enterprise Manager"主控台視窗中依序展開 "主控台跟目錄" > "Microsoft SQL Servers" > "SQL Server 群組" > "PS-DB-XYZ(SQL Cluster Name)" > 管理 > "SQL Server代理程式"
3. 在"SQL Server代理程式"上右鍵"內容"
4. 在"SQL Server代理程式屬性"視窗的"服務啟動帳戶"窗格中變更"使用指定帳戶"及"密碼"後按下"確定"

以上兩個程序完成後,便可以切換Cluster測試是否正常

~~若有任何問題歡迎與我討論~~

2012年8月15日 星期三

[SQL Server]SQL Profilter 因空間不足而停止Trace

      突然接到AP說有User反應系統不能用了,因為這套系統DB Lock很嚴重,直覺就是又發生Lock了,不過沒想到一登入系統就跳出C磁碟空間已滿,雖然這台DB有開TRACE但是Log是在E磁碟,加上DB都在D磁碟,沒理由會爆啊,查了一下後發現在C:\Documents and Settings\[USERName]\Local Settings\Temp\下有兩個Prf*.tmp,這兩個就佔了16GB,發現兇手就是他了,但是這檔案室哪來的呢?
         查了一下發現開SQL Trace除了Log檔之外,還會再TEMP目錄下產生兩個暫存檔,解決此問題的的方法就是把TEMP目錄放到足夠的磁碟空間去。
以下為移動TEMP的程序

1. 點選[開始]->[控制台]->[系統]
2. 在[系統內容]視窗中點選[進階]->[環境變數]
3. 在[使用者變數]中找到[變數]名稱為[TEMP]後點選編輯
4. 將[變數值]改到擁有足夠空間的磁碟後按下[確定]

參考文件:http://msdn.microsoft.com/en-us/library/ms174203.aspx

2012年8月14日 星期二

[SQL SERVER] 刪除資料庫帳號出現"無法卸除所選取的使用者因為該使用者擁有物件"的錯誤訊息

        今天在做備援演練,需要將正式環境的資料庫還原到測試機給User驗證,原本想說這應該是再輕鬆不過的事情,沒想到還原一個31GB的DB可以搞一個上午@@"
        
        從一開始將檔案壓縮 -> 複製到測試機 -> 解壓縮 -> 還原DB 四個小時就不見了,之所以會搞這麼久的原因如下
一 網路品質很糟,COPY 31GB的檔案怎麼COPY怎麼失敗,問網路組也說不出原因,只好先把它給壓縮在COPY
二 機器老舊造成壓縮及解壓縮速度都很慢,當然還原速度就更慢。

        雖然如此還是把DB還原完成,完成後很開心地交給AP測試,想說終於可以去吃飯了,沒想到AP竟然說帳號無想登入,噢~對吼~因為是還原正式套的DB,所以雖然帳號名稱一樣但是SID不同也就沒輒,所以想說很快把DB中帳號砍了,再將測試套中的帳號給權限就OK了,不過再砍的時候出現了一個錯誤訊息



查了一下原來是該帳號下有物件存在所以無法刪除,必須將物件的擁有者改調就可以了,解決程序如下:
一 找出該帳號擁有的物件,在SSMS中執行以下指令
     USE 資料庫名稱
     GO
     SELECT U.name '資料庫帳號',O.name '物件名稱',O.xtype '物件類型'
     FROM dbo.sysobjects O INNER JOIN dbo.sysusers U
     ON O.uid=U.uid
     WHERE U.name='該資料庫帳號的名稱'



二  再透過 sp_changeobjectowner 變更物件的擁有者,在SSMS中執行以下指令。P.S. 在前述步驟中,如果出現多個物件名稱,則必須要每一個都要修改到喔。
      USE 資料庫名稱
      GO
      EXEC sp_changeobjectowner '資料庫帳號.物件名稱', 'dbo'



三 刪除該資料庫帳號,,在SSMS中執行以下指令
     EXEC sp_revokedbaccess '資料庫帳號'