I am connecting from Oracle to another database server (MS SQL Server, DB2 the error message is the same) through an ODBC connection using Oracle SQL Developer. (This is how I set up)
I want to query the schema of a non-Oracle database using the data dictionary mapping of the Oracle Database Gateway for ODBC.
This works well:
select * from all_tables@katimssql;
But this doesn't:
create table alltables_mssql as select * from all_tables@katimssql;
Error report: SQL Error: ORA-00604: error occurred at recursive SQL level 1 ORA-02047: cannot join the distributed transaction in progress ORA-06512: at "SYS.HS$_DDTF_SQLTABLES", line 58 ORA-06512: at line 1
Does anyone know the solution of this?
Thanks in advance,
Oracle Database 11g Express Edition Release 126.96.36.199.0
Microsoft SQL Server 2008 (SP2) - 10.0.4000.0 (X64)
ODBC Driver: SQL Server Native Client 11.0 (32 bit)
HS_FDS_CONNECT_INFO=katimssql HS_FDS_TRACE_LEVEL = ON HS_TRANSACTION_MODEL = READ_ONLY_AUTOCOMMIT
I tried these, none of them worked, the error message is the same.
HS_FDS_TRACE_LEVEL = off
HS_TRANSACTION_MODEL = SINGLE_SITE
HS_TRANSACTION_MODEL = READ_ONLY_AUTOCOMMIT
HS_TRANSACTION_MODEL = READ_ONLY
this won't work as the ALL_TABLES is not a table that exists in your SQl Server - instead it is a "mimicked" table. This means the gateway will check if you have on your SQL Server a table called all_tables and when there's no table it will start an internal mechanism to check out what sort of tables exist in your SQL Server database. So the gateway is starting internally another transaction to get details from the foreign database and DG4ODBC can't participate in distributed transactions at all. Instead of using all_tables you have to use a real SQL Server table like SQ Server sys.objects or sys.tables.