Bỏ qua, đến nội dung

Câu hỏi thường gặp — Oracle Database Data Source

Cài đặt và kết nối

Không thể kết nối đến Oracle, báo lỗi timeout?

Cách xử lý theo thứ tự:

  1. Kiểm tra Oracle Listener đang chạy: lsnrctl status trên Oracle server
  2. Xác nhận port 1521 mở trên firewall
  3. Kiểm tra service name đúng: lsnrctl services
  4. Thử kết nối thủ công: sqlplus user/pass@host:1521/servername
  5. Nếu dùng Thick mode, đảm bảo Oracle Instant Client đã cài đúng

Thin mode hay Thick mode?

Tiêu chíThin modeThick mode
Oracle version>= 12.1Mọi phiên bản (11g+)
Yêu cầuKhông cần client libraryCần Oracle Instant Client
Hiệu năngTốtTốt (có thể nhanh hơn cho số lượng lớn)
Cài đặtĐơn giảnCần tải và cấu hình client
Khuyến nghịDùng nếu Oracle >= 12.1Chỉ dùng khi Oracle < 12.1

Làm sao cài Oracle Instant Client?

Cách 1: Dùng command plugin cung cấp:

bash
yarn digiforce-nc install-oracle-client

Cách 2: Cài thủ công:

  1. Tải từ Oracle Instant Client Downloads
  2. Chọn phiên bản 19.x (Basic hoặc Basic Light)
  3. Giải nén vào storage/libs/oracle-client/instantclient_19_25
  4. Plugin tự phát hiện nếu đặt đúng đường dẫn

Kết nối thành công nhưng không thấy bảng?

Nguyên nhân có thể:

  1. User Oracle không có quyền truy cập bảng
  2. Schema/owner sai — Oracle phân biệt bảng theo schema (owner)
  3. Bảng nằm trong schema khác (không phải schema user)

Cách xử lý:

  1. Kiểm tra quyền: SELECT * FROM session_privs;
  2. Liệt kê bảng user có quyền: SELECT OWNER, TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'HR';
  3. Plugin mặc định dùng username (viết hoa) làm schema. Nếu bảng ở schema khác, cần cấu hình

Tại sao schema luôn viết hoa?

Đây là hành vi mặc định của Oracle — tên schema, bảng, cột đều lưu dưới dạng UPPERCASE (trừ khi tạo với dấu ngoặc kép). Plugin tự động chuyển schema sang uppercase: options.schema.toUpperCase().

Sử dụng hằng ngày

Dữ liệu có đồng bộ real-time không?

Có. Plugin truy vấn trực tiếp Oracle mỗi lần request — không có cache.

Empty string và NULL trong Oracle

Oracle coi empty string ('') là NULL. Đây là khác biệt lớn so với MySQL/PostgreSQL. Plugin đăng ký operator $empty$notEmpty tùy chỉnh để xử lý đúng trên Oracle.

Định dạng ngày giờ hiển thị sai?

Plugin tự động set NLS format cho mỗi connection:

sql
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

Nếu vẫn sai, kiểm tra timezone của server Oracle và server Digiforce.

Có thể kết nối Oracle RAC không?

Có, thông qua service name. Oracle RAC sử dụng service name để phân phối kết nối giữa các node. Chỉ cần điền service name phù hợp và SCAN listener address vào Host.

Lỗi thường gặp

Lỗi "ORA-12514: TNS:listener does not currently know of service requested"

Nguyên nhân: Service name sai hoặc database instance chưa được đăng ký với listener.

Cách xử lý:

  1. Kiểm tra service name: lsnrctl services
  2. Đảm bảo Oracle instance đang chạy
  3. Nếu dùng SID thay vì service name, thử format: host:port:SID (nhưng khuyến nghị dùng service name)

Lỗi "ORA-01017: invalid username/password"

Cách xử lý:

  1. Kiểm tra username/password (Oracle phân biệt hoa/thường cho password)
  2. Kiểm tra user account chưa bị lock: SELECT account_status FROM dba_users WHERE username = 'HR';
  3. Đảm bảo user có quyền CREATE SESSION

Lỗi "Cannot find module 'oracledb'" hoặc Oracle Client not found

Nguyên nhân: Driver oracledb chưa cài hoặc Oracle Instant Client thiếu (Thick mode).

Cách xử lý:

  1. Kiểm tra oracledb trong node_modules
  2. Nếu dùng Thick mode, cài Oracle Instant Client và chỉ định đường dẫn đúng
  3. Chuyển sang Thin mode nếu Oracle >= 12.1

Lỗi "plugin need data-source-manager plugin enabled"

Cách xử lý: Bật data-source-manager trong Plugin Manager trước khi bật plugin Oracle.

Kiểu BLOB/LONG không hiển thị được

Nguyên nhân: Plugin không hỗ trợ kiểu BLOB, RAW, LONG, BFILE trong RETURNING clause của Oracle.

Cách xử lý: Các trường này sẽ bị bỏ qua khi introspect. Nếu cần đọc dữ liệu BLOB, cân nhắc tạo view với column casting hoặc truy cập trực tiếp qua SQL.

Hiệu năng chậm với connection pool

Plugin cấu hình pool mặc định maxConnections: 50, minConnections: 5. Nếu cần điều chỉnh, thay đổi trong cấu hình data source options.