CÀI ĐẶT DATAGUARD PHYSICAL STANDBY DATABASE TRÊN 2 MÁY LINUX
I. GIỚI THIỆU
Cài đặt Dataguard đã có nhiều tài liệu của ORACLE giới thiệu. Tuy nhiên tài liệu của ORACLE đọc không phải ai lần đầu cũng làm thành công được.
Bài này sẽ hướng dẫn các bạn các bước STEP BY STEP cài đặt Physical Standby Database trên 2 máy linux khác nhau.
II. MÔI TRƯỜNG
OS: CENTOS 5.3
DATABASE: ORACLE 10G 2
Chuẩn bị 2 máy linux như sau;
PRIMARY:
Hostname: group1db
IP: 192.168.241.62
Database name (db_name):ORCL
Database Unique Name (db_unique_name): primary
TNS Service Name: to_standby
STANDBY:
Hostname: standby
IP: 192.168.241.61
Database name (db_name):ORCL
Database Unique Name (db_unique_name): standby
TNS Service Name: to_primary
Đảm bảo 2 máy này có thể thấy nhau
Ví dụ trên máy standby có thể ping được máy primary (192.168.241.62)
[root@standby ~]# ping 192.168.241.62
PING 192.168.241.62 (192.168.241.62) 56(84) bytes of data.
64 bytes from 192.168.241.62: icmp_seq=1 ttl=64 time=2.22 ms
64 bytes from 192.168.241.62: icmp_seq=2 ttl=64 time=3.61 ms
64 bytes from 192.168.241.62: icmp_seq=3 ttl=64 time=1.04 ms
64 bytes from 192.168.241.62: icmp_seq=4 ttl=64 time=3.34 ms
64 bytes from 192.168.241.62: icmp_seq=5 ttl=64 time=1.08 ms
64 bytes from 192.168.241.62: icmp_seq=6 ttl=64 time=2.14 ms
III. MÁY NGUỒN PRIMARY
3.1 Enable Forced Logging
Đặt máy PRIMARY ở mode FORCE LOGGING bằng lệnh sau
SQL>ALTER DATABASE FORCE LOGGING;
3.2 Create a Password File
[primary]$orapwd file=$ORACLE_HOME/dbs/orapworcl.ora password=oracle entries=2;
3.3 Configure a Standby Redo Log
Số Standby redo log thêm vào dựa theo công thức sau
(maximum number of logfiles for each thread + 1) * maximum number of threads
Trong đó
Số thread ở đây xác định bằng số instance trên database. Ví dụ có 1 RAC DB có 2 node thì số thread bằng 2, 3 node thì số thread là 3. Ở đây mình chỉ có single node thôi nên số thread là 1. Do đó số Standby redo log cần thêm là 4
SQL>alter database add standby logfile group 4 ('/u01/app/oracle/oradata/orcl/redostd1.log') SIZE 50M;
SQL>alter database add standby logfile group 5 ('/u01/app/oracle/oradata/orcl/redostd2.log') SIZE 50M;
SQL>alter database add standby logfile group 6 ('/u01/app/oracle/oradata/orcl/redostd3.log') SIZE 50M;
SQL>alter database add standby logfile group 7 ('/u01/app/oracle/oradata/orcl/redostd4.log') SIZE 50M;
Kiểm tra các standby redo log file groups được tạo ra bằng lệnh sau
SQL>SELECT GROUP#,member from v$logfile;
SQL>SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
3.4 Set Primary Database Initialization Parameters
Về cơ bản phải set các parameter sau
DB_NAME
DB_UNIQUE_NAME
LOG_ARCHIVE_CONFIG
CONTROL_FILES
LOG_ARCHIVE_DEST_1
LOG_ARCHIVE_DEST_2
LOG_ARCHIVE_DEST_STATE_1
SERVICE_NAMES
LOG_ARCHIVE_DEST_STATE_2
REMOTE_LOGIN_PASSWORDFILE
LOG_ARCHIVE_FORMAT
LOG_ARCHIVE_MAX_PROCESSES
FAL_SERVER
FAL_CLIENT
DB_FILE_NAME_CONVERT
LOG_FILE_NAME_CONVERT
STANDBY_FILE_MANAGEMENT
Tuy nhiên chú ý mọi người là set up DG cho 2 máy khác nhau thì nên set INSTANCE và cấu trúc thư mục hòan tòan giống nhau cho 2 máy để tránh các rắc rối phải gặp sau này. Mình cũng cố tình thử set cho nó khác nhau rồi nhưng đến thời điểm này là chưa có cái nào chạy thành công như ý.
Do đó khi set up giống nhau như trên thì chỉ cần quan tâm đến các parameter in đậm thôi các parameter sau là không cần
DB_FILE_NAME_CONVERT
LOG_FILE_NAME_CONVERT
SQL> ALTER SYSTEM SET DB_NAME=orcl scope=spfile;
SQL>ALTER SYSTEM SET DB_UNIQUE_NAME=primary scope=spfile;
SQL>ALTER SYSTEM SET Log_archive_config='DG_CONFIG=(primary,standby)' scope=spfile;
SQL> ALTER SYSTEM SET CONTROL_FILES='/u01/app/oracle/oradata/orcl/control01.ctl', '/u01/app/oracle/oradata/orcl/control02.ctl', '/u01/app/oracle/oradata/orcl/control03.ctl' scope=spfile;
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_1= 'LOCATION=/u01/arch1/orcl/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary' scope=spfile;
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=to_standby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' scope=spfile;
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=spfile;
SQL>ALTER SYSTEM SET service_names='primary' scope=spfile;
Set parameter LOG_ARCHIVE_DEST_STATE_2 này trên PRIMARY để enable LOG SHIPPING tức start shipping archived redo logs. Nếu không muốn SHIPPING thì set bằng DEFER
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile;
SQL>ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE scope=spfile;
SQL>ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' scope=spfile;
SQL>ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=4 scope=spfile;
SQL> ALTER SYSTEM SET FAL_SERVER='to_standby' scope=spfile;
SQL>ALTER SYSTEM SET FAL_CLIENT='to_primary' scope=spfile;
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO scope=spfile
3.5 Enable Archiving
Nếu Database chưa ở mode archive thì bật nó lên như sau
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
3.6 Create a Control File for the Standby Database
Tạo file control file controlstd.ctl cho máy STANDBY dùng. Thực hiện ở mode MOUNT
Chú ý file controlstd.ctl sẽ được copy qua máy STANDBY sử dụng sau
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL>ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/u01/backup/controlstd.ctl';
SQL> ALTER DATABASE OPEN;
3.7 Prepare an Initialization Parameter File for the Standby Database
Cách nhanh nhất là tạo 1 pfile trên máy PRIMARY sau đó copy nó qua máy STANDBY và sửa lại một số thông số cho thích hợp
Tạo pfile tên initorclstd.ora trên máy PRIMARY
SQL> CREATE PFILE='/u01/backup/initorclstd.ora' FROM SPFILE;
Nội dung của file initorclstd.ora vừa tạo ra (chưa chỉnh sửa) như sau
orcl.__db_cache_size=46137344
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=104857600
orcl.__streams_pool_size=0
*.archive_lag_target=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.background_dump_dest='/u01/app/oracle/admin/orcl/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl','/u01/app/oracle/oradata/orcl/control03.ctl'
*.core_dump_dest='/u01/app/oracle/admin/orcl/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest_size=2147483648
*.db_recovery_file_dest='/u01/flashback'
*.db_unique_name='PRIMARY'
*.dg_broker_start=TRUE
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_client='to_primary'
*.fal_server='to_standby'
*.job_queue_processes=0
*.log_archive_config='nodg_config'
*.log_archive_dest_1='LOCATION=/u01/arch1/orcl/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary'
*.log_archive_dest_2=''
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=4
*.log_archive_min_succeed_dest=1
*.open_cursors=300
*.pga_aggregate_target=200278016
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.service_names='primary'
*.sga_target=167772160
*.standby_file_management='auto'
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/orcl/udump'
3.8 Tạo Oracle Net Service cho cả 2 máy Source và đích dùng cho việc di chuyển dữ liệu của các Redolog
PRIMARY
Thêm alias TO_STANDBY trỏ đến máy STANDBY 192.168.241.61
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
TO_STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.241.61)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.241.62)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
Đến đây phần PRIMARY xem như xong. Chúng ta bắt đầu chuẩn bị cho máy STANDBY.
Trước mắt là
3.9 Copy tất cả Datafiles và Redolog từ máy PRIMARY sang máy STANDBY
Chú ý phải shutdown 2 database PRIMARY và STANDBY trước khi copy để đảm bảo thống nhất dữ liệu
IV. MÁY ĐÍCH STANDBY
4.1 Create a server parameter file for the standby database.
+ Copy File initorclstd.ora tạo ra ở bước 3.7 vào thư mục /u01/backup/ của máy STANDBY
+ Sửa nội dung file initorclstd.ora cho phù hợp với máy STANDBY sửa chổ in đậm
Điểm chú ý là mặc dầu trên máy Standby nhưng tên DB_NAME vẫn là tên máy Primary orcl
FAL_SERVER là alias orcl của máy STANDBY trong tnsnames.ora đóng vai trò Server. Ý nghĩa là khi có sự FAIL OVER thì thằng STANDBY orcl sẽ chuyển vai trò ngược lại làm Server
FAL_CLIENT là alias orclstd của máy PRIMARY trong tnsnames.ora đóng vai trò CLIENT. Ý nghĩa là khi có sự FAIL OVER thì thằng PRIMARY orclstd sẽ chuyển vai trò ngược lại làm CLIENT
.
CONTROL_FILES phải chỉ đến file controlstd.ctl đã tạo ra ở bước 3.6. file này được copy qua máy STANDY để tại /u01/app/oracle/oradata/orcl/
sau đó nhân lên 3 file có tên lần lượt control01.ctl,control02.ctl,control03.ctl
DB_NAME= 'orcl'
DB_UNIQUE_NAME=standby
LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)'
CONTROL_FILES='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl','/u01/app/oracle/oradata/orcl/control03.ctl'
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
LOG_ARCHIVE_DEST_1=
'LOCATION=/u01/arch1/orcl/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=standby'
LOG_ARCHIVE_DEST_2=
'SERVICE=to_primary LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=primary'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
STANDBY_FILE_MANAGEMENT=AUTO
FAL_SERVER=to_primary
FAL_CLIENT=to_standby
SERVICE_NAMES='standby'
File /u01/backup/initorclstd.ora sau khi thay đổi có nội dung như sau
orcl.__db_cache_size=83886080
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=67108864
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.background_dump_dest='/u01/app/oracle/admin/orcl/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl','/u01/app/oracle/oradata/orcl/control03.ctl'
*.core_dump_dest='/u01/app/oracle/admin/orcl/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest_size=2147483648
*.db_recovery_file_dest='/u01/flashback'
*.db_unique_name='STANDBY'
*.dg_broker_start=TRUE
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_client='to_standby'
*.fal_server='to_primary'
*.job_queue_processes=0
*.log_archive_config='DG_CONFIG=(primary,standby)'
*.log_archive_dest_1='LOCATION=/u01/arch1/orcl/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby'
*.log_archive_dest_2='SERVICE=to_primary LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=4
*.open_cursors=300
*.pga_aggregate_target=200278016
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.service_names='standby'
*.sga_target=167772160
*.standby_file_management='AUTO'
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/orcl/udump'
+ Copy Stanby control file tạo ở bước 3.6 sang máy đích để tại /u01/backup
copy đến path thích hợp trên máy STANDBY tại /u01/app/oracle/oradata/orcl
[standby]$ cp /u01/backup/controlstd.ctl /u01/app/oracle/oradata/orcl
+Create a password file (nếu chưa thực hiện)
orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle entries=2
+ Tạo spfile cho Database STANDBY
SQL> create spfile from pfile='/u01/backup/initorclstd.ora';
4.2 Tạo Oracle Net Service cho cả 2 máy Source và đích dùng cho việc di chuyển dữ liệu của các Redolog
Thêm alias orclstd trỏ đến máy PRIMARY 192.168.241.62
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
TO_PRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.241.62)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.241.61)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
Các source sau khi cấu hình bằng GUI sẽ có nội dung như sau
4.3 Start the Physical Standby Database
Start ở mode MOUNT:
SQL> STARTUP MOUNT;
Muốn các REDO APPLY thì phải thực hiện tiếp lệnh sau
Option DISCONNECT FROM SESSION để các REDO apply ở background session
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Đến đây coi như đã cài đặt xong. Chuyển sang bước test xem hệ thống có thực hiện đúng chức năng Dataguard hay không?
V. KIỂM TRA SAU KHI CÀI ĐẶT
1. Check that primary and standby are synchronized.
PRIMARY
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/arch1/orcl/
Oldest online log sequence 43
Next log sequence to archive 45
Current log sequence 45
SQL> select database_role, open_mode from v$database;
DATABASE_ROLE OPEN_MODE
---------------- ----------
PRIMARY READ WRITE
STANDBY
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/arch1/orcl/
Oldest online log sequence 43
Next log sequence to archive 0
Current log sequence 45
SQL> select database_role, open_mode from v$database;
DATABASE_ROLE OPEN_MODE
---------------- ----------
PHYSICAL STANDBY MOUNTED
2. Check that standby is applying redo logs
On this step we will make switch logfile on the primary and will check how the sequence is advanced also on the physical standby
PRIMARY
SQL> alter system switch logfile;
System altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/arch1/orcl/
Oldest online log sequence 44
Next log sequence to archive 46
Current log sequence 46
Check the status of Standby Archiving destination
SQL> Select Status, Error from v$Archive_dest where dest_id=2;
STATUS ERROR
--------- ----------------------------------------------------
VALID
;
PHYSICAL STANDBY
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/arch1/orcl/
Oldest online log sequence 44
Next log sequence to archive 0
Current log sequence 46
Verify new archived redo log files were applied.
On the standby database, query the V$ARCHIVED_LOG view to verify the archived redo log files were applied
Chú ý phải chờ 1 thời gian mới thấy trạng thái các ARCHIVED_LOG chuyển sang YES. Do đó nếu chưa thấy thì cứ thực hiện các bước tiếp theo
STANDBY
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# APP
---------- ---
3 YES
4 YES
5 YES
6 YES
7 YES
8 YES
9 YES
10 YES
11 YES
12 YES
13 YES
SQL> SELECT INSTANCE_NUMBER, INSTANCE_NAME, STARTUP_TIME, ARCHIVER,LOG_SWITCH_WAIT FROM V$INSTANCE;
INSTANCE_NUMBER INSTANCE_NAME STARTUP_T ARCHIVE LOG_SWITCH_WAIT
--------------- ---------------- --------- ------- ---------------
1 orcl 13-OCT-09 STARTED
3. Check Data apply qua máy STANDBY
PRIMARY
Xem các datafile
SQL> select a.name,b.name from v$datafile a, v$tablespace b where a.ts#=b.ts#;
Tạo tablespace với datafile là test01DG.dbf
SQL>create tablespace test01DG datafile '/u01/backup/test01DG.dbf' size 100M extent management local uniform size 256k segment space management auto;
Datafile test01DG.dbf created
SQL> alter system switch logfile;
STANDBY
Kiểm tra lại trên máy STANDBY để xác nhận là test01DG.dbf cũng được tạo ra
SQL> select a.name,b.name from v$datafile a, v$tablespace b where a.ts#=b.ts#;
/u01/backup/test01DG.dbf ONLINE
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty