openplanning

Hướng dẫn và ví dụ Oracle Database Link và Synonym

  1. Database Link là gì?
  2. Tạo Database Link
  3. Truy cập các đối tượng thông qua Database Link
  4. Oracle Synonym
  5. Database Link tới các cơ sở dữ liệu khác Oracle

1. Database Link là gì?

Database Link là một đối tượng trong SCHEMA của Oracle, nó giống như một cái cầu để nối với một cơ sở dữ liệu khác, giúp bạn truy cập vào các đối tượng của cơ sở dữ liệu kia.
Bạn cũng có thể tạo một Database Link để kết nối Oracle tới một loại cơ sở dữ liệu khác, chẳng hạn như MySQL, SQL Server, ... trong trường hợp này bạn cần sử dụng dịch vụ Oracle Heterogeneous (Oracle Heterogeneous Service)

2. Tạo Database Link

Ở đây tôi minh họa kết nối 2 hệ thống cơ sở dữ liệu Oracle nằm trên 2 máy tính khác nhau.
tnsname.ora
Trước hết bạn cần có hiểu về file tnsnames.ora của Oracle.

tnsname.ora là một file mô tả về một cơ sở dữ liệu Oracle, bạn có thể tìm thấy file này trong thư mục cài đặt của Oracle.
  • <ORACLE_HOME>\product\12.1.0\dbhome_1\NETWORK\ADMIN
Nội dung của file tnsname.ora giống hình minh họa dưới đây.
Dưới đây là hình ảnh mô tả hai hệ thống cơ sở dữ liệu Oracle nằm trên 2 máy tính khác nhau.
Tạo một Database Link có tên mydblink để kết nối từ PROD1 tới PROD2.
Create Database Link
-- Trên SCHEMA Prod1.
-- Tạo một Database Link có tên mydblink
-- Kết nối vào Schema Prod2 trên máy myserver2.

CREATE DATABASE LINK mydblink
CONNECT TO PROD2 IDENTIFIED BY "Prod2Password"
USING '(DESCRIPTION =
(ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = myserver2)(PORT = 1521))
)
(CONNECT_DATA =
  (SERVICE_NAME = db12c)
)
)';
Trên PROD1 bạn có thể test Database Link bằng lệnh:
Select * from Dual@mydblink;
Có một vài VIEW giúp bạn truy vấn ra danh sách các Database Link có trên cơ sở dữ liệu:
-- Tất cả các Database Link được định nghĩa trong cơ sở dữ liệu
Select * from DBA_DB_LINKS ;

-- Tất cả các Database Link người dùng hiện hành có quyền truy cập vào
Select * from ALL_DB_LINKS ;

-- Tất cả các Database Link thuộc sở hữu của người dùng hiện hành
Select * from USER_DB_LINKS ;
Ví dụ:
-- Format độ dài cột hiển thị (Cho dễ nhìn).

column OWNER format a10
column DB_LINK format a10
column USERNAME format a10
column HOST format a10
column CREATED format a10

-- Truy vấn View: ALL_DB_LINKS:

Select * from ALL_DB_LINKS;
Tạo Database Link (Tiếp theo)
Nếu các thông tin mô tả của Database2 đã được khai báo trong file tnsname.ora của Database1, bạn có thể tạo Database Link từ Database1 vào Database2 với cú pháp ngắn gọn hơn.
-- Tạo một Database Link từ Database1 vào Schema prod2 của Database2.

create database link mydblink connect to
   prod2 identified by prod2password using 'PROD2_DB';

3. Truy cập các đối tượng thông qua Database Link

Sau khi đã có Database Link, bạn có thể truy cập tới các đối tượng trong Database2 thông qua Database Link.
-- Truy vấn bảng trong Database2:

Select * from My_Table@mydblink;

Select * from My_View@mydblink;

-- Và Insert, Update, Delete,..

Insert into My_Table@mydblink .....;

Update My_Table@mydblink .. ;

4. Oracle Synonym

Synonym có thể tạm dịch là "Đối tượng đồng dạng" với một đối tượng nào đó. Nếu bạn không muốn viết thêm @dblinkName khi truy cập vào một đối tượng thông qua Database link, bạn có thể tạo một Synonym cho đối tượng đó.
Tạo Synonym:
-- Tạo Synonym:

create or replace Synonym  My_Table_Syn for My_Table@mydblink;
Chú ý: Bạn cũng có thể tạo các Synonym cho các hàm, các thủ tục.

5. Database Link tới các cơ sở dữ liệu khác Oracle

  • TODO: