我创建了一个连接到RDS for PostgreSQL的数据库链接,并尝试查看数据

首先

在自主数据库中,可以创建与Oracle之外的数据库,如Amazon Redshift、MySQL、PostgreSQL、Snowflake等之间的数据库链接。

 

目前,以下是前提条件:
– 目标数据库能够从公共互联网访问。
– 目标数据库已设置允许SSL/TLS连接。

因此,這次我們在Autonomous Database中創建了一個連接到RDS for PostgreSQL的數據庫鏈接,並嘗試從Autonomous Database中查看RDS for PostgreSQL內的數據。

1. PostgreSQL的RDS配置

我們將事先設定虛擬私有雲 (VPC) 的網路,以便自動化的資料庫能夠從自己的出站IP連接到RDS for PostgreSQL。

使用psql命令连接到RDS for PostgreSQL。

[opc@tools ~]$ psql -U postgres -h testpg.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
Password for user postgres: 
psql (14.2, server 14.6)
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.

postgres=> 

创建用于验证的数据库testdb。

postgres=> CREATE DATABASE testdb;
CREATE DATABASE
postgres=> 

我将连接到创建的数据库testdb。

postgres=> \c testdb
psql (14.2, server 14.6)
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
You are now connected to database "testdb" as user "postgres".
testdb=> 

创建一个名为dept的表格,用于进行验证。

testdb=> CREATE TABLE dept (
testdb(> deptno INT,
testdb(> dname VARCHAR(14),
testdb(> loc VARCHAR(13),
testdb(> PRIMARY KEY (deptno)
testdb(> );
CREATE TABLE
testdb=> 

向表dept中添加数据。

testdb=> INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK');
INSERT 0 1
testdb=> INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
INSERT 0 1
testdb=> 

查看dept表的内容。

testdb=> SELECT * FROM dept;
 deptno |   dname    |   loc    
--------+------------+----------
     10 | ACCOUNTING | NEW YORK
     20 | RESEARCH   | DALLAS
(2 rows)

testdb-> 

退出psql。

testdb-> \q
[opc@tools ~]$ 

2. 连接到自主数据库

使用 SQL*Plus 连接到自主数据库。

[opc@tools ~]$ sqlplus admin/Demo#1Demo#1@testatp1_medium

SQL*Plus: Release 19.0.0.0.0 - Production on 火 5月 23 12:29:53 2023
Version 19.16.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

最終正常ログイン時間: 月 5月  22 2023 10:45:45 +09:00


Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.1.0
に接続されました。
SQL> 

创建用于从Autonomous Database连接到RDS for PostgreSQL的凭据。

使用DBMS_CLOUD.CREATE_CREDENTIAL存储过程,创建一个名为RDS_PG_CRED的凭证,用于从Autonomous Database连接到RDS for PostgreSQL。
在username参数中指定PostgreSQL的用户名,在password参数中指定该用户的密码。

SQL> BEGIN
  2      DBMS_CLOUD.CREATE_CREDENTIAL(
  3          credential_name => 'RDS_PG_CRED',
  4          username => 'postgres', 
  5          password => 'Demo#1Demo#1'
  6      );
  7  END;
  8  /

PL/SQL procedure successfully completed.

SQL> 

已成功创建了 RDS_PG_CRED 凭证。

创建一个连接从Autonomous Database到RDS for PostgreSQL的数据库链接。

使用DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK过程,在Autonomous Database和RDS for PostgreSQL之间创建数据库链接。指定DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK的每个参数如下所示。

項目値db_link_name作成するデータベース・リンクの名前hostnameRDSマネジメントコンソールに表示されるRDS for PostgreSQLのエンドポイントportRDSマネジメントコンソールに表示されるRDS for PostgreSQLのポートservice_name接続するデータベース名credential_name3.で作成したRDS for PostgreSQLに接続するためのクレデンシャルの名前gateway_params接続先DBに応じてdb_typeを設定、PostgreSQLの場合は’POSTGRES’。詳細はこちらを参照directory_nameNULLssl_server_cert_dnNULL
SQL> BEGIN
  2      DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
  3          db_link_name => 'RDS_PG_LINK', 
  4          hostname => 'testpg.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com', 
  5          port => '5432',
  6          service_name => 'testdb',
  7          credential_name => 'RDS_PG_CRED',
  8          gateway_params => JSON_OBJECT('db_type' value 'POSTGRES'),
  9          ssl_server_cert_dn => NULL
 10      );
 11  END;
 12  /

PL/SQL procedure successfully completed.

SQL> 

5. 通过数据库链接,从Autonomous Database中引用RDS for PostgreSQL内的数据。

由于可以在自主数据库(Autonomous Database)和RDS for PostgreSQL之间创建数据库连接,因此我可以尝试通过自主数据库中的数据库链接来查看RDS for PostgreSQL中的数据。

在指定引用表时,需要以小写字母括在双引号中,例如”dept”。
在指定引用表时,如果要指定模式,同样需要以”模式名”.”表名”的形式进行写作。

SQL> SELECT * FROM "dept"@RDS_PG_LINK;

    deptno dname	      loc
---------- -------------- -------------
	    10 ACCOUNTING	  NEW YORK
	    20 RESEARCH	      DALLAS

SQL> 

我們成功地通過Autonomous Database通過數據庫鏈接讀取了RDS for PostgreSQL中的數據。

请看

使用Oracle-Managed异构连接创建到非Oracle数据库的数据库链接
创建凭据过程
创建数据库链接过程
从您的自治数据库访问Amazon Redshift、Snowflake和其他非Oracle数据库

广告
将在 10 秒后关闭
bannerAds