Công ty TNHH Giải Pháp Công Nghệ OS

Công ty TNHH Giải Pháp Công Nghệ OS Cung cấp dịch vụ CNTT đặc biệt về giải pháp Oracle

05/02/2025

Index Trong Oracle
Index (Chỉ mục) trong Oracle giúp cải thiện hiệu suất truy vấn bằng cách tăng tốc độ tìm kiếm dữ liệu trong bảng. Khi bạn thực hiện câu lệnh SELECT với điều kiện WHERE, Oracle sẽ sử dụng index để nhanh chóng truy xuất dữ liệu thay vì quét toàn bộ bảng (Full Table Scan).
________________________________________
1. Các Loại Index Trong Oracle
Oracle hỗ trợ nhiều loại index, mỗi loại phù hợp với từng tình huống cụ thể.
Loại Index Mô Tả
B-Tree Index Loại index mặc định, hoạt động tốt cho truy vấn tìm kiếm và lọc dữ liệu.
Bitmap Index Hiệu quả khi dữ liệu có số lượng giá trị khác nhau ít (low cardinality), ví dụ: Giới tính, trạng thái (Active/Inactive).
Unique Index Đảm bảo các giá trị trong cột là duy nhất, thường được tạo tự động khi sử dụng PRIMARY KEY hoặc UNIQUE KEY.
Function-Based Index (FBI) Tạo index trên kết quả của một hàm hoặc biểu thức (ví dụ: UPPER(column_name)).
Reverse Key Index Đảo ngược giá trị khóa trước khi lưu vào index, hữu ích để tránh tranh chấp trong môi trường nhiều người dùng (RAC).
Compressed Index Dùng để giảm kích thước index khi có dữ liệu lặp lại nhiều.
Invisible Index Index tồn tại nhưng không được Oracle sử dụng trừ khi được chỉ định trong truy vấn.
Partitioned Index Index được chia thành các phần nhỏ để tăng hiệu suất trên các bảng có lượng dữ liệu lớn.
Domain Index Dùng cho dữ liệu đặc biệt như văn bản, hình ảnh (Oracle Text, Spatial).
________________________________________
2. Cách Tạo Index
2.1. Tạo B-Tree Index (Mặc Định)
CREATE INDEX emp_name_idx ON employees(last_name);
• emp_name_idx: Tên của index.
• employees: Tên bảng.
• last_name: Cột được lập index.
📌 Lợi ích: Tăng tốc độ tìm kiếm trên cột last_name khi thực hiện truy vấn WHERE last_name = 'Smith'.
________________________________________
2.2. Tạo Unique Index
Oracle tự động tạo Unique Index khi sử dụng PRIMARY KEY hoặc UNIQUE KEY. Nhưng bạn cũng có thể tạo thủ công:
CREATE UNIQUE INDEX emp_email_idx ON employees(email);
📌 Lợi ích: Đảm bảo mỗi giá trị trong email là duy nhất.
________________________________________
2.3. Tạo Bitmap Index
CREATE BITMAP INDEX emp_status_idx ON employees(status);
📌 Sử dụng khi:
• Cột có ít giá trị duy nhất (low cardinality), ví dụ: status có các giá trị {Active, Inactive, Pending}.
• Dữ liệu có nhiều truy vấn phân tích (OLAP, Data Warehouse).
________________________________________
2.4. Tạo Function-Based Index (FBI)
CREATE INDEX emp_upper_name_idx ON employees(UPPER(last_name));
📌 Sử dụng khi:
• Bạn thường xuyên tìm kiếm dữ liệu đã qua biến đổi:
SELECT * FROM employees WHERE UPPER(last_name) = 'SMITH';
• Không cần sử dụng Function-Based Index nếu truy vấn dùng last_name = 'SMITH' mà không có UPPER().
________________________________________
2.5. Tạo Reverse Key Index
CREATE INDEX emp_phone_idx ON employees(phone_number) REVERSE;
📌 Sử dụng khi:
• Giá trị index tăng dần (ví dụ: ID SEQUENCE), giúp tránh tranh chấp ghi khi nhiều session chèn dữ liệu đồng thời.
• Thích hợp cho Oracle RAC.
________________________________________
2.6. Tạo Partitioned Index
CREATE INDEX emp_dept_idx ON employees(department_id) LOCAL;
📌 Sử dụng khi:
• Bảng đã được partitioned (chia thành các phần nhỏ theo department_id).
• Tránh quét toàn bộ index.
________________________________________
2.7. Tạo Invisible Index
CREATE INDEX emp_salary_idx ON employees(salary) INVISIBLE;
📌 Sử dụng khi:
• Bạn muốn kiểm tra hiệu suất index mà không ảnh hưởng đến truy vấn thông thường.
• Bật index tạm thời khi cần:
ALTER INDEX emp_salary_idx VISIBLE;
________________________________________
3. Kiểm Tra Index
3.1. Liệt Kê Các Index Trên Một Bảng
SELECT INDEX_NAME, INDEX_TYPE, UNIQUENESS FROM DBA_INDEXES WHERE TABLE_NAME = 'EMPLOYEES';
3.2. Kiểm Tra Index Đang Được Sử Dụng Hay Không
SELECT * FROM V$SQL_PLAN WHERE OBJECT_TYPE = 'INDEX';
• Nếu OBJECT_TYPE = INDEX FULL SCAN, Oracle đang sử dụng Full Index Scan.
• Nếu OBJECT_TYPE = INDEX RANGE SCAN, Oracle đang sử dụng Index Range Scan.
3.3. Xem Chi Tiết Cấu Trúc Index
SELECT * FROM DBA_IND_COLUMNS WHERE INDEX_NAME = 'EMP_NAME_IDX';
________________________________________
4. Khi Nào Cần Dùng Index?
Dùng Index khi: ✅ Cột thường xuyên xuất hiện trong điều kiện WHERE, JOIN, ORDER BY.
✅ Dữ liệu lớn, truy vấn mất nhiều thời gian.
✅ Giá trị trong cột có độ phân biệt cao (high cardinality).
✅ Các truy vấn lọc một phần nhỏ dữ liệu (dưới 10% số hàng).
Không nên dùng Index khi: ❌ Bảng quá nhỏ (Oracle sẽ full table scan nhanh hơn).
❌ Cột có ít giá trị khác nhau (low cardinality, ngoại trừ Bitmap Index).
❌ Câu lệnh thường xuyên cập nhật (UPDATE, DELETE, INSERT), vì index làm giảm tốc độ ghi dữ liệu.
________________________________________
5. Xóa, Vô Hiệu Hóa, và Tái Xây Dựng Index
5.1. Xóa Index
DROP INDEX emp_name_idx;
5.2. Vô Hiệu Hóa Index
ALTER INDEX emp_name_idx UNUSABLE;
🔹 Index vẫn tồn tại, nhưng Oracle không sử dụng nó.
5.3. Tái Xây Dựng Index
ALTER INDEX emp_name_idx REBUILD;
🔹 Dùng khi:
• Index bị mất hiệu suất do nhiều thay đổi dữ liệu.
• Giảm phân mảnh index.
________________________________________
6. Kiểm Tra Index Có Hoạt Động Không?
🔹 Kiểm tra truy vấn có sử dụng Index không:
EXPLAIN PLAN FOR
SELECT * FROM employees WHERE last_name = 'Smith';

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
🔹 Nếu có INDEX RANGE SCAN hoặc INDEX UNIQUE SCAN, thì index đang được sử dụng.
________________________________________
🎯 Kết Luận
🔹 Index giúp cải thiện hiệu suất truy vấn, nhưng không phải lúc nào cũng có lợi.
🔹 Chọn loại Index phù hợp dựa trên cấu trúc dữ liệu và kiểu truy vấn.
🔹 B-Tree Index là loại thông dụng nhất, Bitmap Index phù hợp với low-cardinality, Function-Based Index giúp tối ưu hóa truy vấn có hàm.
🔹 Kiểm tra hiệu suất Index thường xuyên để đảm bảo không bị phân mảnh và đang thực sự được sử dụng.
🚀 Áp dụng ngay các kiến thức trên để tối ưu hóa hiệu suất database của bạn! 🚀

05/02/2025

Khi Nào Cần Tạo Index Trong Oracle?
Index giúp cải thiện hiệu suất truy vấn, nhưng không phải lúc nào cũng cần. Dưới đây là các tình huống nên và không nên tạo index để tối ưu hóa hiệu suất Oracle Database.
________________________________________
1. Khi Nào Cần Tạo Index?
Bạn nên tạo Index khi:
1.1. Cột được sử dụng thường xuyên trong điều kiện WHERE, JOIN, ORDER BY, GROUP BY
• Nếu truy vấn lọc dữ liệu bằng WHERE mà không có index, Oracle sẽ phải quét toàn bộ bảng (Full Table Scan).
• Index giúp truy vấn nhanh hơn bằng cách tìm giá trị trực tiếp thay vì quét từng dòng.
Ví dụ:
SELECT * FROM employees WHERE department_id = 10;
🔹 Giải pháp: Tạo index trên cột department_id
CREATE INDEX emp_dept_idx ON employees(department_id);
________________________________________
1.2. Bảng có dữ liệu lớn (Hàng triệu bản ghi trở lên)
• Nếu bảng có ít dữ liệu, Oracle có thể dùng Full Table Scan nhanh hơn index.
• Nếu bảng có nhiều dữ liệu, index giúp truy xuất nhanh hơn rất nhiều.
🔹 Ví dụ: Bảng orders có 10 triệu bản ghi, nếu thường xuyên tìm kiếm theo customer_id, hãy tạo index:
CREATE INDEX orders_cust_idx ON orders(customer_id);
________________________________________
1.3. Cột có độ phân biệt cao (High Cardinality)
• Cardinality cao = Nhiều giá trị duy nhất → Index hoạt động hiệu quả.
• Cardinality thấp = Ít giá trị khác nhau → Index không hiệu quả, có thể làm chậm truy vấn.
📌 Ví dụ:
• Nên tạo index: email, phone_number, order_id (Nhiều giá trị khác nhau).
• Không nên tạo index: gender (Chỉ có {Male, Female}), status (Active, Inactive).
🔹 Kiểm tra độ phân biệt của cột:
SELECT COUNT(DISTINCT status) / COUNT(*) FROM employees;
• > 10%: Nên tạo index.
• < 10%: Dùng Bitmap Index hoặc không cần index.
________________________________________
1.4. Khi cột được sử dụng trong JOIN giữa các bảng lớn
• Khi JOIN bảng lớn mà không có index, Oracle sẽ phải thực hiện Full Table Scan trên cả hai bảng.
• Nếu tạo index trên cột JOIN, hiệu suất cải thiện đáng kể.
🔹 Ví dụ:
SELECT e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;
🔹 Giải pháp: Tạo index trên employees.department_id và departments.department_id
CREATE INDEX emp_dept_idx ON employees(department_id);
CREATE INDEX dept_id_idx ON departments(department_id);
________________________________________
1.5. Khi cột được sử dụng trong ORDER BY hoặc GROUP BY
• Nếu bạn thường xuyên ORDER BY hoặc GROUP BY trên một cột lớn, tạo index giúp sắp xếp nhanh hơn.
🔹 Ví dụ:
SELECT * FROM sales ORDER BY transaction_date;
🔹 Giải pháp:
CREATE INDEX sales_date_idx ON sales(transaction_date);
________________________________________
1.6. Khi truy vấn có điều kiện lọc trên nhiều cột (Composite Index)
• Nếu truy vấn thường xuyên lọc theo nhiều cột, tạo Composite Index giúp tăng tốc thay vì tạo nhiều index riêng lẻ.
🔹 Ví dụ:
SELECT * FROM employees WHERE department_id = 10 AND job_id = 'IT_PROG';
🔹 Giải pháp:
CREATE INDEX emp_dept_job_idx ON employees(department_id, job_id);
📌 Lưu ý:
• Cột đầu tiên trong Composite Index phải là cột được lọc thường xuyên nhất.
• Nếu truy vấn chỉ lọc theo job_id, index trên (department_id, job_id) có thể không được sử dụng.
________________________________________
1.7. Khi cột được sử dụng với hàm trong WHERE (Function-Based Index)
• Nếu truy vấn sử dụng hàm, Oracle không dùng index thông thường.
• Bạn có thể tạo Function-Based Index để cải thiện hiệu suất.
🔹 Ví dụ:
SELECT * FROM employees WHERE UPPER(last_name) = 'SMITH';
🔹 Giải pháp:
CREATE INDEX emp_upper_name_idx ON employees(UPPER(last_name));
________________________________________
2. Khi Nào KHÔNG Nên Tạo Index?
🚫 Không phải lúc nào index cũng giúp tăng tốc độ truy vấn!
Bạn KHÔNG nên tạo Index nếu:
2.1. Bảng quá nhỏ
• Nếu bảng có dưới 1000 bản ghi, Oracle có thể dùng Full Table Scan nhanh hơn index.
• Dùng index trong trường hợp này có thể tăng overhead không cần thiết.
________________________________________
2.2. Cột có ít giá trị khác nhau (Low Cardinality)
• Nếu một cột có ít giá trị duy nhất (ví dụ: status = {Active, Inactive}), Oracle có thể quét toàn bộ bảng nhanh hơn so với dùng index.
• Giải pháp: Nếu cần index, sử dụng Bitmap Index thay vì B-Tree Index.
🔹 Không hiệu quả:
CREATE INDEX emp_status_idx ON employees(status);
🔹 Tốt hơn (dùng Bitmap Index):
CREATE BITMAP INDEX emp_status_idx ON employees(status);
________________________________________
2.3. Cột thường xuyên bị cập nhật (UPDATE, DELETE, INSERT)
• Index làm chậm các thao tác UPDATE, DELETE, INSERT vì Oracle phải cập nhật index mỗi khi dữ liệu thay đổi.
• Không nên tạo index trên các cột bị cập nhật thường xuyên.
📌 Ví dụ:
• Cột salary thường xuyên được cập nhật.
• Không nên tạo index:
CREATE INDEX emp_salary_idx ON employees(salary);
• Giải pháp: Chỉ tạo index nếu salary thường xuyên được truy vấn theo khoảng (BETWEEN, ) mà không bị cập nhật nhiều.
________________________________________
2.4. Khi Index không được sử dụng (Kiểm tra bằng EXPLAIN PLAN)
• Nếu sau khi tạo index mà Oracle vẫn sử dụng Full Table Scan, index có thể không có tác dụng.
• Kiểm tra index có được sử dụng không:
EXPLAIN PLAN FOR
SELECT * FROM employees WHERE last_name = 'Smith';

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
• Nếu thấy Full Table Scan, index không hoạt động.
________________________________________
🎯 Tổng Kết – Khi Nào Cần Tạo Index?
Tóm lại:
• Dữ liệu lớn + truy vấn lọc nhiều → Nên tạo index.
• Bảng nhỏ, dữ liệu lặp lại nhiều, thường xuyên cập nhật → Không nên tạo index.
• Kiểm tra index có được sử dụng không bằng EXPLAIN PLAN trước khi quyết định.
🚀 Áp dụng các nguyên tắc trên để tối ưu hóa hiệu suất truy vấn Oracle Database của bạn! 🚀

