Linked Server and Distributed Queries  in Oracle

In MSSQL, Linked Server and Distributed Queries provide SQL Server with access data from remote data sources. How about in Oracle ?
I have a table A at Server A and table B at Server B, i wanna join these two table together. How can i do this in Oracle ?

Use a database link: http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_5005.htm
For instance, if you have created on database A a link to database B with name 'database_b'
you can use
select * from table@database_b

Similar Messages

  • Facing problem in distributed queries over Oracle linked server

    Hi,
    I have a SQL Server 2005 x64 Standard Edition SP3 instance. On the instance, we had distributed (4 part) queries over an Oracle linked server running fine just a few hours back but now they have starting taking too long. They seem to work fine when OPENQUERY
    is used. Now I have a huge number of queries using the same mechanism and is not feasible for me to convert all queries to OPENQUERY, please help in getting this resolved.
    Thanks in advance.

    Hi Ashutosh,
    According to your description, you face performance issues with distributed queries and
    it is not feasible for you to convert all queries to
    OPENQUERY. To improve the performance, you could follow the solutions below:
    1. Make sure that you have a high-speed network between the local server and the linked server.
    2. Use driving_site hint. The driving site hint forces query execution to be done at a different site than the initiating instance. 
    This is done when the remote table is much larger than the local table and you want the work (join, sorting) done remotely to save the back-and-forth network traffic. In the following example, we use the driving_site hint to force the "work"
    to be done on the site where the huge table resides:
    select /*+DRIVING_SITE(h)*/
    ename
    from
    tiny_table t,
    huge_table@remote h
    where
    t.deptno = h.deptno;
    3. Use views. For instance, you could create a view on the remote site referencing the tables and call the remote view via the local view as the following example.
    create view local_cust as select * from cust@remote;
    4. Use procedural code. In some rare occasions it can be more efficient to replace a distributed query by procedural code, such as a PL/SQL procedure or a precompiler program.
    For more information about the process, please refer to the article:
    http://www.dba-oracle.com/t_sql_dblink_performance.htm
    Regards,
    Michelle Li

  • Linked Server :: OLE DB provider "OraOLEDB.Oracle" for linked server "ABC" returned message "New transaction cannot enlist in the specified transaction coordinator. ".

    Hello All,
    As mentioned in title, i am stuck up with that articular error from last three days,
    i have following scenario, my SQL server 2008, my oracle 10g are on both same machine with OS Windows Server 2008.
    the following error generated on my management studio when i execute my procedure written in my SQL server. Following is original source code snippet after error massage.
    OLE DB provider "OraOLEDB.Oracle" for linked server "ORCL" returned message "New transaction cannot enlist in the specified transaction coordinator. ".
    Msg 50000, Level 16, State 2, Procedure PROC_MIGRATE_MST_FRM_ORA_SQLSERVER, Line 43
    The operation could not be performed because OLE DB provider "OraOLEDB.Oracle" for linked server "ORCL" was unable to begin a distributed transaction.
    BEGIN TRY
    -- MIGRATION OF PR_COMPANY_MH START
    BEGIN TRANSACTION T1
    PRINT 'mILAN NNNNNNNNN 11'
    INSERT INTO PROD.PR_COMPANY_MH
    SELECT * FROM OPENQUERY(ORCL, 'SELECT * FROM PR_COMPANY_MH WHERE SQL_FLG = ''N'' ')
    PRINT 'mILAN NNNNNNNNN 12'
    UPDATE OPENQUERY(ORCL, 'SELECT SQL_FLG FROM PR_COMPANY_MH WHERE SQL_FLG = ''N''')
    SET SQL_FLG = 'Y'
    --EXECUTE ('UPDATE PROD.PR_COMPANY_MH SET SQL_FLG = ''Y'' ') AT [ORCL]
    PRINT 'mILAN NNNNNNNNN 13'
    COMMIT TRANSACTION T1
    -- MIGRATION OF PR_COMPANY_MH END
    END TRY
    BEGIN CATCH
    PRINT 'mILAN NNNNNNNNN 14'
    ROLLBACK TRANSACTION T1
    PRINT 'mILAN NNNNNNNNN 15'
    SELECT
    @ErrorNumber = ERROR_NUMBER(),
    @ErrorSeverity = ERROR_SEVERITY(),
    @ErrorState = ERROR_STATE(),
    @ErrorLine = ERROR_LINE(),
    @ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-');
    PRINT 'mILAN NNNNNNNNN 16'
    SELECT @ErrorMessage = ERROR_MESSAGE();
    RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState, @ErrorNumber, @ErrorProcedure)
    PRINT 'mILAN NNNNNNNNN 17'
    END CATCH
    this perticular part is raising that error, and i had tried every configuartion on my local machine related to MS DTC.
    When i remove my transaction code, its work just fine no exception raise, but when i use then i.e. BEGIN TRAN, COMMITE TRAN, AND ROLLBACK TRAN. its giving me error, other wise its fine.
    Please Help or disscus or suggest why my transaction base code is not woking????
    thanks in advance.
    Regards,
    Milan

    Sorry again, I am new on any kind of forum, so i am learning now, following is the error massage generated by SQL Server. and its not
    an architecture problem, i had just included my complete architecture to be more informative while asking for the solution or suggestion. My real problem is T-SQL, i think and its related to Distributed queries raise in SQL Server in Oracle Link Server.
    OLE DB provider "OraOLEDB.Oracle"
    for linked server "ORCL" returned message "New transaction cannot enlist in the specified transaction coordinator. ".
    Msg 50000, Level 16, State 2, Procedure PROC_MIGRATE_MST_FRM_ORA_SQLSERVER,
    Line 43
    The operation could not be performed because OLE
    DB provider "OraOLEDB.Oracle" for linked server "ORCL" was unable to begin a distributed transaction.

  • Download files to a local server and distribute locally

    I have 3 pc's to ugrade, not at a lot but is time consuming.
    I would like to download only the necessary files to a server and than distribute these to the two other pc's
    What is the best way to do this ?
    Is the procedure to follow described somewhere ? Thanks
    Last edited by go4it (2007-03-25 21:04:32)

    I don't think it is necessary, just added a local server and now it goes 50 times faster
    Last edited by go4it (2007-03-25 21:43:53)

  • ORA-00164 Autonomous and Distributed Transactions in Oracle 8i - Forms6i

    Hi, in Forms6i I'm using Autonomous transactions (insert and update), and I want to use also a database link to make a query in a remote database (Distributed transaction). Even when this request are done in different PL/SQL within Forms6i, I get the error message ORA-00164 Distributed transactions disallowed within autonomous transactions. Is there a way to avoid this error message?
    Thanx

    Hello,
    I had a similar Problem, when I tried to log errormessages while selecting by db-link.
    I use pipes now to send the errormessages. The pipe is read at regular intervals and then I can Insert without using autonomous transactions.
    I hope, this will help you
    Marcus

  • Deployment problem on 10g App server and 8.1.6 Oracle Db

    Hello
    I have a problem. I have an application which were developed on Jdeveloper by using ADF Classes. Apllication has consist of 2 project 1st project run on 10g DB. Second one connected to 8.1.6. Apllication run well on Embedded OC4j of J Developer. But While ı have deployed the application to App Server 10g, Part of the Application which uses 10 g is working but part of the application which uses 8.1.6 not working. When I Try to connect the application i get the following error.
    I thought that this may be caused because of security setting.
    Application which uses 8.1.7 cannot be open JDBC connection. Authentication may cause this problem.
    But i couldnt resolve
    Any Idea?
    ERROR MESSAGE :
    at oracle.jbo.server.ConnectionPool.getConnection(ConnectionPool.java:66)
    at oracle.jbo.server.ConnectionPoolManagerImpl.getConnection(ConnectionPoolManagerImpl.java:56)
    at oracle.jbo.server.DBTransactionImpl.establishNewConnection(DBTransactionImpl.java:856)
    at oracle.jbo.server.DBTransactionImpl.initTransaction(DBTransactionImpl.java:1095)
    at oracle.jbo.server.DBTransactionImpl.initTxn(DBTransactionImpl.java:5724)
    at oracle.jbo.server.ApplicationModuleImpl.doPoolMessage(ApplicationModuleImpl.java:6843)
    at oracle.jbo.common.ampool.ApplicationPoolImpl.sendPoolMessage(ApplicationPoolImpl.java:3886)
    at oracle.jbo.common.ampool.ApplicationPoolImpl.prepareApplicationModule(ApplicationPoolImpl.java:1886)
    at oracle.jbo.common.ampool.ApplicationPoolImpl.doCheckout(ApplicationPoolImpl.java:1711)
    at oracle.jbo.common.ampool.ApplicationPoolImpl.useApplicationModule(ApplicationPoolImpl.java:2576)
    at oracle.jbo.common.ampool.SessionCookieImpl.useApplicationModule(SessionCookieImpl.java:441)
    at oracle.jbo.common.ampool.SessionCookieImpl.useApplicationModule(SessionCookieImpl.java:411)
    at oracle.jbo.common.ampool.SessionCookieImpl.useApplicationModule(SessionCookieImpl.java:406)
    at oracle.jbo.client.Configuration.getApplicationModule(Configuration.java:1370)
    at oracle.jbo.client.Configuration.createRootApplicationModule(Configuration.java:1328)
    at oracle.jbo.client.Configuration.createRootApplicationModule(Configuration.java:1300)
    at pasttel.view.MindBalanceAction.<init>(MindBalanceAction.java:33)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
    at java.lang.Class.newInstance0(Class.java:308)
    at java.lang.Class.newInstance(Class.java:261)
    at org.apache.struts.util.RequestUtils.applicationInstance(RequestUtils.java:231)
    at org.apache.struts.action.RequestProcessor.processActionCreate(RequestProcessor.java:326)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:268)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65)
    at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:228)
    at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher
    .java:649)
    at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:322)
    at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:790)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:208)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:125)
    at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
    at java.lang.Thread.run(Thread.java:534)
    ## Detail 0 ##
    oracle.jbo.DMLException: JBO-26061: Error while opening JDBC connection.
    at oracle.jbo.server.ConnectionPool.createConnection(ConnectionPool.java:220)
    at oracle.jbo.server.ConnectionPool.instantiateResource(ConnectionPool.java:135)
    at oracle.jbo.pool.ResourcePool.createResource(ResourcePool.java:523)
    at oracle.jbo.pool.ResourcePool.useResource(ResourcePool.java:318)
    at oracle.jbo.server.ConnectionPool.getConnectionInternal(ConnectionPool.java:87)
    at oracle.jbo.server.ConnectionPool.getConnection(ConnectionPool.java:66)
    at oracle.jbo.server.ConnectionPoolManagerImpl.getConnection(ConnectionPoolManagerImpl.java:56)
    at oracle.jbo.server.DBTransactionImpl.establishNewConnection(DBTransactionImpl.java:856)
    at oracle.jbo.server.DBTransactionImpl.initTransaction(DBTransactionImpl.java:1095)
    at oracle.jbo.server.DBTransactionImpl.initTxn(DBTransactionImpl.java:5724)
    at oracle.jbo.server.DBTransactionImpl2.connect(DBTransactionImpl2.java:116)
    at oracle.jbo.server.ApplicationModuleImpl.doPoolConnect(ApplicationModuleImpl.java:7073)
    at oracle.jbo.server.ApplicationModuleImpl.doPoolMessage(ApplicationModuleImpl.java:6843)
    at oracle.jbo.common.ampool.ApplicationPoolImpl.sendPoolMessage(ApplicationPoolImpl.java:3886)
    at oracle.jbo.common.ampool.ApplicationPoolImpl.prepareApplicationModule(ApplicationPoolImpl.java:1886)
    at oracle.jbo.common.ampool.ApplicationPoolImpl.doCheckout(ApplicationPoolImpl.java:1711)
    at oracle.jbo.common.ampool.ApplicationPoolImpl.useApplicationModule(ApplicationPoolImpl.java:2576)
    at oracle.jbo.common.ampool.SessionCookieImpl.useApplicationModule(SessionCookieImpl.java:441)
    at oracle.jbo.common.ampool.SessionCookieImpl.useApplicationModule(SessionCookieImpl.java:411)
    at oracle.jbo.common.ampool.SessionCookieImpl.useApplicationModule(SessionCookieImpl.java:406)
    at oracle.jbo.client.Configuration.getApplicationModule(Configuration.java:1370)
    at oracle.jbo.client.Configuration.createRootApplicationModule(Configuration.java:1328)
    at oracle.jbo.client.Configuration.createRootApplicationModule(Configuration.java:1300)
    at pasttel.view.MindBalanceAction.<init>(MindBalanceAction.java:33)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
    at java.lang.Class.newInstance0(Class.java:308)
    at java.lang.Class.newInstance(Class.java:261)
    at org.apache.struts.util.RequestUtils.applicationInstance(RequestUtils.java:231)
    at org.apache.struts.action.RequestProcessor.processActionCreate(RequestProcessor.java:326)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:268)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65)
    at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:228)
    at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:649)
    at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:322)
    at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:790)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:208)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:125)
    at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
    at java.lang.Thread.run(Thread.java:534)
    at oracle.jbo.server.DBTransactionImpl2.connect(DBTransactionImpl2.java:116)
    at oracle.jbo.server.ApplicationModuleImpl.doPoolConnect(ApplicationModuleImpl.java:7073)

    From the App Server oracle home, and with the same connection information as app is using, can you connect to 8.1.6 db with sqlplus?
    You said it works from JDeveloper - which version?
    From AS 10.1.2 (which means net/client libraries 10.1.0.3) I get
    "ORA-03134: Connections to this server version are no longer supported."
    To 8.1.7.4 database connection succeeds. (hint: 8.1.6 is not supported!)
    Maybe this could be the culprit?

  • How to put the data into cache and distribute to nodeusing oracle coherence

    Hi Friends,
    i am having some random number data writing into file,from that file i am reading the data and i want to put into cache,how can i put the data into cache and partition this data into different nodes ( machines) to caluculate like S.D,variance..etc..like that.(or how can i implement montecarlo using oracle coherence) if any one know plz suggest me with flow.
    Thank you.
    regards
    chandra

    Hi robert,
    i have some bulk data in some arraylist or object format,i want to put into cache.
    i am not able to put into cache.i am using put method like cache.put(object key ,object value) ,but its not allowing to put into cache.
    can you please help me.i m sending my code.plz go thru and tel me whr i did mistake.
    package lab3;
    import com.tangosol.net.CacheFactory;
    import com.tangosol.net.NamedCache;
    import com.tangosol.net.cache.NearCache;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    import java.util.Scanner;
    import javax.naming.Name;
    public class BlockScoleData {
         * @param args
         * s=The spot market price
         * x=the exercise price of the option
         * v=instantaneous standard deviation of s
         * r=risk free instantaneous rate of interest
         * t= time to expiration of the option
         * n – Number of MC simulations.
         private static String outputFile = "D:/cache1/sampledata2.txt";
    private static String inputFile = "D:/cache1/sampledata2.txt";
    NearCache cache;
    List<Credit> creditList = new ArrayList<Credit>();
         public void writeToFile(int noofsamples) {
              Random rnd = new Random();
              PrintWriter writer = null;
              try {
                   writer = new PrintWriter(outputFile);
                   for (int i = 1; i <= noofsamples; i++) {
                        double s = rnd.nextInt(200) * rnd.nextDouble();
                        //double x = rnd.nextInt(250) * rnd.nextDouble();
                        int t = rnd.nextInt(5);
                        double v = rnd.nextDouble() ;
                        double r = rnd.nextDouble() / 10;
                        //int n = rnd.nextInt(90000);
                        writer.println(s + " " + t + " " + v + " "
                                  + r );
              } catch (FileNotFoundException e) {
                   e.printStackTrace();
              } finally {
                   writer.close();
                   writer = null;
    public List<Credit> readFromFile() {
    Scanner scanner = null;
    Credit credit = null;
    // List<Credit> creditList = new ArrayList<Credit>();
    try {
    scanner = new Scanner(new File(inputFile));
    while (scanner.hasNext()) {
    credit = new Credit(scanner.nextDouble(), scanner.nextInt(),
    scanner.nextDouble(), scanner.nextDouble());
    creditList.add(credit);
    System.out.println("read the list from file:"+creditList);
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } finally {
    scanner.close();
    credit = null;
    scanner = null;
    return creditList;
    // public void putCache(String cachename,List<Credit> list){
    // cache = CacheFactory.getCache ( "VirtualCache");
    // List<Credit> rand = new ArrayList<Credit>();
    public Object put(Object key, Object value){
    cache = (NearCache)CacheFactory.getCache("mycache");
    String cachename = cache.getCacheName();
    List<Credit> cachelist=new ArrayList<Credit>();
    // Object key;
    //cachelist = (List<Credit>)cache.put(creditList,creditList);
    cache.put(creditList,creditList);
    System.out.println("read to the cache list from file:"+cache.get(creditList));
    return cachelist;
         public static void main(String[] args) throws Exception {
         NearCache cache = (NearCache)CacheFactory.getCache("mycache");
              new BlockScoleData().writeToFile(20);
         //new BlockScoleData().putCache("Name",);
              System.out
                        .println("New file \"myfile.csv\" has been created to the current directory");
         CacheFactory.ensureCluster();
         new BlockScoleData().readFromFile();
    System.out.println("data read from file successfully");
         List<Credit> creditList = new ArrayList<Credit>();
    new BlockScoleData().put(creditList,creditList);
         System.out.println("read to the cache list from file:"+cache.get(creditList));
    //cache=CacheFactory.getCache("mycache");
    //mycacheput("Name",new BlockScoleData());
    //     System.out.println("name of cache is :" +mycache.getCacheName());
    //     System.out.println("value in cache is :" +mycache.get("Name"));
    //     System.out.println("cache services are :" +mycache.getCacheService());
    regards
    chandra

  • How and Where linked server queries are processing ?

    Hi experts,
     Its my curiosity, i want to know where the linked server queries are running.I create linked server in local server. i am accessing one table,How the query is processing and how the it forming result set ?
    pls guide me.

    Hello,
    Please read below it might be helpful. Query would be processed at destination end if you are querying oracle database, SQL server will use Linked server and OLEDB provider for Oracle to connect to Oracle and then run query there and bring back result
    to you.
    Linking Server
    Below discussion might Interest you
    Where linked server queries are actually processed
    Please mark this reply as answer if it solved your issue or vote as helpful if it helped so that other forum members can benefit from it.
    My TechNet Wiki Articles

  • Linked Servers - Sql server 2005 to connect to Oracle 11g using ldap.ora instead of tnsnames.ora

    We have a SQL Server 2005 64bit box that needs a linked server created to Oracle 11g 64bit box. I have all the Oracle client software installed and can successfully connect to the Oracle database using SQL+ on the SQL Server 2005 64bit box. When I create
    the linked server and select the OraOledb.Oracle provider, I get the TNSNames error. The Oracle server does not use tnsnames.ora it uses OLAP.ora to resolve. How do I get Linked server to stop trying to connect via TNSNames and use the OLAP.ora file instead?
    I can't find any articles for this specific issues. All Oracle examples tell you to use TNSNAMES. The Oracle server is not under my companies control so I can not force the vendor to use tnsnames instead of OLAP.

    Hi,
    Have you got a resolution?
    Thank you.

  • ORACLE SERVER AND UNIX TP MONITOR-2

    제품 : ORACLE SERVER
    작성날짜 : 1995-01-24
    Subject: Oracle Server and UNIX Transaction Processing Monitors-2
    Page(3/4)
    This file contains commonly asked questions about Oracle7 Server and UNIX
    Transaction Processing Monitors (TPMs). The topics covered in this article are
         o Oracle Parallel Server and TP Monitors
         o Oracle and DCE-based TP Monitors
         o Other commonly asked questions
    The questions answered in part 3 provide additional detail to the information
    provided in part 1.
    Oracle Parallel Server and TP Monitors
    ======================================
    How does Oracle Parallel Server (OPS) work with TP Monitors?
    If you are using Oracle-managed transactions, there are no special
    considerations. But if you are using TPM-managed transactions, and
    thus need to use the XA interface, then Oracle requires release 7.1.3
    or later and a special version of the Distributed Lock Manager, called
    the session-based lock manager. This version of the DLM is not yet
    available for all platforms. To understand this restriction, let's take
    a look at one of the technical details of XA.
    The XA specification requires that the Resource Manager be able to
    move a transaction from one process to another, and even to be
    able to commit in a separate process. In Oracle, transactions are
    attached to sessions, so that means that we also have to be able to
    move sessions. Therefore, the session/transaction can't have any state
    which is tied to a particular process. The first generation distributed
    lock managers were all built to use the process id as the lock owner,
    which doesn't work for locks which need to move with the transaction.
    Oracle and DCE-based TP Monitors
    ================================
    How does Oracle interface to the Encina TP monitor? To CICS/6000? I've
    heard that they require OSF DCE facilities in order to run?
    Oracle interfaces to Encina and CICS/6000 just as it does to any other
    TP Monitor. The TP Monitor issues XA commands to control transactions, and
    Oracle executes the commands. Encina and CICS/6000 do use DCE features for
    their own operation. However, this use is transparent to the Oracle Server.
    What DCE facilities can Oracle products take advantage of when working with
    a DCE-based TP Monitor?
    The two most commonly mentioned DCE features which might be useful
    to Oracle users are multi-threading and security. We look at these in
    the subsequent questions in this section.
    Encina documentation suggests that a Resource Manager such as Oracle can
    be either single-threaded or multi-threaded? Which way is Oracle XA
    implemented?
    The Oracle XA implementation is single-threaded, as is any Oracle client.
    Within a single process, at most one thread can access Oracle at a time.
    Does that mean that only a single Encina application can access an instance
    of Oracle transactionally at any given moment?
    No. Oracle XA is only single-threaded within a single application server
    process. Multiple applications can access Oracle simultaneously using XA
    by using different application processes. Encina allows
    (1) serial reuse of a single server by different clients. There are
    two options for this. The server can use long term reservation
    but be defined to be in shared or concurrent access mode, which
    allows the server to be used by another client as soon as an RPC
    completes. Alternatively, the server can use default reservation
    and exclusive mode, which allows the server to be used by another
    client as soon as the current transaction ends.
    (2) concurrent execution by multiple servers, even if they are accessing
    the same Oracle database. These may be executing the same or different
    procedures.
    These two features should let you get as much concurrency as you need.
    Why isn't the Oracle XA library multi-threaded?
    The XA specification specifically states that its use of the phrase
    "thread of control" means a process. If an RM were to multi-thread its
    XA, it would be in violation of the specification. This restriction
    was put place in because at the time the specification was written,
    there were numerous thread packages: if the TM used one, the application
    another, and perhaps the RM yet a third, there's no way it could work.
    As threads standards settle down, the later versions of XA will probably
    relax this restriction.
    Will Oracle change if the XA specification changes?
    Very likely. The exact time frame will of course depend on the priority of
    all work items at that time.
    Does Oracle use DCE security via the TP Monitors?
    The integrity of the connection between a DCE TP Monitor client and DCE
    TP Monitor server is protected by the DCE security functionality.
    Theoretically, the TP Monitor could make the DCE-protected client security
    information available to Oracle. Unfortunately, there's no standard way
    for a TP Monitor to pass security information information to a Resource
    Manager such as Oracle. Oracle is leading an effort to extend the X/Open
    model to allow use of the security information provided by the Monitor.
    In the meantime, the basic DCE security features such as encryption are
    useful within TP Monitors.
    Effective use of DCE security would normally also mean that the security of
    the TP Monitor client be passed through the TP Monitor, through the Oracle
    client (application server), to the Oracle Server, and possibly on
    to other Oracle Servers through database links. The ability to transfer
    security information to other processes, called delegation, is missing
    in DCE version 1.0. DCE version 1.1, expected to emerge in late 1994,
    has some delegation features. Oracle is examining these features to see
    how they might be used.
    Are there any special considerations for CICS/6000?
    There are two:
    (1) It is inefficient to run without XA. CICS/6000 is designed to
    use XA. It uses XA so that the CICS server can log on to Oracle
    when it starts, after which it makes that Oracle connection available
    to any transaction it executes. If you don't use XA, the CICS server
    does not itself log on to Oracle so each transaction has to log on
    and log off - a very expensive mode of operation. Also, it is very
    un-cics-like in that the application does the log{on,off} and also
    commits - in a mainframe CICS database program CICS would implicitly
    do these operations. Oracle does not recommend this mode because of the
    performance penalty.
    (2) CICS servers are generic and dynamically load application modules.
    In order for these modules to access the Oracle connection made by
    CICS, the applications must be built with a shared object version of
    the Oracle libraries. This is an installation option on platforms which
    support CICS/6000 and other products using its architecture such as
    CICS 9000.
    Other commonly asked questions
    ==============================
    What other Resource Managers can be included in an Oracle XA transaction?
    Several other relational database vendors have an XA implementation
    available or in progress. There is an XA C-ISAM product from
    Gresham Telecomputing. There are also Resource Managers contained
    within some of the TP Monitors which can be coordinated in the same
    transaction. For example, CICS/6000 has VSAM files and other data
    stores, Encina has its RQS queuing system, and Tuxedo has its /Q queuing
    system.
    What is Recoverable Queuing Service (RQS) and how does it interoperate with
    Oracle7 and Encina? What about /Q?
    Recoverable Queuing Service is a feature provided by Encina which allows
    transactional, distributed queuing (enqueue/dequeue). Tuxedo has a similar
    product called /Q. Because these products are themselves coordinated by the
    TM component of the TP Monitor, their queue operations are atomically
    coordinated with with operations on XA Resource Managers such as Oracle7
    Server. That is, they can atomically put something on one of their queues
    and commit an Oracle transaction, then at some later time dequeue an
    entry atomically with doing some other Oracle transaction. The queue
    system guarantees that the message will not be lost or transmitted twice.
    Can I mix TP Monitor applications with standard Oracle7 Server applications?
    Yes, you can have existing Oracle applications connected to the database
    with alongside TPM applications against the same database. The TPM does
    not manage the whole database, just those transactions which are started
    by the TPM. The Oracle Server will properly handle concurrency control
    between the transactions managed by itself and those managed by the TPM.
    Is Oracle planning to change its tools to be more suitable for TP Monitors?
    With Oracle Procedure Builder 1.5, to be available with CDE2,
    Oracle will provide a foreign function interface that allows you to
    dynamically set up PL/SQL calls that access C functions. In other
    words, you can access C routines in Windows DLLs from within your
    PL/SQL procedures. This will allow PL/SQL under Windows easy access to
    TP Monitor APIs.
    Does Oracle7 Server itself use XA-compliant TPMs as the interface to
    foreign RMs?
    No, for this purpose Oracle Server uses the SQL*Connect products or the new
    Transparent and Procedural Gateway products.
    Does Oracle7 Server use XA to coordinate Oracle7-only distributed
    transactions?
    No, it uses an internal mechanism.
    Can database links be used with XA?
    If an Oracle7 database is running under XA, it can access other Oracle7
    databases through database links, with some restrictions. First, the
    access to the other database must use SQL*Net V2 and be running MTS.
    Second, it must currently be to another Oracle7 database. Assuming those
    restrictions, the Oracle 7 database can do distributed update to another
    Oracle 7 database by using a database link, whether it is started by an
    Oracle application or a TP Monitor application. The TPM will see Oracle
    as only a single RM, but Oracle7 will propagate all the transaction
    commands to the other database, including the two-phase commit. If
    the transaction is started by a TP Monitor application and is using XA,
    it can also update non-Oracle resources managed by the TPM. If it
    is started from an Oracle application, it can only include resources
    managed by Oracle.
    Here's a sample configuration:
    | TPM | | TPM |
    | client | | client |
    | |
    | |
    | TPM |
    | |
    | |
    | Oracle | Forms, Forms, | Oracle | | non-XA | | XA |
    | client | Plus, Plus, | client | | TPM | | TPM |
    --------- Pro, Pro, --------- | server | | server |
    | Financials, Financials, | |(note 1)| ----------
    | etc. etc. | ---------- |
    | | | |
    | SQL | SQL | SQL | XA
    | commit | commit | commit | commit
    | | | |
    | Oracle | | Oracle | | Oracle | | Oracle |
    | server | | server | | server | | server |
    | | | |
    | | | |
    | | | |
    | Database 1 | | Database 2 |
    | | | |
    | A | A
    | | dblink to database 1 | |
    | ------------------------------------ |
    | |
    dblink to database 2
    Note 1: Oracle will work having both XA and non-XA servers but some TPMs
    may have restrictions on this.
    Are multiple direct connections possible from a Pro* program?
    Using XA, you can not only specify multiple direct connections to Oracle7
    databases, you can also update them both in the SAME transaction. The
    way to do this is to use a precompiler feature called a named database.
    When you use a named database, you qualify the SQL statement with the
    database name. For example, you write EXEC SQL AT dbname UPDATE emp ....
    We have a complementary feature in the xa open string to let the user
    associate the name with a particular RM instance, called the DB clause.
    You will also want to use the SqlNet clause in the open string so you
    can give the two different SIDs. This clause does not require the use of
    the SQL*Net product, it is just a naming convention. For more information,
    see Oracle7 Server for UNIX Administrator's Reference Guide.
    Some TP Monitors may not support having multiple Resource Mangers in the
    same server; check with the TPM vendor.
    Is there any collateral available for XA or TP Monitors?
    Oracle At Work 52684.0692
    Oracle7 Server for UNIX Administrator's #A10324-1
    Reference Guide
    Guide to Oracle's Products and Services #A10560
    Oracle7 Server and CICS/6000               #A14200
    Where can I get more information on the DTP model?
    X/Open's address is
    X/Open company Ltd (Publications)
    P O Box 109
    Penn
    High Wycombe
    Bucks HP10 8NP
    Tel: +44 (0)494 813844
    Fax: +44 (0)494 814989
    Request
    G307 Distributed Transaction Processing: Reference Model Version 2
    X/Open Guide G307 ISBN 1-859120-19-9 28cm.44p.pbk.220g.11/93
    Page(4/4)
    This file contains commonly asked questions about Oracle Server and UNIX
    Transaction Processing Monitors (TPMs). The topics covered in this article are
         o Performance with Oracle Server and TP monitors
         o Performance using Oracle's XA Library
    The questions answered in part 4 provide additional detail to the information
    provided in part 1.
    Performance with Oracle Server and TP Monitors
    ==============================================
    I have heard that Transaction Processing Monitors (TPMs) will increase
    Oracle Server performance. Is this true?
    Several hardware and TPM vendors have made the claim that TPMs
    will increase RDBMS performance. This claim is based on TPC-A
    benchmarks. The key point to understand about TPC-A is that it
    requires, for every transaction-per-second, ten times that many
    users to be connected. For example, to get 600 TPS, you need 6000
    users. The next question will answer in more detail how the the
    three-tier architecture addresses this requirement, but first let's
    look more generally at what TP Monitors can and can't do to improve
    performance.
    TP Monitors can provide better performance:
    (1) When there are more than several hundred users connected.
         This is because of the TP Monitor's role in the three-tier
         architecture, described in the next question. In this
         architecture, terminal handling is offloaded to one or more
         separate machines, freeing up those cycles to do database work.
         Note that this does NOT mean that Oracle itself runs faster,
         just that we've given it more CPU cycles to use.
    (2) When, because of the high potential concurrency of requests,
         significant resource contention exists. Use of a TP Monitor can
         limit the degree of concurrency and thus reduce contention.
    TP Monitors can not provide better performance:
    (1) For existing applications. The applications must be designed
         to fit the TP Monitor architecture.
    (2) For applications which are highly interactive in their use of
         the database. These applications put many messages
         through the transport system, and the TP Monitor is not as
         efficient as SQL*Net for point-to-point communication.
    (3) For CPU intensive single-query decision support. When executing
         a single large command, Oracle query facilities work efficiently,
         especially with the use of Oracle Parallel Query, available in 7.1.
    How does the three-tier solution help TPC-A, or other situations with
    thousands of on-line users?
    The TPC-A test calls for a large number of users to produce a given
    result. In the high-end results we produced in June, 1992, for example,
    6150 terminals were simulated to produce 618 TPC-A transactions.
    Thus, terminal concentration accounts for a large portion of the total
    processing time used.
    First, let's look at how the Multi Threaded Server would work for
    this benchmark. In this case, there are many client processes,
    but only a few server processes, which handle client requests on a
    first-come first serve basis. When they are done with a request,
    they take another client's request.
    ORACLE7 CLIENT/SERVER ARCHITECTURE WITH MULTI THREADED SERVER
    | Client | | Server |
    | __________ |______________|_____ _____________ _____________ |
    | | Client | | SQL*Net | |_|Dispatcher | | | |
    | | Process| | | ____| Process |___| | |
    | |________| | | | __|___________| | | |
    |____________| | | | | | | | |
    | | | | | | Oracle7 | |
    ______________ | | | __|__|____ | Server | |
    | Client | | | | __|_|_____ | | | |
    | __________ | | | | | Shared | |____| | |
    | | Client | | SQL*Net | | | | Server |_|____| | |
    | | Process|_|______________|__| | | Process|_| | | |
    | |________| | | | |________| |___________| |
    |____________| | | |
    | | |
    ______________ | | |
    | Client | | | |
    | __________ | | | |
    | | Client | | SQL*Net | | |
    | | Process|_|______________|____| |
    | |________| | | |
    |____________| | |
    |_______________________________________|
    Client processes = N Dispatcher processes >= 1
    Shared server processes >= 1
    If there are 500 clients in this environment, there will be one or more
    dispatcher processes, dynamically tunable, and one or more shared
    server processes, dynamically tunable, on the server. The reduction
    in the total number of processes handled by the server system
    results in more processing time available for RDBMS activity. Thus
    higher RDBMS transaction throughput can be obtained on the
    server system.
    But the problem for the TPC-A, and for certain large customer
    configurations, is not the only ability of the Oracle Server to
    process transactions, but also the ability of the operating
    system to handle huge numbers of incoming connections.
    There is one incoming connection for each client. Most UNIX
    operating systems have a limit on how many such connections they can
    handle. Even if a particular operating system allows a large number of
    connections, each takes some amount of overhead to manage.
    In order to service all 6150 terminals, we selected a 3-tier hardware
    environment where the middle tier, using a TPM, acted as a terminal
    concentrator. The high-end TPC-A architecture looked like the following.
    The Application Servers, which contain the Pro*C statements used to
    perform the transaction also run on the terminal concentrator machine
    in order to offload as much work from the database serve as possible.
    They send the compiled SQL over SQL*Net to the Oracle7 Server processes.
    ORACLE7 TPS-A CLIENT/SERVER ARCHITECTURE
    | Client | | Terminal | | Server |
    | ________ | | Concentrator | | |
    | | Client | |TPM | | | |
    | | Process|_|_____|__ _____ | | |
    | |________| |Comm | | | | | | |
    |____________| | | | | | | |
    | |__| | | | |
    ____________ | | TPM | | | |
    | Client | | ___| | _______ | | ________ _______ |
    | ________ | | | | |_| |__|_______|__| Oracle | | | |
    | | Client | |TPM | | | | |Appl. | |SQL*Net| | Server |__| | |
    | | Process|_|_____|_| |_____| |Server | | | | Process| | | |
    | |________| |Comm | |_______| | | |________| | | |
    |____________| | | | | | |
    |_______________________| | | | |
    | | | |
    ____________ _______________________ | |Oracle7| |
    | Client | | Terminal | | |Server | |
    | ________ | | Concentrator | | | | |
    | | Client | |TPM | | | | | |
    | | Process|_|_____|__ _____ | | __________ | | |
    | |________| |Comm | | | | _______ |SQL*Net| | Oracle | | | |
    |____________| | | | |_| |__|_______|__| Server |__| | |
    | |__| | |Appl. | | | | Process| | | |
    ____________ | | TPM | |Server | | | |________| |_______| |
    | Client | | ___| | |_______| | | |
    | ________ | | | | | | | |
    | | Client | |TPM | | | | | | |
    | | Process|_|_____|_| |_____| | | |
    | |________| |Comm | | | |
    |____________| | | | |
    |_______________________| |________________________|
    Clients = 6150 Terminal concentrators = 17
    TP Monitor instances = 17
    Application server processes Oracle Server processes
    = 17*8 = 17*8
    The TPM is the software component of the terminal concentrator. In this role
    it offloads terminal handling from the the machine running Oracle Server.
    Since more than one terminal concentrator can be configured, whereas the
    database in this case had to run on a single machine, concentrator machines
    can be added until the performance of the back-end machine was optimized.
    This three-tier solution resulted in the outstanding transaction throughput
    announced with Oracle7 Server. Even with Oracle Parallel Server, it may pay
    to offload the terminal handling so that the cluster can be exclusively used
    for database operations.
    Can you summarize the performance discussion for me?
    Depending on the number of users required, different architectures may be
    used in a client/server environment to maximize performance:
    1) For a small number of users, the traditional Oracle two-task
    architecture can be used. In this case, there is a one-to-one
    correspondence between client processes and server processes. It's
    simple, straightforward, and efficient.
    2) For a large number of users, Multi Threaded Server might be a better
    approach. Although some tuning may be required, Multi Threaded Server
    can handle a relatively large number of users for each machine size
    compared to the traditional Oracle approach. Using this approach,
    customers will be able to handle many hundreds of users on many
    platforms. Furthermore, current Oracle applications can move to this
    environment without change.
    3) For a very large number of users, where transactions are simple and
    terminal input concentration is the overriding performance issue, a
    3-tier architecture incorporating a TPM may be useful. In this case,
    terminal concentration is handled by the TPM in the middle tier. As
         you might expect, it is a more complex environment requiring more
         system management. For existing Oracle customers, significant Oracle
    application modifications will be required.
    Oracle provides all of these choices.
    Performance using Oracle's XA Library
    =====================================
    Are there any performance implications to using the XA library (in other
    words, to using TPM-managed transactions)?
    (1) The XA library imposes some performance penalty. You should use
    TPM-managed transactions only if you actually need them. Even if you
    are getting the one-phase commit optimization, the code path is
    longer because we need to map back and forth between external
    formats and internal ones. Also, prior to 7.1, XA requires you
    to release all cursors at the end of a transaction, which results
    in extra parsing. Even with shared cursors, there is time spent
    looking up the one you need and re-validating it. This has been
    improved for 7.1.
    (2) If you need to use two-phase commit, this will incur additional cost
    since extra I/Os are required. If you do need 2PC, you need to account
    for that when sizing the application.
    (3) Although some TPMs allow parallel execution of services (such as Tuxedo's
    "tpacall"), this will not normally enhance performance unless different
    resource managers are being used. In fact, Oracle Server must serialize
    accesses to the same transaction by the same Oracle instance, and the
    block/resume code will in fact degrade performance in that case compared
    to running the services sequentially.

    hello,
    the role is the same on all plattforms. the reports server takes requests for running reports, spawns an engine that executes the request. in addition to that, the server also provides scheduling services and security features for the reports environment.
    regards,
    the oracle reports team

  • OraOledb for 64-bit, Linked Servers and SQL Server 2005 issues

    Our environment is : SQL Server 2005, Windows Server 2003, 64-bit and 32-bit operating systems.
    Problem on 64-bit operating system box: (32-bit works fine).
    I am trying to access Oracle 10g database using linked server from our SQL Server 2005. In case of number fileds i got the following error:
    Invalid data for type "numeric".
    After going through one of the posting in this forumn i was able to resolve the problem by converting those column values to char while querying and then converting them back to numeric type on SQL server side.
    But today i ran into another problem. There is a VARCHAR2 column. I was able to retrieve the data yesterday for that column but today i am getting a blank recordset. If i exclude the colum from the query then i am getting all the rows.
    I am querying against a view and it has got a number of columns whose data type is VARCHAR2.
    Again the problem is on 64-bit operating system only. We have a 32-bit operating system on which i am able to retrieve the data including this column. I looked at the data and everything looks OK. No funny characters etc.
    I tried workarounds like using cast, to_char, checking for nulls etc., Nothing works.
    Any help is greately appreciated. Thanks.

    Did you find a resolution for this? We have similar problem. Set up a linked server in SQL 2006 to Oracle (running on Windows 64-bit) Linked server works and views I had set up were working but they added some new data in the Oracle test database I am using and now I get errors on one of the views.
    Error I am getting on the view is "Cannot initialize the data source object of OLE DB Provider "OraOLDEDB.ORacle" for the linked server"
    If I fine tune my queries to find the specific table or view that is at issue, then I get the error "inconsistent metadata for a column"

  • SQL 2008 Problem Calling an SP on an Oracle 10G Linked Server

    Hi everyone
    I've read through a number of posts on many sites about this issue but haven't found anything that has helped me so far. The machine I'm using is running Microsoft SQL Server 2008 64bit and the linked server I've created to Oracle 10G is using OraOLEDB.Oracle. If I test the connection in SQL Management Studio it succeeds and for any queries I have using OpenQuery to select from the Oracle DB I have no problem getting results.
    The Oracle 32bit client and 64bit client versions are installed on the machine.
    My problem is that I need to exec an Oracle SP which in turn inserts into various Oracle tables. I previously had this all working fine on 32bit SQL Server 2000 installation connected to Oracle 10G. Using the same code in SQL Server 2008 I get the following error:
    Msg 7357, Level 16, State 2, Line 1
    Cannot process the object "{CALL INTF.INTF_TW_PO_REQ_INTERFACE.MAIN(NULL, 15.000000, 0.000000, 'BLPO0099998', 'BLPO0099998', '', '', 39804, 21883, 'BLPO0099998', 249, 1, 950, 'Main', 190506, 37336, '1', TO_DATE( '20090706','YYYYMMDD' ), TO_DATE( '20090706','YYYYMMDD' ), 'INCOMPLETE',37336, {RESULTSET 1, P_Success})}". The OLE DB provider "OraOLEDB.Oracle" for linked server "ORACLE" indicates that either the object has no columns or the current user does not have permissions on that object
    The call is made by the following piece of code in SQL:
    SET @execCmd = N'SELECT
    P_Success
    FROM
    OPENQUERY( ORACLE, '''+ @oracleCmd + ''')';
    EXECUTE (@execCmd);
    Where @oracleCmd = {CALL INTF.INTF_TW_PO_REQ_INTERFACE.MAIN(NULL, 15.000000, 0.000000, ''BLPO0099998'', ''BLPO0099998'', '''', '''', 39804, 21883, ''BLPO0099998'', 249, 1, 950, ''Main'', 190506, 37336, ''1'', TO_DATE( ''20090706'',''YYYYMMDD'' ), TO_DATE( ''20090706'',''YYYYMMDD'' ), ''INCOMPLETE'',37336, {RESULTSET 1, P_Success})}
    I also tried using the below snippet from another post I found and got no joy either.
    declare @result varchar(255)
    exec ('BEGIN
    ?:= your_SP_Name(''arg1'', ''arg2'', etc);
    END;
    ',@result OUTPUT) at your_LinkedServerName;
    select @result;
    OLE DB provider "OraOLEDB.Oracle" for linked server "ORACLE" returned message "ORA-06550: line 3, column 7:
    PLS-00222: no function with name 'INTF_TW_PO_REQ_INTERFACE' exists in this scope
    ORA-06550: line 3, column 1:
    PL/SQL: Statement ignored".
    I can't figure out why it doesn't work in SQL 2008 when it worked fine in SQL 2000 - PLEASE HELP!
    Thank you
    Alida Hope

    Why development on 10g and production on 8i? Either both should be 8i or both should be 10g.
    If you will keep production on 8i and development on 10g then you cannot stop such errors as there are features that are enabled by default in 10g and both the versions have very big differences.
    Just go ahead and install 8i.

  • Trigger problem on Sql Server with linked server to Oracle

    Hi All,
    I have a simple insert trigger on Sql Server 2005, it uses linked server to Oracle.
    like that ;
    USE [YTM08]
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ANSI_NULLS ON
    go
    ANSI_WARNINGS ON
    CEATE TRIGGER [dbo].[YTM_TBLSTSABIT_I]
    ON [dbo].[TBLSTSABIT] FOR INSERT
    AS
    BEGIN
    INSERT INTO YTM_ORACLE..SECTOR.STOCKS
    stock_name,
    stock_code,
    insert_date
    SELECT
    SBT.STOCKNAME,
    SBT.STOCKCODE,
    GETDATE()
    FROM INSERTED SBT
    END
    The YTM_ORACLE is a linked server and it's provider is OraOLEDB.Oracle.
    Trigger does not works for that linked server but other triggers for local
    sql server works fine...
    I get this error from sql server
    'Heterogeneous queries require the ANSI_NULLS and
    ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.'
    Does someone know how to solve this issue the right way?
    Thanks in advance.
    Thanks !
    Adam

    Hi Lars,
      Thanks for the data. I've already read this note and configure all this parameters. But when I'm executing the Create Source System in the BI system the process dies.
      If I look into the logs I see this:
    M  call semaphore clean-up function ...
    M  ***LOG Q0E=> DpSigGenHandler, Exception (c06d007e) [dpnttool.c   432]
      That's the reason why I start guessing about other possible problem.
    Regards

  • LINKED SERVER ISSUE on ORACLE DATABASE

    Hi everyone
    I have SQL 2008 R2 Running on Windows server 2003 R2 OS.
    I have created a linked server to ORACLE 11
    I have may jobs running process against this linked server and thy work fine
    But soddenly I receive this error :
    Cannot initialize the data source object of OLE DB provider "OraOLEDB.Oracle" for linked server "WMS". [SQLSTATE 42000] (Error 7303).  The step failed
    In this scenario the SQL SERVER AGENT Account is the Domain administrator.
    When I restart the Server it begin to work fine again but from time to time I receive again the error mentioned above.
    Have any one pass through this issue?

    Is the network connection to Oracle box stable? Is it inside a firewall?
    Please Mark This As Answer if it solved your issue
    Please Vote This As Helpful if it helps to solve your issue
    Visakh
    My Wiki User Page
    My MSDN Page
    My Personal Blog
    My Facebook Page

  • SQL Server 2K "Linked Server" to Oracle 9i Release 2 via "Oracle Provider

    Hi,
    I'm trying to set up a SQL Server 2000 "Linked Server" to Oracle 9i Release 2 via "Oracle Provider for OLE DB". I have downloaded and installed "Oracle Provider for OLE DB Release 9.2.0.2.0"
    My SQL*Net alias/datasource in tnsnames.ora works (It passes the test in "Net 9i Configuration Assistant", I can connect from SQL*Plus, and I can get a Linked server going with the "Microsoft OLE DB Provider for Oracle").
    When I set up my Linked Server with Oracle Provider for OLE DB, I need to supply the following three fields (with description from the read-only field at the bottom of the "Linked Server Properties)
    Product name: (The product name is the OLE DB data source to add as a linked server.)
    Data source: (The data source is usually the name of the server or filename.)
    Provider string: (This is the entire provider string.)
    Here is my tnsnames.ora entry that works as described above (names may have been changed to protect the innocent)...
    PROD9I.XYZ.LOCAL =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = nn.nn.nn.nn)(PORT = 1521))
    (CONNECT_DATA =
    (SERVICE_NAME = PROD.ora2.xyz.mno.com)
    With every combination of values I have tried for these fields, when I try to use the Linked Server I get this error message...
    Could not create an instance of OLE DB provider 'OraOLEDB.Oracle'.
    OLE DB error trace [Non-interface error:  CoCreate of DSO for OraOLEDB.Oracle returned 0x80040154].
    Any help would be greatly appreciated
    Thank you,
    Daniel Jameson

    Thanks Norman.
    Well, I've made it a step closer. I uninstalled everything Oracle from my machine and reinstalled the 9i stuff, including the Oracle OLE DB Provider. Now, after I set up the linked server, and I try to view the Tables or Views under the Linked Servers, I get this error message...
    Error 7399: OLE DB provider 'OraOLEDB.Oracle' reported an error.
    OLE DB error trace [OLE/DB Provider 'OraOLEDB.Oracle' IDBINitialize::Initialize returned 0x80004005:   ].
    Does anyone have any idea what this is about? My other Linked Server using the same Oracle SQL*Net alias, but using the Microsoft OLE DB Provider, works fine.

Maybe you are looking for