Topik ini menjelaskan cara menggunakan ekstensi oracle_fdw untuk terhubung ke database Oracle. Anda juga dapat menggunakan ekstensi ini untuk menyinkronkan data antara tabel dalam database PostgreSQL dan tabel dalam database Oracle.
Prasyarat
Instansi ApsaraDB RDS for PostgreSQL Anda harus menjalankan PostgreSQL 12 dengan versi mesin minor 20200421 atau yang lebih baru.
CatatanAnda dapat mengeksekusi pernyataan
SHOW rds_supported_extensions;untuk memeriksa apakah versi mesin minor saat ini dari instansi RDS Anda mendukung ekstensi oracle_fdw. Jika versi mesin minor saat ini tidak mendukung ekstensi oracle_fdw, Anda harus terlebih dahulu memperbarui versi mesin minor.Versi klien Oracle harus 11.2 atau yang lebih baru.
Versi server Oracle didasarkan pada versi klien Oracle. Untuk informasi lebih lanjut, lihat dokumentasi Oracle.
Anda harus menambahkan blok CIDR dari virtual private cloud (VPC) tempat instansi RDS Anda berada ke Daftar putih alamat IP dari database Oracle yang ingin Anda hubungkan. Contoh blok CIDR:
172.xx.xx.xx/16.CatatanAnda dapat melihat blok CIDR dari VPC tempat instansi RDS berada di halaman Database Connection pada konsol ApsaraDB RDS.