05/02/2025

Dưới đây là các câu lệnh SQL giúp bạn kiểm tra trạng thái, đồng bộ, lỗi và hoạt động của Oracle Data Guard trên cả Primary và Standby Database.
________________________________________
1. Kiểm Tra Database Đang Ở Chế Độ Primary Hay Standby
📌 Chạy trên cả Primary và Standby
SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;
🔹 Kết quả mong đợi:
• Trên Primary: DATABASE_ROLE = PRIMARY, OPEN_MODE = READ WRITE
• Trên Standby: DATABASE_ROLE = PHYSICAL STANDBY, OPEN_MODE = MOUNTED (hoặc READ ONLY nếu dùng Active Data Guard)
________________________________________
2. Kiểm Tra Quá Trình Đồng Bộ Log (Redo Apply)
📌 Chạy trên Standby
SELECT PROCESS, STATUS, THREAD #, SEQUENCE # FROM V$MANAGED_STANDBY;
🔹 Ý nghĩa:
• MRP0 (Managed Recovery Process) phải ACTIVE → Quá trình apply log đang chạy.
• RFS (Remote File Server) phải ACTIVE → Standby đang nhận Redo từ Primary.
• ARCH (Archive Process) phải ACTIVE → Quá trình Archive Log hoạt động tốt.
📌 Chạy trên Primary
SELECT DEST_ID, STATUS, DESTINATION FROM V$ARCHIVE_DEST WHERE STATUS='VALID';
🔹 Nếu STATUS = VALID, dữ liệu đang được gửi đến Standby bình thường.
________________________________________
3. Kiểm Tra Log Apply Có Theo Kịp Primary Không
📌 Chạy trên Primary
SELECT MAX(SEQUENCE #) FROM V$ARCHIVED_LOG WHERE APPLIED='YES';
📌 Chạy trên Standby
SELECT SEQUENCE #, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE # DESC;
🔹 So sánh kết quả giữa Primary & Standby:
• Nếu SEQUENCE # trên Standby gần bằng Primary, thì quá trình Apply log bình thường.
• Nếu SEQUENCE # trên Standby thấp hơn nhiều so với Primary, có thể Standby đang bị chậm.
________________________________________
4. Kiểm Tra Log Gap (Khoảng Cách Giữa Primary và Standby)
📌 Chạy trên Standby
SELECT ARCH.THREAD #, ARCH.SEQUENCE # AS "Last Applied Log",
APPL.SEQUENCE # AS "Last Received Log"
FROM
(SELECT THREAD #, SEQUENCE # FROM V$ARCHIVED_LOG WHERE APPLIED='YES' ORDER BY SEQUENCE # DESC FETCH FIRST 1 ROW ONLY) ARCH,
(SELECT THREAD #, SEQUENCE # FROM V$ARCHIVED_LOG WHERE APPLIED='NO' ORDER BY SEQUENCE # DESC FETCH FIRST 1 ROW ONLY) APPL
WHERE ARCH.THREAD # = APPL.THREAD #;
🔹 Nếu có khoảng cách lớn giữa "Last Applied Log" và "Last Received Log", Standby có thể đang bị chậm.
________________________________________
5. Kiểm Tra Redo Log Đang Được Gửi Từ Primary Đến Standby
📌 Chạy trên Primary
SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST WHERE DEST_ID=2;
🔹 Nếu STATUS ≠ VALID hoặc có ERROR, kiểm tra kết nối giữa Primary & Standby.
________________________________________
6. Kiểm Tra Tiến Trình Trên Standby (RFS, MRP)
📌 Chạy trên Standby
SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY;
🔹 Kết quả mong đợi:
• RFS (Remote File Server) → ACTIVE
• MRP (Managed Recovery Process) → APPLYING_LOG
________________________________________
7. Kiểm Tra Log File Được Gửi Từ Primary Đến Standby
📌 Chạy trên Primary
SELECT DEST_ID, SEQUENCE #, APPLIED FROM V$ARCHIVED_LOG WHERE DEST_ID=2 ORDER BY SEQUENCE # DESC FETCH FIRST 5 ROWS ONLY;
📌 Chạy trên Standby
SELECT SEQUENCE #, FIRST_TIME, NEXT_TIME, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE # DESC FETCH FIRST 5 ROWS ONLY;
🔹 So sánh SEQUENCE # giữa Primary và Standby để xem Standby có nhận được log mới nhất không.
________________________________________
8. Kiểm Tra Standby Redo Logs (SRLs)
📌 Chạy trên Standby
SELECT GROUP #, THREAD #, SEQUENCE #, STATUS FROM V$STANDBY_LOG;
🔹 STATUS = ACTIVE trên ít nhất 1 nhóm thì SRLs hoạt động bình thường.
________________________________________
9. Kiểm Tra Lỗi Data Guard
📌 Chạy trên Primary & Standby
SELECT MESSAGE FROM V$DATAGUARD_STATUS ORDER BY TIMESTAMP DESC FETCH FIRST 10 ROWS ONLY;
🔹 Nếu có lỗi, kiểm tra log alert để tìm nguyên nhân.
________________________________________
10. Kiểm Tra Flashback Đã Bật Chưa (Dành cho Fast-Start Failover)
📌 Chạy trên Primary & Standby
SELECT FLASHBACK_ON FROM V$DATABASE;
🔹 Nếu FLASHBACK_ON = NO, bạn cần bật Flashback bằng:
ALTER DATABASE FLASHBACK ON;
________________________________________
11. Kiểm Tra Mức Độ Bảo Vệ Của Data Guard
📌 Chạy trên Primary
SELECT PROTECTION_MODE FROM V$DATABASE;
🔹 Các chế độ bảo vệ:
• MAXIMUM PERFORMANCE (Hiệu suất tối đa)
• MAXIMUM AVAILABILITY (Độ sẵn sàng cao)
• MAXIMUM PROTECTION (Bảo vệ cao nhất, có thể làm Primary bị dừng nếu Standby không nhận Redo)
________________________________________
12. Kiểm Tra Sự Hoạt Động Của Redo Transport
📌 Chạy trên Primary
SELECT DEST_ID, DESTINATION, STATUS FROM V$ARCHIVE_DEST WHERE STATUS = 'VALID';
🔹 Kết quả mong đợi:
• STATUS = VALID → Redo đang được gửi thành công.
________________________________________
13. Kiểm Tra Sự Đồng Bộ Của Data Guard Broker (DGMGRL)
Nếu bạn dùng Data Guard Broker, chạy lệnh sau trên DGMGRL:
dgmgrl sys/password@orcl_primary
SHOW CONFIGURATION;
🔹 Kết quả mong đợi:
• Configuration Status: SUCCESS
• Primary Database: orcl_primary
• Standby Database: orcl_standby (Synchronized)

Send a message to learn more

05/02/2025

Hướng Dẫn Cấu Hình Oracle Data Guard Physical Standby
Oracle Data Guard là giải pháp High Availability (HA) giúp đồng bộ hóa dữ liệu giữa Primary Database và Standby Database. Trong hướng dẫn này, chúng ta sẽ cấu hình Physical Standby Database trên Oracle 19c.
________________________________________
1. Kiểm Tra Môi Trường
Trước khi cấu hình, bạn cần có:
• Primary Database: orcl_primary
• Standby Database: orcl_standby
• Oracle Version: 19c
• OS: Linux hoặc Windows
• Mô hình mạng:
o Primary: 192.168.1.100
o Standby: 192.168.1.101
________________________________________
2. Cấu Hình Primary Database
2.1. Bật FORCE LOGGING
ALTER DATABASE FORCE LOGGING;
2.2. Kiểm tra ARCHIVELOG Mode và Enable Flashback
SELECT log_mode, flashback_on FROM v$database;
Nếu chưa bật ARCHIVELOG, thực hiện:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
Bật Flashback (khuyến nghị):
ALTER DATABASE FLASHBACK ON;
2.3. Cấu hình các Tham Số Data Guard
Chạy các lệnh sau:
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl_primary,orcl_standby)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archive MANDATORY' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orcl_standby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_standby' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
ALTER SYSTEM SET FAL_SERVER=orcl_standby SCOPE=BOTH;
ALTER SYSTEM SET FAL_CLIENT=orcl_primary SCOPE=BOTH;
ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/orcl_primary','/u01/app/oracle/oradata/orcl_standby' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/orcl_primary','/u01/app/oracle/oradata/orcl_standby' SCOPE=SPFILE;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
2.4. Kiểm tra các Redo Log
SELECT GROUP #, STATUS FROM V$LOG;
Nếu chưa có Standby Redo Logs, tạo như sau:
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/app/oracle/oradata/orcl_primary/standby_redo01.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/app/oracle/oradata/orcl_primary/standby_redo02.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/app/oracle/oradata/orcl_primary/standby_redo03.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 7('/u01/app/oracle/oradata/orcl_primary/standby_redo04.log') SIZE 50M;

2.5. Tạo Password File
orapwd file=$ORACLE_HOME/dbs/orapworcl_primary password=oracle entries=10
Sao chép password file này sang Standby.
2.6. Cấu hình TNS Listener
Trên Primary (tnsnames.ora)
ORCL_STANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST=192.168.1.101)(PORT=1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl_standby)
(INSTANCE_NAME = orcl_standby)
)
)
Trên Standby (tnsnames.ora)
ORCL_PRIMARY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST=192.168.1.100)(PORT=1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl_primary)
(INSTANCE_NAME = orcl_primary)
)
)
Kiểm tra kết nối:
tnsping orcl_standby
________________________________________
3. Chuẩn Bị Standby Database
3.1. Sao chép các file cấu hình
Trên Primary:
scp $ORACLE_HOME/dbs/initorcl_primary.ora [email protected]:$ORACLE_HOME/dbs/initorcl_standby.ora
scp $ORACLE_HOME/dbs/orapworcl_primary [email protected]:$ORACLE_HOME/dbs/orapworcl_standby
3.2. Backup database trên Primary
RMAN TARGET /
BACKUP DATABASE FORMAT '/u01/app/oracle/backup/orcl_primary_%U.bkp';
BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/u01/app/oracle/backup/standby_controlfile.bkp';
Chuyển các file backup sang Standby:
scp /u01/app/oracle/backup/* [email protected]:/u01/app/oracle/backup/
________________________________________
4. Khôi Phục Dữ Liệu Trên Standby
4.1. Khôi phục Database bằng RMAN
rman TARGET /
STARTUP NOMOUNT;
RESTORE STANDBY CONTROLFILE FROM '/u01/app/oracle/backup/standby_controlfile.bkp';
ALTER DATABASE MOUNT;
CATALOG START WITH '/u01/app/oracle/backup/';
RESTORE DATABASE;
RECOVER DATABASE;
4.2. Cấu hình Data Guard trên Standby
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl_primary,orcl_standby)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archive MANDATORY' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orcl_primary ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_primary' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
ALTER SYSTEM SET FAL_SERVER=orcl_primary SCOPE=BOTH;
ALTER SYSTEM SET FAL_CLIENT=orcl_standby SCOPE=BOTH;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
________________________________________
5. Bật Data Guard và Kiểm Tra
5.1. Start Data Guard
Trên Primary, bật redo transport:
ALTER DATABASE SET STANDBY DATABASE TO MAXIMUM PERFORMANCE;
ALTER SYSTEM SWITCH LOGFILE;
Trên Standby, bật MRP (Managed Recovery Process):
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
5.2. Kiểm tra trạng thái Data Guard
Trên Primary:
SELECT DEST_ID, STATUS, DESTINATION FROM V$ARCHIVE_DEST WHERE STATUS='VALID';
Trên Standby:
SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY;
5.3. Kiểm tra Logs có Apply không
SELECT SEQUENCE #, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE #;
________________________________________
6. Kiểm Tra & Chuyển Đổi Vai Trò
6.1. Kiểm tra Data Guard hoạt động đúng
Trên Primary:
SELECT DATABASE_ROLE FROM V$DATABASE;
Trên Standby:
SELECT DATABASE_ROLE FROM V$DATABASE;
Nếu Standby hiển thị PHYSICAL STANDBY, Data Guard đã hoạt động.
6.2. Chuyển Standby thành Primary (Switchover)
Trên Primary:
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
Trên Standby:
ALTER DATABASE ACTIVATE STANDBY DATABASE;
ALTER DATABASE OPEN;

05/02/2025

Công ty OS cung cấp các dịch vụ CSDL Oracle như sau:

+ Dịch vụ tư vấn Oracle

+ Dịch vụ nâng cấp CSDL Oracle

+ Dịch vụ đánh giá cấu hình CSDL Oracle

+ Dịch vụ chuyển đổi dữ liệu CSDL Oracle

+ Dịch vụ Hỗ trợ Quản trị CSDL Oracle 24/7

+ Dịch vụ Hỗ trợ xử lý sự cố 24/7 CSDL Oracle

+ Dịch vụ bảo trì CSDL Oracle

+ Dịch vụ kiểm tra sức khỏe tổng thể (healthcheck) CSDL Oracle

+ Dịch vụ Tối ưu hóa CSDL Oracle

+ Dịch vụ đánh giá an toàn bảo mật CSDL Oracle

+ Dịch vụ tự động hóa CSDL Oracle

+ Dịch vụ đào tạo theo yêu cầu

Văn phòng: 118/42/95 Huỳnh Thiện Lộc, P. Hòa Thạnh, Q.Tân Phú, TP.HCM
Hotline : 0867791918

05/02/2025

Các Chức Năng Chính Của Oracle 19c
Oracle Database 19c là phiên bản Long-Term Support (LTS) của Oracle, cung cấp nhiều tính năng mạnh mẽ về hiệu suất, bảo mật, quản lý dữ liệu, AI/ML, và tự động hóa. Dưới đây là các chức năng quan trọng nhất của Oracle 19c.
________________________________________
1. Hiệu Suất (Performance)
🔹 1.1. Automatic Indexing (Tự động tạo Index)
• Oracle 19c có thể tự động tạo, giám sát, và tối ưu hóa index dựa trên workload thực tế.
• Tăng hiệu suất truy vấn mà không cần DBA can thiệp.
🔹 1.2. High-Frequency SQL Plan Management (Quản lý kế hoạch SQL)
• Cải thiện SQL Plan Baselines, giúp đảm bảo các truy vấn luôn có hiệu suất ổn định ngay cả khi thống kê hoặc dữ liệu thay đổi.
🔹 1.3. Real-Time Statistics (Thống kê thời gian thực)
• Thống kê cập nhật tức thời mà không cần chạy DBMS_STATS, giúp tối ưu hóa hiệu suất truy vấn ngay lập tức.
🔹 1.4. Hybrid Partitioned Tables (Bảng phân vùng lai)
• Kết hợp dữ liệu trong database (tablespace) và ngoài database (external files như CSV, Parquet) trong cùng một bảng.
________________________________________
2. Bảo Mật (Security)
🔹 2.1. Data Safe (Bảo vệ dữ liệu nhạy cảm)
• Công cụ Oracle Data Safe giúp phát hiện dữ liệu nhạy cảm, đánh giá bảo mật, và che giấu dữ liệu trong môi trường non-prod.
🔹 2.2. Transparent Data Encryption (Mã hóa dữ liệu)
• Mã hóa dữ liệu tự động ở mức file (TDE - Transparent Data Encryption), giúp bảo vệ dữ liệu mà không ảnh hưởng đến hiệu suất.
🔹 2.3. Data Redaction (Ẩn dữ liệu nhạy cảm)
• Che giấu dữ liệu trong query result, chỉ hiển thị dữ liệu phù hợp với người có quyền truy cập.
🔹 2.4. Unified Auditing (Nhật ký bảo mật hợp nhất)
• Audit logs tập trung giúp giám sát bảo mật và truy vết thay đổi dữ liệu một cách dễ dàng.
________________________________________
3. Quản Lý Dữ Liệu (Data Management)
🔹 3.1. Multi-Tenant Architecture (Kiến trúc đa tenant)
• Một CDB (Container Database) có thể chứa nhiều PDB (Pluggable Database), giúp dễ dàng quản lý, nâng cấp, và giảm tài nguyên sử dụng.
🔹 3.2. Online Data Redefinition (Thay đổi dữ liệu online)
• Có thể thêm cột, thay đổi cấu trúc bảng, di chuyển partition mà không cần downtime.
🔹 3.3. JSON & XML Improvements
• Hỗ trợ lưu trữ JSON tốt hơn với JSON Duality Views, giúp truy vấn dữ liệu JSON dễ dàng bằng SQL.
🔹 3.4. Automatic In-Memory (Bộ nhớ tự động)
• Hỗ trợ In-Memory Column Store tự động, giúp tối ưu hóa hiệu suất truy vấn mà không cần can thiệp thủ công.
________________________________________
4. AI/ML & Phân Tích Dữ Liệu (Analytics & Machine Learning)
🔹 4.1. In-Database Machine Learning
• Tích hợp AI/ML ngay trong database với hơn 30 thuật toán (Random Forest, SVM, Neural Networks, Gradient Boosting, etc.).
• Chạy trực tiếp trong SQL mà không cần xuất dữ liệu ra ngoài.
🔹 4.2. Real-Time SQL Monitoring
• Giám sát SQL query trong thời gian thực, giúp DBA tối ưu hóa hiệu suất.
🔹 4.3. Automatic Workload Repository (AWR) Enhancements
• Báo cáo AWR cải tiến giúp phân tích hiệu suất database chi tiết hơn.
________________________________________
5. Tự Động Hóa (Automation)
🔹 5.1. Automatic Database Provisioning
• Dễ dàng tạo, sao chép, cấu hình database tự động bằng DBCA hoặc DBCLI.
🔹 5.2. Autonomous Health Framework (AHF)
• Hệ thống giám sát tự động, phát hiện lỗi và đề xuất giải pháp.
🔹 5.3. Automatic Storage Management (ASM) Enhancements
• Cải thiện quản lý ASM Disk Groups, giúp tối ưu hóa I/O hiệu suất cao.
________________________________________
6. Khả Năng Khôi Phục & High Availability
🔹 6.1. Data Guard & Active Data Guard
• Tự động đồng bộ database dự phòng giúp bảo vệ dữ liệu chống lỗi hệ thống.
🔹 6.2. Flashback Database Enhancements
• Rollback toàn bộ database về trạng thái trước đó chỉ trong vài giây.
🔹 6.3. Online Patching (Opatch)
• Cập nhật mà không cần downtime, giảm ảnh hưởng đến hoạt động hệ thống.
________________________________________
7. Hỗ Trợ Đa Nền Tảng (Cross-Platform Support)
🔹 7.1. Oracle Cloud Integration
• Dễ dàng triển khai trên Oracle Cloud, AWS, Azure với tối ưu hóa đặc biệt.
🔹 7.2. Zero Downtime Migration (ZDM)
• Hỗ trợ migrating database giữa On-Premise và Cloud mà không cần downtime.
🔹 7.3. Blockchain Table
• Cấu trúc dữ liệu chống giả mạo, phù hợp cho các ứng dụng tài chính.

05/02/2025

Hướng Dẫn Xóa AUDIT Files và TRACE Files trong Oracle
Oracle sinh ra nhiều file Audit Logs và Trace Files theo thời gian để ghi lại hoạt động hệ thống, lỗi và bảo mật. Nếu không được quản lý, các file này có thể chiếm dụng rất nhiều dung lượng trên ổ đĩa.
Dưới đây là hướng dẫn xóa và quản lý tự động các file này một cách an toàn.
________________________________________
1. Xóa AUDIT Files (Audit Logs)
Audit files trong Oracle được lưu trữ tại thư mục $ORACLE_BASE/admin/$ORACLE_SID/adump/.
1.1. Kiểm tra vị trí lưu trữ Audit Logs
Chạy lệnh sau để xem thư mục chứa file audit:
SHOW PARAMETER audit_file_dest;
🔹 Ví dụ kết quả:
NAME TYPE VALUE
------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
📌 Thư mục chứa Audit Logs: /u01/app/oracle/admin/ORCL/adump/
________________________________________
1.2. Xóa Audit Files thủ công
Nếu bạn muốn xóa tất cả audit logs cũ, sử dụng lệnh:
rm -rf /u01/app/oracle/admin/ORCL/adump/*.aud
Hoặc nếu chỉ muốn xóa các file cũ hơn 7 ngày:
find /u01/app/oracle/admin/ORCL/adump/ -name "*.aud" -mtime +7 -exec rm {} \;
🔹 Giải thích:
• *.aud → Chỉ xóa các file có đuôi .aud (Audit Logs).
• -mtime +7 → Chỉ xóa file cũ hơn 7 ngày.
• -exec rm {} → Thực hiện lệnh xóa.
________________________________________
1.3. Cấu hình tự động dọn dẹp Audit Logs
Bạn có thể tự động xóa Audit Logs bằng cách thêm cron job trên Linux:
🔹 Mở cron job để chỉnh sửa:
crontab -e
🔹 Thêm dòng sau để xóa audit logs cũ hơn 7 ngày vào mỗi đêm lúc 2:00 sáng:
0 2 * * * find /u01/app/oracle/admin/ORCL/adump/ -name "*.aud" -mtime +7 -exec rm {} \;
📌 Lợi ích: Tránh đầy đĩa do audit logs.
________________________________________
2. Xóa TRACE Files trong Oracle
Trace files chứa thông tin debug về hoạt động của database và thường nằm trong thư mục $ORACLE_BASE/diag/rdbms/$ORACLE_SID/trace/.
2.1. Kiểm tra vị trí lưu trữ Trace Files
SHOW PARAMETER dump_dest;
🔹 Ví dụ kết quả:
plaintext
Sao chépChỉnh sửa
NAME TYPE VALUE
-------------------- ----------- -----------------------------------
background_dump_dest string /u01/app/oracle/diag/rdbms/ORCL/trace
📌 Thư mục chứa trace files: /u01/app/oracle/diag/rdbms/ORCL/trace/
________________________________________
2.2. Xóa Trace Files thủ công
🔹 Xóa tất cả trace files (.trc và .trm):
rm -rf /u01/app/oracle/diag/rdbms/ORCL/trace/*.trc
rm -rf /u01/app/oracle/diag/rdbms/ORCL/trace/*.trm
🔹 Xóa trace files cũ hơn 7 ngày:
find /u01/app/oracle/diag/rdbms/ORCL/trace/ -name "*.trc" -mtime +7 -exec rm {} \;
find /u01/app/oracle/diag/rdbms/ORCL/trace/ -name "*.trm" -mtime +7 -exec rm {} \;
________________________________________
2.3. Xóa Trace Files tự động bằng Cron Job
🔹 Thêm vào cron job để chạy hàng ngày lúc 3:00 sáng:
0 3 * * * find /u01/app/oracle/diag/rdbms/ORCL/trace/ -name "*.trc" -mtime +7 -exec rm {} \;
0 3 * * * find /u01/app/oracle/diag/rdbms/ORCL/trace/ -name "*.trm" -mtime +7 -exec rm {} \;
📌 Lợi ích: Giúp tiết kiệm dung lượng ổ đĩa mà không làm ảnh hưởng đến database.
________________________________________
3. Xóa Trace Files & Audit Logs bằng Lệnh Oracle
Ngoài việc xóa file trực tiếp từ hệ điều hành, bạn có thể dùng lệnh Oracle để dọn dẹp trace logs.
🔹 Dọn dẹp tất cả trace logs:
BEGIN
DBMS_DIAGNOSTIC.CLEAN_DIAG;
END;
/
🔹 Dọn dẹp alert log (nếu cần):
BEGIN
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
use_last_arch_timestamp => FALSE
);
END;
/
________________________________________
4. Kiểm Tra Dung Lượng Của AUDIT và TRACE FILES
🔹 Kiểm tra dung lượng của Audit Logs:
du -sh /u01/app/oracle/admin/ORCL/adump/
🔹 Kiểm tra dung lượng của Trace Files:
du -sh /u01/app/oracle/diag/rdbms/ORCL/trace/
📌 Nếu dung lượng quá lớn, hãy thực hiện xóa ngay để tránh database bị lỗi do đầy ổ đĩa
Unix Commands
find /opt/oracle/diag/rdbms/dbname/instance_name/trace -name "*.trc" -mtime +3 -exec rm {} \;
find /opt/oracle/diag/rdbms/dbname/instance_name/trace -name "*.trm" -mtime +3 -exec rm {} \;
find /opt/oracle/diag/rdbms/dbname/instance_name/trace -name "*.gz" -mtime +3 -exec rm {} \;
find /opt/oracle/diag/tnslsnr/hostname/listener_dbname/alert -name "log*xml" -mtime +3 -exec rm {} \;
(or)
find . -name "*.aud" -mtime +7 -exec rm -f {} \;

Below error “arg list too long” can be sorted out by find command.
oracle..> rm -rf *.aud
ksh: /usr/bin/rm: arg list too long

Solution
find . -name '*.aud' -exec rm {} +

Address

118/42/95 Huỳnh Thiện Lộc, Phường Hoà Thạnh, Quận Tân Phú
Ho Chi Minh City
700000

Opening Hours

Monday 08:00 - 17:00
Tuesday 08:00 - 17:00
Wednesday 08:00 - 17:00
Thursday 08:00 - 17:00
Friday 08:00 - 17:00
Saturday 08:00 - 17:00

Alerts

Be the first to know and let us send you an email when Công ty TNHH Giải Pháp Công Nghệ OS posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Share