2013年10月2日 星期三

[SQl Server] 資料庫異機還原後原帳號無法登入

將資料庫的備份檔案(*.bak)或是透過卸載下來的*.mdf搬移到另一台SQL Server後,透過RESTORE *.bak或是附加*.mdf方式還原資料庫後,當建立一組帳號與原SQL主機上的帳號一樣並賦予權限時會出現如下圖的錯誤訊息
        透過SSMS圖形介面
 
        透過SSMS的新增查詢

       
        碰到此問題時可以透過SSMS連到還原後的資料庫,將結構描述及使用者中相關帳號都刪除後再賦予該帳號權限,但是若該帳號擁有物件的話是無法刪除的,所以又必須先將該帳戶擁有的物件移轉給其他帳號後才能刪除,這樣做還真的很麻煩。
      
        會發生帳號名稱依樣但是就是無法Login的主要原因是,當帳號在建立時系統會產生一組對應的SID,當資料庫還原或是附加後,即便建立一組名稱相同的帳號其SID也不會一樣,所以也是無法使用該資料庫的。

所以過設定SID的方式來解決此問題,其步驟如下
1. 在來源端資料庫主機上先查出該帳號的SID,並把該SID記錄下來
     指令:SELECT sid FROM [資料庫名稱].sys.syslogins WHERE name ='帳號名稱'


2. 到目的端資料庫主機上開啟SSMS查詢視窗後執行以下語法,執行完成後開啟該User屬性視窗的使用者對應,就會發現該有的權限及角色都會自動對應好,而且該帳號也可以順利登入資料庫主機(如下圖)。

 指令:
     USE [master]
     GO
     CREATE LOGIN [ao] WITH PASSWORD = N'ao',
                          DEFAULT_DATABASE = [AOMGR],
                          CHECK_EXPIRATION = OFF,
                          CHECK_POLICY = OFF,
                          SID = 0xECFF96DFC922EC45A164306BC8144CF8
   GO

 
附註:
--查詢整個Instance下所有帳號SID
  SELECT loginname, name, sid, dbname FROM master.sys.syslogins
--查詢某資料庫中所有使用者的SID
  SELECT * FROM [資料庫名稱].sys.sysusers





2013年9月29日 星期日

[SQL Server] 資料庫備份時發現執行狀態一直在SUSPENDED

執行資料庫備份排程發現執行時間比平常久,透過以下查了一下發現

透過sp_who2發現該session一直處於SUSPENDED

透過排程看只看到一直在執行中

所以以上兩者都沒辦法看到目前進度,所以可以透過一個sys.dm_exec_requests來查看目前執行的狀況,只要percent_complete欄位值有不斷在增加就沒問題了

範例:SELECT session_id,command, percent_complete FROM sys.dm_exec_requests WHERE session_id= 110

參考資料:http://technet.microsoft.com/zh-tw/library/ms177648.aspx
 

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測試是否正常

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