Informasi latar belakang
Ekstensi oracle_fdw dikembangkan oleh PostgreSQL untuk mengelola tabel asing. Ekstensi ini memberikan akses mudah ke database Oracle dan memungkinkan Anda menyinkronkan data antara database PostgreSQL dan database Oracle.
Untuk informasi lebih lanjut, lihat oracle_fdw.
Catatan penggunaan
Jika Anda ingin mengeksekusi pernyataan UPDATE atau DELETE, Anda harus mengatur parameter key menjadi true untuk kolom kunci utama saat membuat tabel asing. Untuk informasi lebih lanjut, lihat bagian Buat Tabel Asing dari topik ini.
Tipe data kolom dalam tabel asing harus dapat diidentifikasi dan dikonversi untuk ekstensi oracle_fdw. Untuk informasi lebih lanjut tentang aturan konversi yang didukung oleh ekstensi oracle_fdw, lihat Tipe Data.
Ekstensi oracle_fdw dapat mendorong klausa WHERE dan ORDER BY ke database Oracle.
Ekstensi oracle_fdw dapat mendorong operasi JOIN ke database Oracle. Pushdown memiliki batasan berikut:
Kedua tabel untuk operasi JOIN harus didefinisikan dalam pemetaan database yang sama.
Operasi JOIN pada tiga tabel atau lebih tidak dapat didorong.
Operasi JOIN harus disertakan dalam pernyataan SELECT.
Operasi CROSS JOIN tanpa kondisi JOIN tidak dapat didorong.
Jika operasi JOIN didorong, klausa ORDER BY tidak akan didorong.
Setelah PostGIS diinstal, ekstensi oracle_fdw mendukung lebih banyak tipe data spasial berikut:
Titik
Garis
Polygon
MultiPoint
MultiLine
MultiPolygon
Buat dan hapus ekstensi oracle_fdw
Sebelum membuat ekstensi oracle_fdw, pastikan bahwa versi mesin utama dan versi mesin minor dari instansi RDS for PostgreSQL Anda memenuhi persyaratan yang dijelaskan dalam Prasyarat.
Buat Ekstensi
CREATE EXTENSION oracle_fdw;Hapus Ekstensi
DROP EXTENSION oracle_fdw;Gunakan ekstensi oracle_fdw
Eksekusi salah satu pernyataan berikut untuk membuat pemetaan database Oracle:
CREATE SERVER <Nama Server> FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//<Titik akhir internal yang digunakan untuk terhubung ke database Oracle>:<Port internal yang digunakan untuk terhubung ke database Oracle>/<Nama database Oracle yang ingin Anda hubungkan>');CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (host '<Titik akhir internal yang digunakan untuk terhubung ke database Oracle>', port '<Port internal yang digunakan untuk terhubung ke database Oracle>', dbname '<Nama database Oracle yang ingin Anda hubungkan>');
Eksekusi pernyataan berikut untuk membuat pemetaan pengguna:
CREATE USER MAPPING FOR <Nama pengguna yang digunakan untuk masuk ke database PostgreSQL> SERVER <Nama pemetaan pengguna> OPTIONS (user '<Nama pengguna yang digunakan untuk masuk ke database Oracle>', password '<Kata sandi yang digunakan untuk masuk ke database Oracle>');CatatanJika Anda tidak menyimpan kredensial pengguna Oracle di database PostgreSQL, atur parameter user ke string kosong dan berikan kredensial otorisasi eksternal.
Contoh:
CREATE USER MAPPING FOR pguser SERVER oradb OPTIONS (user 'orauser', password 'orapwd');Eksekusi pernyataan berikut untuk membuat tabel asing:
CREATE FOREIGN TABLE oratab ( id integer OPTIONS (key 'true') NOT NULL, text character varying(30), floating double precision NOT NULL ) SERVER oradb OPTIONS (table 'ORATAB', schema 'ORAUSER', max_long '32767', readonly 'false', sample_percent '100', prefetch '200');CatatanSkema tabel asing harus konsisten dengan skema tabel Oracle yang dipetakan.
Tabel berikut menjelaskan parameter dalam OPTIONS.
Parameter
Deskripsi
key
Menentukan apakah akan menetapkan kolom sebagai kolom kunci utama. Nilai valid: true dan false. Nilai default: false. Jika Anda ingin mengeksekusi pernyataan UPDATE dan DELETE, Anda harus mengatur nilai menjadi true untuk semua kolom kunci utama.
table
Wajib. Nama tabel Oracle. Nilainya harus dalam huruf besar. Anda juga dapat menggunakan pernyataan SQL Oracle untuk menentukan nilai parameter table. Contoh:
OPTIONS (table '(SELECT col FROM tab WHERE val = ''string'')'). Dalam hal ini, jangan gunakan parameter schema.schema
Nama pengguna Oracle untuk mengakses tabel yang tidak dimiliki oleh pengguna yang terhubung saat ini. Nilainya harus dalam huruf besar.
max_long
Panjang maksimum kolom yang memiliki tipe data LONG, LONG RAW, atau XMLTYPE dalam tabel Oracle. Nilai valid: 1 hingga 1073741823. Nilai default: 32767.
readonly
Menentukan apakah tabel Oracle bersifat hanya-baca. Jika nilainya true, Anda tidak dapat mengeksekusi pernyataan INSERT, UPDATE, atau DELETE.
sample_percent
Persentase blok tabel Oracle yang dipilih secara acak untuk menghitung statistik tabel PostgreSQL. Nilai valid: 0.000001 hingga 100. Nilai default: 100.
prefetch
Jumlah baris yang diambil untuk satu transmisi bolak-balik antara PostgreSQL dan Oracle selama pemindaian tabel asing. Nilai valid: 0 hingga 1024. Nilai default: 200. Nilai 0 menunjukkan bahwa fitur prefetch dinonaktifkan.
Setelah Anda membuat tabel asing, Anda dapat menggunakannya untuk melakukan operasi pada tabel Oracle. Pernyataan SQL dasar seperti DELETE, INSERT, UPDATE, dan SELECT didukung. Definisi tabel asing dapat diimpor. Contoh pernyataan:
IMPORT FOREIGN SCHEMA <ora_schema_name>
FROM SERVER <server_name>
INTO <schema_name>
OPTIONS (case 'lower');Anda dapat mengatur parameter case ke salah satu nilai valid berikut:
keep: menggunakan nama objek yang sama seperti di Oracle. Dalam banyak kasus, nama tersebut dalam huruf besar.
lower: mengonversi semua nama objek menjadi huruf kecil.
smart: mengonversi hanya nama objek yang sepenuhnya dalam huruf besar menjadi huruf kecil.