(8.0.22)
MySQLは異種DBへのDBリンクをサポートしていない
(19c)
■ Oracle(19c) mmm065(CentOS7) --> PostgreSQL(14) mmm070(CentOS8)
https://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=Oracle%A4%AB%A4%E9Postgresql%A4%D8ODBC%C0%DC%C2%B3%A4%B9%A4%EB
https://dbaspot.wordpress.com/2013/05/29/how-to-access-postgresql-from-oracle-database/
https://community.oracle.com/tech/developers/discussion/4269392/unable-to-connect-from-oracle-19c-to-postgresql-10-3
前提:PostgreSQLにリモート接続可能
以下すべて、mmm065で実行する
-- 1. PostgreSQLのODBCドライバをインストール
yum install -y postgresql-odbc
-- 2. ODBCの設定
[PG_LINK]
Description = PG_LINK
Driver = /usr/lib64/psqlodbc.so
Servername = mmm070
Username = postgres
Password = postgres
Port = 5432
Database = test
TRACE =Yes
TraceFile = /tmp/sql.log
Debug = 1
CommLog = 1
[Default]
Driver = /usr/lib64/liboplodbcS.so.2
-- 3. initSID.oraの編集
su - oracle
vim $ORACLE_HOME/hs/admin/initPG_LINK.ora
HS_FDS_CONNECT_INFO = PG_LINK
HS_FDS_TRACE_LEVEL = on
HS_FDS_SHAREABLE_NAME = /usr/lib64/psqlodbc.so
HS_NLS_NCHAR = UCS2
HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1
set ODBCINI=/etc/odbc.ini
-- 4. 静的Listenerの追加
vim $ORACLE_HOME/network/admin/listener.ora
LISTENER2=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm65.example.com)(PORT=1522) )
) )
SID_LIST_LISTENER2=
(SID_LIST =
(SID_DESC=
(ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1)
(ENV="LD_LIBRARY_PATH=/u01/app/oracle/product/19.0.0/dbhome_1/lib:/usr/lib64")
(SID_NAME=PG_LINK)
(PROGRAM=dg4odbc)
)
)
lsnrctl stop LISTENER2
lsnrctl start LISTENER2
lsnrctl status LISTENER2
-- 5. tnsnames.oraの編集
vim $ORACLE_HOME/network/admin/tnsnames.ora
PG_LINK =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm65.example.com)(PORT=1522) )
(CONNECT_DATA=
(SERVER = DEDICATED)
(SID=PG_LINK)
)
(HS=OK)
)
-- 6. データベースリンクの作成
drop public database link PG_LINK;
create public database link PG_LINK connect to "postgres" identified by "postgres" using 'PG_LINK';
-- 7. 動作確認
select * from "tab1"@PG_LINK;
※日本語は文字化けする。回避方法不明
※エラーが出る場合はログを確認する
ログの場所 = /u01/app/oracle/product/19.0.0/dbhome_1/hs/log
行1でエラーが発生しました。:
ORA-28500: OracleからOracle以外のシステムへの接続で次のメッセージが戻されました: ORA-02063:
先行のエラー・メッセージを参照してくださいline(PG_LINK)。
→このエラーはHS_LANGUAGEを設定で解消する
■ Oracle(19c) mmm065(CentOS7) --> MySQL(8.0.22) mmm066(CentOS7)
https://qiita.com/mossi/items/d2a8c8c113738bee9f2d
前提:MySQLにリモート接続可能
以下すべて、mmm065で実行する
-- 1. unixODBC (ODBC Driver Manager)のインストール
yum install -y unixODBC
odbcinst -j
-- 2. mysql-connector-odbc (MySQL用ODBCドライバ) のインストール
yum install -y https://dev.mysql.com/get/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.26-1.el7.x86_64.rpm
cat /etc/odbcinst.ini
-- 3. ODBCの設定
[MYDB]
Driver = MySQL ODBC 8.0 Unicode Driver
SERVER = mmm066
PORT = 3306
DATABASE = test
USER = root
PASSWORD = password
CHARSET = utf8
isql MYDB -v
select user();
-- 4. ODBCドライバマネージャーライブラリのパスを確認
ldd `which isql`
-- 5. initSID.oraの編集
su - oracle
vim $ORACLE_HOME/hs/admin/initMYDB.ora
HS_FDS_CONNECT_INFO = MYDB
HS_NLS_NCHAR = UCS2
HS_LANGUAGE = JAPANESE_JAPAN.AL32UTF8
HS_FDS_SHAREABLE_NAME = /lib64/libodbc.so.2
set ODBCINI=/etc/odbc.ini
-- 6. 静的Listenerの追加
vim $ORACLE_HOME/network/admin/listener.ora
LISTENER2=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm65.example.com)(PORT=1523) )
) )
SID_LIST_LISTENER2=
(SID_LIST =
(SID_DESC=
(ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME=MYDB)
(PROGRAM=dg4odbc)
)
)
lsnrctl stop LISTENER2
lsnrctl start LISTENER2
lsnrctl status LISTENER2
-- 7. tnsnames.oraの編集
vim $ORACLE_HOME/network/admin/tnsnames.ora
MYDB =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm65.example.com)(PORT=1523) )
(CONNECT_DATA=
(SERVER = DEDICATED)
(SID=MYDB)
)
(HS=OK)
)
-- 8. データベースリンクの作成
drop public database link MYDB;
create public database link MYDB connect to "root" identified by "password" using 'MYDB';
-- 9. 動作確認
select * from "tab1"@MYDB;
■Oracle(19c) mmm065(CentOS7) --> SQL Server(2019) mmm061(Windows Server 2019)
https://ameblo.jp/norinori-monta/entry-12189037036.html
https://tech-oracle.blog.ss-blog.jp/2021-10-10
前提:SQL Serverにリモート接続可能
以下すべて、mmm065で実行する
-- 1. Oracle Gateway(SQL Server)のインストール
unzip LINUX.X64_193000_gateways.zip
cd gateways
LANG=C ./runInstaller
Software location: /u01/app/oracle/product/19.0.0/dbhome_1
Oracle Database Gateway for Microsoft SQL Serverにチェック
Microsft SQL Server Database Server Host Name: mmm061
Microsft SQL Server Database Server Port Number: 1433
Microsft SQL Server Server Name: MSSQLSERVER
Microsft SQL Server Database Name: test
ls -ltr $ORACLE_HOME/dg4msql
cat $ORACLE_HOME/dg4msql/admin/initdg4msql.ora
-- 2. 静的Listenerの追加
vim $ORACLE_HOME/network/admin/listener.ora
LISTENER2=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm65.example.com)(PORT=1524) )
) )
SID_LIST_LISTENER2=
(SID_LIST =
(SID_DESC=
(ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME=dg4msql)
(PROGRAM=dg4msql)
)
)
lsnrctl stop LISTENER2
lsnrctl start LISTENER2
lsnrctl status LISTENER2
-- 3. tnsnames.oraの編集
vim $ORACLE_HOME/network/admin/tnsnames.ora
dg4msql =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm65.example.com)(PORT=1524) )
(CONNECT_DATA=
(SERVER = DEDICATED)
(SID=dg4msql)
)
(HS=OK)
)
tnsping dg4msql
-- 4. データベースリンクの作成
drop public database link dg4msql;
create public database link dg4msql connect to "sa" identified by "password" using 'dg4msql';
-- 5. 動作確認
select * from "tab1"@dg4msql;
(14)
■ PostgreSQL(14) mmm070(CentOS8) --> Oracle(19c) mmm065(CentOS7)
https://lets.postgresql.jp/documents/technical/fdw
https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/oracle-fdw-basic/
https://www.postgresql.org/about/news/oracle_fdw-240-released-2313/
前提:Oracleにリモート接続可能
以下すべて、mmm070で実行する
-- 1. OCIライブラリーのインストール
インスタントクライアントのサイトからrpm版をもってくる
dnf install -y oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64.rpm
dnf install -y oracle-instantclient19.12-devel-19.12.0.0.0-1.x86_64.rpm
dnf install -y oracle-instantclient19.12-sqlplus-19.12.0.0.0-1.x86_64.rpm
-- 2. 環境変数の設定
su - postgres
export LD_LIBRARY_PATH=/usr/lib/oracle/19.12/client64/lib
export NLS_LANG=JAPANESE_JAPAN.AL32UTF8
export PATH=$PATH:/usr/pgsql-14/bin
export ORACLE_HOME=/usr/lib/oracle/19.12/client64/lib
-- 3. oracle_fdwのエクステンション(EXTENTION)の作成
git clone https://github.com/laurenz/oracle_fdw.git
cd oracle_fdw
make
exit
export PATH=$PATH:/usr/pgsql-14/bin
cd ~postgres/oracle_fdw
make install
su - postgres
psql test
CREATE EXTENSION oracle_fdw;
\dew
-- 4. 外部サーバーの作成
CREATE SERVER ora_sv FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver 'mmm065:1521/pdb1.example.com');
\des+
GRANT USAGE ON FOREIGN SERVER ora_sv TO postgres;
-- 5. ユーザーマップの作成
CREATE USER MAPPING FOR postgres SERVER ora_sv OPTIONS ( USER 'test', PASSWORD 'test');
\deu+
-- 6. 外部テーブルの作成
CREATE FOREIGN TABLE f_tab1(
col1 int OPTIONS (key 'true'),
col2 varchar(10) )
SERVER ora_sv OPTIONS (SCHEMA 'TEST' , TABLE 'TAB1');
\det+
\d f_tab1
-- 7. 動作確認
select * from f_tab1;
■ PostgreSQL(14) mmm070(CentOS8) --> MySQL(8.0.22) mmm066(CentOS7)
https://qiita.com/msrx9/items/734d644b7b2aad796b09
前提:MySQLにリモート接続可能
以下すべて、mmm070で実行する
-- 1. mysql_fdwのエクステンション(EXTENTION)の作成
dnf install -y mysql-devel
su - postgres
export PATH=$PATH:/usr/pgsql-14/bin
git clone https://github.com/EnterpriseDB/mysql_fdw.git
cd mysql_fdw
make USE_PGXS=1
exit
export PATH=$PATH:/usr/pgsql-14/bin
cd ~postgres/mysql_fdw
make USE_PGXS=1 install
su - postgres
psql test
CREATE EXTENSION mysql_fdw;
\dew
-- 2. 外部サーバーの作成
CREATE SERVER mpi_mysql FOREIGN DATA WRAPPER mysql_fdw OPTIONS (
host 'mmm066',
port '3306'
);
\des+
GRANT USAGE ON FOREIGN SERVER mpi_mysql TO postgres;
-- 3. ユーザーマップの作成
CREATE USER MAPPING FOR postgres SERVER mpi_mysql OPTIONS (
username 'root',
password 'password'
);
\deu+
-- 4. 外部テーブルの作成
CREATE FOREIGN TABLE f_tab1 (
col1 int,
col2 varchar(10)
)
SERVER mpi_mysql
OPTIONS (
dbname 'test',
table_name 'tab1'
);
\det+
\d f_tab1
-- 5. 動作確認
select * from f_tab1;
■PostgreSQL(14) mmm070(CentOS8) --> SQL Server(2019) mmm061(Windows Server 2019)
https://toshtone.hatenablog.jp/entry/2018/05/29/001729
前提:SQL Serverにリモート接続可能
以下すべて、mmm070で実行する
-- 1. tds_fdwのエクステンション(EXTENTION)の作成
dnf install -y epel-release
dnf install -y freetds-devel
su - postgres
git clone https://github.com/tds-fdw/tds_fdw.git
cd tds_fdw
make USE_PGXS=1 PG_CONFIG=/usr/pgsql-14/bin/pg_config
sudo make USE_PGXS=1 PG_CONFIG=/usr/pgsql-14/bin/pg_config install
psql test
CREATE EXTENSION tds_fdw;
\dew
-- 2. 外部サーバーの作成
create server ms_sv foreign data wrapper tds_fdw options (
servername 'mmm061',
port '1433',
database 'test',
tds_version '4.2',
character_set 'UTF-8');
\des+
GRANT USAGE ON FOREIGN SERVER ms_sv TO postgres;
-- 3. ユーザーマップの作成
create user mapping for postgres server ms_sv options (username 'sa', password 'password');
\deu+
-- 4. 外部テーブルの作成
create foreign table f_tab1 (
col1 int,
col2 varchar(10)
)
server ms_sv options (table 'tab1');
\det+
\d f_tab1
-- 5. 動作確認
select * from f_tab1;
(2019)
■SQL Server(2019) mmm061(Windows Server 2019) --> Oracle(19c) mmm065(CentOS7)
https://qiita.com/shisho/items/31837ad38b8bc7f203b8
https://tech-oracle.blog.ss-blog.jp/2021-10-04
前提:Oracleにリモート接続可能
以下すべて、mmm061で実行する
-- 1. OSユーザ追加
net user
net user oracle password /add
-- 2. Oracle Clientのインストール
使用したインストーラ: WINDOWS.X64_193000_client.zip
インストールタイプ: 管理者
インストール先ユーザ: oracle
ORACLEBASE: C:\app\oracle
ORACLEHOME: C:\app\oracle\product\19.0.0\client_1
-- 3. tnsnames.oraの設定
cd C:\app\oracle\product\19.0.0\client_1\network\admin
notepad tnsnames.ora
pdb1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mmm065)(PORT = 1521) )
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1.example.com)
)
)
tnsping pdb1
-- 4. Oracle OLE DBのプロパティを変更
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1
GO
-- 5. Linked Serverの構成
USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'PDB1', @srvproduct=N'Oracle', @provider=N'OraOLEDB.Oracle', @datasrc=N'pdb1'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'PDB1', @locallogin = NULL , @useself = N'False', @rmtuser = N'test', @rmtpassword = N'test'
GO
-- 6. 動作確認
select * from リンクサーバー名..スキーマ名.テーブル名
select * from PDB1..TEST.TAB1;
■ SQL Server(2019) mmm061(Windows Server 2019) --> PostgreSQL(14) mmm070(CentOS8)
https://qiita.com/AkihiroTakamura/items/2da977e9362533611cfc
https://gist.github.com/alg0002/d2fc1b4ede87390478ff1f850b0a3ebd
前提:PostgreSQLにリモート接続可能
以下すべて、mmm061で実行する
-- 1. Postgres ODBC Driverのインストール
使用したインストーラ: psqlodbc_13_02_0000-x64.zip
-- 2. Linked Serverの構成
use master;
GO
EXEC MASTER.dbo.sp_addlinkedserver @server = N'pg14'
,@srvproduct = N'PostgreSQL'
,@provider = N'MSDASQL'
,@provstr = 'Driver={PostgreSQL UNICODE};Server=mmm070;Port=5432;Database=test;UID=postgres;Password=postgres;Network=dbmssocn;'
-- 3. 動作確認
select * from リンクサーバー名.データベース名.スキーマ名.テーブル名
select * from pg14.test.[public].tab1;
■ SQL Server(2019) mmm061(Windows Server 2019) --> MySQL(8.0.22) mmm066(CentOS7)
https://akarui-nippon.com/blog/sql-server%E3%81%8B%E3%82%89mysql%E3%82%92%E8%A6%97%E3%81%8F%EF%BD%9E%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E8%A8%AD%E5%AE%9A%EF%BD%9E
https://itfun.jp/2014/10/sql-servermysql.html
前提:MySQLにリモート接続可能
以下すべて、mmm061で実行する
-- 1. MySQL ODBC Driverのインストール
使用したインストーラ: mysql-connector-odbc-8.0.26-winx64.msi
※Visual Studio 2019 x64 Redistributableも必要
-- 2. Linked Serverの構成
USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'MYSQL8'
,@srvproduct=N'MySQL'
,@provider=N'MSDASQL'
,@provstr=N'DRIVER={MySQL ODBC 8.0 UNICODE Driver};SERVER=mmm066;PORT=3306;DATABASE=test;USER=root;PASSWORD=password;OPTION=3;'
-- 3. 動作確認
select * from openquery (MYSQL8, 'select * from tab1');
select * from リンクサーバー名.データベース名.スキーマ名.テーブル名
select * from MYSQL8.test..tab1;