Dies ist ein Beispiel-Java-Code, der die DBLINK-Quell- und Zieldaten in Oracle Database mithilfe von DBLINK abruft und anzeigt. Als ich gefragt wurde "Gibt es eine Quelle (Informationsquelle)?" In einer bestimmten Frage in einem bestimmten Chat wurde es "Gununu". Also schrieb ich es. 彡 (゜) (゜)
Ich habe versucht, mit der folgenden Konfiguration zu überprüfen.
Java → (JDBC) → User_A → (DBLINK) → User_B
Die Umgebung verwendet die folgende Umgebung von Virtualbox. Es ist einfach einzurichten, da es von Anfang an enthalten ist. 彡 (゜) (゜)
Erstellen Sie mühelos eine Oracle DB 19c-Umgebung mit einem OTN VirtualBox-Image https://qiita.com/ora_gonsuke777/items/b41f37637e59319796b4
Erstellen Sie zunächst User_A und fügen Sie die Daten ein.
export ORACLE_HOME=/u01/app/oracle/product/version/db_1
export PATH=${PATH}:${ORACLE_HOME}/bin
sqlplus /nolog
CONNECT SYS/oracle@ORCL AS SYSDBA
CREATE USER USER_A IDENTIFIED BY USER_A
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;
GRANT CREATE SESSION TO USER_A;
GRANT CREATE TABLE TO USER_A;
ALTER USER USER_A QUOTA UNLIMITED ON USERS;
CONNECT USER_A/xxxxxxxx@orcl;
CREATE TABLE TBL_A(
COL1 NUMBER
);
INSERT INTO TBL_A VALUES(100);
COMMIT;
Connected.
User created.
Grant succeeded.
Grant succeeded.
User altered.
Connected.
Table created.
1 row created.
Commit complete.
Erstellen Sie dann User_B und fügen Sie die Daten ein. Was zu tun ist, ist mit User_A 彡 (゚) (゚)
export ORACLE_HOME=/u01/app/oracle/product/version/db_1
export PATH=${PATH}:${ORACLE_HOME}/bin
sqlplus /nolog
CONNECT SYS/oracle@ORCL AS SYSDBA
CREATE USER USER_B IDENTIFIED BY USER_B
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;
GRANT CREATE SESSION TO USER_B;
GRANT CREATE TABLE TO USER_B;
ALTER USER USER_B QUOTA UNLIMITED ON USERS;
CONNECT USER_B/xxxxxxxx@orcl;
CREATE TABLE TBL_B(
COL1 NUMBER
);
INSERT INTO TBL_B VALUES(200);
COMMIT;
Connected.
User created.
Grant succeeded.
Grant succeeded.
User altered.
Connected.
Table created.
1 row created.
Commit complete.
Erstellen Sie DBLINK in User_A und überprüfen Sie den Vorgang. Sie sehen, dass das für User_B erstellte TBL_B nur über DBLINK referenziert werden kann.
export ORACLE_HOME=/u01/app/oracle/product/version/db_1
export PATH=${PATH}:${ORACLE_HOME}/bin
sqlplus /nolog
CONNECT SYS/oracle@ORCL AS SYSDBA
GRANT CREATE DATABASE LINK TO USER_A;
CONNECT USER_A/xxxxxxxx@orcl;
CREATE DATABASE LINK DBL_USER_B
CONNECT TO USER_B IDENTIFIED BY xxxxxxxx
USING 'ORCL';
SELECT * FROM TBL_A;
SELECT * FROM TBL_B;
SELECT * FROM USER_B.TBL_B;
SELECT * FROM TBL_B@DBL_USER_B;
Connected.
Grant succeeded.
Connected.
Database link created.
COL1
----------
100
*
ERROR at line 1:
ORA-00942: table or view does not exist
*
ERROR at line 1:
ORA-00942: table or view does not exist
COL1
----------
200
Dies ist ein Beispiel, das eine Verbindung mit User_A und SELECTs herstellt und TBL_A und TBL_B (über DBLINK) anzeigt.
import java.sql.*;
public class GetDblinkData {
public static void main(String[] args) {
final String path = "jdbc:oracle:thin:@localhost:1521/orcl";
final String id = "USER_A"; //ID
final String pw = "xxxxxxxx"; //password
try (
Connection conn = DriverManager.getConnection(path, id, pw);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT COL1 FROM TBL_A");
Statement stmt2 = conn.createStatement();
ResultSet rs2 = stmt2.executeQuery("SELECT COL1 FROM TBL_B@DBL_USER_B");
) {
while (rs.next()) {
int i = rs.getInt("COL1");
System.out.println("TBL_A COL1 => " + i);
}
while (rs2.next()) {
int j = rs2.getInt("COL1");
System.out.println("TBL_B COL1 => " + j);
}
} catch(SQLException ex) {
ex.printStackTrace(); //Error
}
}
}
Nun, endlich kompilieren und ausführen. Wenn Sie den folgenden Befehl ausführen ... 彡 (゚) (゚)
javac GetDblinkData.java
java -classpath /u01/app/oracle/product/version/db_1/jdbc/lib/ojdbc8.jar:. GetDblinkData
TBL_A COL1 => 100
TBL_B COL1 => 200
Die DBLINK-Originaldaten (TBL_A) und DBLINK-Zieldaten (TBL_B) konnten erfasst und angezeigt werden! 彡 (^) (^)
Ich konnte bestätigen, dass die Daten der DBLINK-Quelle und des DBLINK-Ziels mit einer einzigen DB-Verbindung erfasst werden können. DBLINK ist jedoch ein zweischneidiges Schwert. Es ist ein eng gekoppelter Mechanismus, also missbrauchen Sie ihn nicht. 彡 (゜) (゜)
Recommended Posts