MSDN > 論壇首頁 > 伺服器與企業軟體 論壇 > 資料庫與程式開發(SQL Server Development) > MS-SQL 2005 在下Select 時, 能夠 Link DB 到Oracle嗎?
發問發問
 

已答覆MS-SQL 2005 在下Select 時, 能夠 Link DB 到Oracle嗎?

解答

  • 2008年4月24日 下午 12:10小朱MVP, 版主使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     已答覆

    你要先建立到 Oracle 的 Linked Server 資訊,才可以用 SELECT 存取在 Oracle 上的資料。

     

    http://blog.blueshop.com.tw/josephlee/archive/2004/12/22/1087.aspx

     

  • 2008年5月2日 上午 02:33p1ayer 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     已答覆
    找到原因了
    原因出在 Oracle 裡的該Table
    有的欄位得格式是  timestamp(6)
    所以資料在進MS-SQL時, 轉不過去

    所以需要在下select時
    使用Oracle 的SQL語法, 手動轉換為date格式

    cast(原本的欄位名稱 as date) as 新的欄位名稱
  • 2008年5月19日 上午 07:40p1ayer 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     已答覆
    應該OK了

    http://www.player.idv.tw/prog/index.php?title=MS-SQL#SQL-Server.E5.A6.82.E4.BD.95Select.E5.88.B0Oracle.E8.A3.A1.E7.9A.84.E8.B3.87.E6.96.99

    1.DB Link 由【Oracle Provider for OLE DB】換成【MicroSoft OLE DB Provider for Oracle】
    2.在Oracle上設View, 在Oracle端預先作cast (資料形態轉換), 以簡化在MS-SQL端下的Oracle的SQL查詢

    目前大部分已可正常轉資料了
    除了少數因為Oracle的日期範圍, 超過MS-SQL的日期範圍的欄位, 無解以外

所有回覆

  • 2008年4月24日 下午 12:10小朱MVP, 版主使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     已答覆

    你要先建立到 Oracle 的 Linked Server 資訊,才可以用 SELECT 存取在 Oracle 上的資料。

     

    http://blog.blueshop.com.tw/josephlee/archive/2004/12/22/1087.aspx

     

  • 2008年4月24日 下午 02:57rmiao 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     

    Select with openquery once created linked server to Oracle.

  • 2008年4月28日 上午 05:44p1ayer 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    殘念
    接不上

    select * from OPENQUERY(ERP,'select * from erpdb')

    訊息 7399,層級 16,狀態 1,行 1
    連結伺服器 "ERP" 的 OLE DB 提供者 "OraOLEDB.Oracle" 報告了錯誤。提供者報告了未預期的重大錯誤。
    訊息 7320,層級 16,狀態 2,行 1
    無法對連結伺服器 "ERP" 的 OLE DB 提供者 "OraOLEDB.Oracle" 執行查詢 "select * from erpdb"。

  • 2008年4月28日 下午 06:51rmiao 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     

    Looks like you have connection issue. How did you create linked server? Which provider used? use 64-bit or 32-bit Oracle client?

  • 2008年4月29日 下午 01:04LOLOTAMVP, 版主使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     

    可以到下列網址安裝Oracle Client:

    http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201winsoft.html

     

    您的Oracle版本為? 32 or 64 位元?

  • 2008年5月2日 上午 02:25p1ayer 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    QSurpriseracle的Server端版本? 32 or 64 位元?
    A: 不知道是
    32 or 64 位元, 但應該是Oracle 9i 相容的版本

    Q.
    Oracle的Client端版本
    A: Oracle9i Database Release 2 Client for Microsoft Windows (這個應該是 32位元版的)

    Q.MS-SQL版本
    A: MS-SQL Server 2005

    ----
    Oracle 的ODBC設定, 確定有設好, 且Oracle相容的其他用戶端, 也能確實的Select出來裡頭的資料
    但在
    MS-SQL之中, 卻是接不起來?
    幫我看看
    哪一個步驟錯了

    1.伺服器物件 -> 連接的伺服器
    2.滑鼠右鍵 -> 新增連接的伺服器
    3.依序填入以下的內容
    連接的伺服器: ERP
    伺服器類型: 其他的資料來源
    提供者: Oracle Provider for OLE DB
    產品名稱: ERP
    資料來源: ERP
    提供者字串: Provider=OraOLEDB.Oracle.1;Password=erppassword;Persist Security Info=True;User ID=erpuser;Data Source=ERP

    4.切換到"安全性"那一頁, 再填入登入Oracle的帳密
    使用此安全性內容建立
    遠端登入:
    erpuser
    使用此密碼:
    erppassword

    5.確定

    ---
    基於避免洩漏資料庫的
    真實來源與帳密
    貼到討論區這裡的我有改過
    但新增 Link DB時的格式與流程
    就照上面的步驟一樣

    select * from OPENQUERY(ERP,'select * from erpdb')

    訊息 7399,層級 16,狀態 1,行 1
    連結伺服器 "ERP" 的 OLE DB 提供者 "OraOLEDB.Oracle" 報告了錯誤。提供者報告了未預期的重大錯誤。
    訊息 7320,層級 16,狀態 2,行 1
    無法對連結伺服器 "ERP" 的 OLE DB 提供者 "OraOLEDB.Oracle" 執行查詢 "select * from erpdb"。


    有人可以幫忙看問題出在哪裡嗎?
  • 2008年5月2日 上午 02:33p1ayer 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     已答覆
    找到原因了
    原因出在 Oracle 裡的該Table
    有的欄位得格式是  timestamp(6)
    所以資料在進MS-SQL時, 轉不過去

    所以需要在下select時
    使用Oracle 的SQL語法, 手動轉換為date格式

    cast(原本的欄位名稱 as date) as 新的欄位名稱
  • 2008年5月5日 上午 03:12p1ayer 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    相關問題
    目前只做到Link DB到Oracle, 但資料無法正常Select出來

    http://www.blueshop.com.tw/board/show.asp?subcde=BRD20080505111006NCV&fumcde=FUM20041006152735ZFS
    http://forums.microsoft.com/TechNet-CHT/ShowPost.aspx?PostID=3278122&SiteID=23
    http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3232984&SiteID=14
  • 2008年5月5日 上午 03:51LOLOTAMVP, 版主使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    目前只針對某資料表找不出來, 還是全部資料表都沒辦法select?

     

  • 2008年5月5日 上午 07:56p1ayer 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    有的Table只要在Select時, 預先排除掉在Oracle下具有timestamp(6) 格式的欄位的話
    就可以正常 select

    (Orace 的資料型態轉換語法 cast , 不知道為何只要經過SQL Server就自動cut 掉關鍵字了?)

    有的Table
    不管我在select時預先拿掉多少欄位
    select時
    它不出來
    就是不出來
    (SQL Server 2005在查詢時, 陷入沒有回應, 等超過半小時, 也一樣)
    可是同樣的Oracle的select 字串, 我拿到其他的Oracle的用戶端, 卻又一切正常


    難道SQL Server 在Link DB 到 Oracle時
    還有需要微調的選項或設定嗎?
  • 2008年5月5日 下午 04:05rmiao 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     

    Tried create linked server with other provider like ole db for odbc driver?

  • 2008年5月19日 上午 07:40p1ayer 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     已答覆
    應該OK了

    http://www.player.idv.tw/prog/index.php?title=MS-SQL#SQL-Server.E5.A6.82.E4.BD.95Select.E5.88.B0Oracle.E8.A3.A1.E7.9A.84.E8.B3.87.E6.96.99

    1.DB Link 由【Oracle Provider for OLE DB】換成【MicroSoft OLE DB Provider for Oracle】
    2.在Oracle上設View, 在Oracle端預先作cast (資料形態轉換), 以簡化在MS-SQL端下的Oracle的SQL查詢

    目前大部分已可正常轉資料了
    除了少數因為Oracle的日期範圍, 超過MS-SQL的日期範圍的欄位, 無解以外