Thứ Ba, 13 tháng 9, 2022

[VVIP5] HƯỚNG DẪN KIỂM TRA ĐỊNH KỲ HOẠT ĐỘNG CỦA CSDL

HƯỚNG DẪN  KIỂM TRA ĐỊNH KỲ HOẠT ĐỘNG CỦA CSDL


3.1. Kiểm tra log Database

Login vào máy chủ database với user “oracle” thực hiện các lệnh theo cú pháp sau và thay các biến phù hợp:

$cat       /<DB name>/<Instance name>/trace/alert_<Instance name>.log |"Failed\|ORA-\|Ora-\|TNS-\|Error\|error\|Fatal\|fatal"

Ví dụ:

$cat $ORACLE_BASE/diag/rdbms/CRM/CRM1/trace/alert_ CRM1.log |grep "Failed\|ORA-\|Ora-\|TNS-\|Error\|error\|Fatal\|fatal"

--> Với kết quả trả về, dùng Google hoặc Metalink để xử lý các lỗi.

3.2. Kiểm tra active session, session, blocking session

SELECT /*1.ActiveSession*/ distinct s.inst_id i#, s.username, s.SID SID, s.osuser, s.machine,DECODE(S.WAIT_TIME, 0, S.EVENT, 'CPU') ACTION,

s.sql_id, SUBSTR(DECODE(SS.SQL_TEXT, NULL, AA.NAME, SS.SQL_TEXT), 1, 1000) SQLTEXT,s.logon_time,s.p1text, S.P1, s.p2text, S.P2, s.p3text, S.P3

FROM GV$SESSION S, GV$SQLSTATS SS, AUDIT_ACTIONS AA

WHERE  S.STATUS = 'ACTIVE' AND  S.SQL_ID = SS.SQL_ID (+) AND AA.ACTION = S.COMMAND and s.type != 'BACKGROUND' AND S.TYPE = 'USER' 

and s.username  NOT in ('SYS','SYSMAN','DBSNMP','GGATE')

--AND username in 'USER1'

--and DECODE(S.WAIT_TIME, 0, S.EVENT, 'CPU') like '%cell single block physical read%'

--and lower(ss.sql_text) like lower('%parallel%')

--and s.sid=4588 

--and s.machine like '%USER1%'

--and s.sql_id ='ccwg0nqr1zbu7'

ORDER BY username,sql_id;

 

select /* 2.Total_ActiveSessions*/ USERNAME,count(*) from gv$session where  status='ACTIVE' group by USERNAME order by count(*) desc;

 

select /* 3.Total_Session*/ username,status, count(*) from gv$session group by username,status order by count(*) desc;

 

Select /*4.Blocking_session*/ inst_id,blocking_session, sid, serial#, sql_id, wait_class, seconds_in_wait, username,STATUS,SCHEMANAME,OSUSER,MACHINE,PROGRAM,TYPE,LOGON_TIME  

From gv$session where blocking_session is not NULL and type not like 'BACKGROUND' order by inst_id;

 

Khi gặp tải cao thì kill bớt, kill lock theo 2.9, giải quyết tận gốc phải tối ưu CSDL.

3.3. Theo dõi trạng thái các resource

Login vào máy chủ database với user “grid”, chạy các lệnh sau:

$ cd $ORACLE_HOME/bin

$ ./crsctl stat res -t

ü  Các resource ora.ons; ora.diskmon không cần check

ü  Các resource phải ở trạng thái ONLINE

ü  Trường hợp OFFLINE thì thực hiện lệnh start resource theo mục “5.2.5 Start/Stop Resource”

Ví dụ:                                                                                                           

3.4. Kiểm tra trạng thái Listener

Login vào máy chủ database với user “grid”

-         Chạy lệnh sau để kiểm tra trạng thái listener:

$ srvctl status listener

ü  Kết quả trả về “LISTENER is running on” thì người dùng có thể kết nối được đến Database. Ví dụ dưới đây là hiển thị trang thái Listener của Database RAC và Database đơn.

-         Hoặc chúng ta có thể chạy lệnh sau để kiểm tra:

$ lsnrctl status

--> Trường hợp listener bị stop hoặc disable thì thực hiện theo mục “2.1.4 Start/Stop Oracle listener”

3.5. Kiểm tra trạng thái ASM

Login vào máy chủ database với user “grid”

-         Để kiểm tra trạng thái tất cả ASM trên database, câu lệnh này sử dụng được cho cả Database RAC và Database đơn:

$ srvctl status asm -detail

ü  Kết quả trả về: “ASM is running” nghĩa là ASM đang hoạt động

Ví dụ:

$ srvctl status asm -detail

-         Để kiểm tra trạng thái ASM trên 1 node RAC chạy lệnh theo cú pháp sau:

$ srvctl status asm -node <DB server> -detail

ü  Trong đó: <DB server>  là tên của máy chủ database tương ứng. mục “5. Danh sách máy chủ quản trị”

ü  Kết quả trả về: “ASM is running” nghĩa là ASM đang hoạt động

ü  Câu lệnh này thường dùng cho RAC

Ví dụ:

$ srvctl status asm -node csdl01 -detail 

--> Trường hợp ASM bị shutdown thì thực hiện theo mục “2.1.3 Start/Shutdown ASM”

3.6. Kiểm tra hoạt động Database

Login vào máy chủ database với user “oracle” và chạy lệnh sau:

$ cd $ORACLE_HOME/bin

-         Chạy lệnh theo cú pháp sau và thay giá trị tham số tương ứng:

$ srvctl status database -d <DB Name>

Ví dụ:

$ srvctl status database -d CRM

 

--> Trường hợp Database bị shutdown thì thực hiện theo mục “2.1.2 Start/Shutdown Oracle database”

3.7. Kiểm tra trạng thái Instance của Database

Login vào máy chủ database với user “oracle”, chạy lệnh sau:

$ sqlplus /as sysdba

SQL>select instance_name, status from gv$instance;

ü  Status = OPEN: nghĩa là database sẵn sàng cho người dùng truy cập bình thường

ü  Status<>OPEN: Nghĩa là database chưa sẵn sàng cho người dùng.

3.8. Kiểm tra log cluster

Login vào máy chủ database với user “grid” thực hiện các lệnh theo cú pháp sau và thay các biến phù hợp:

-         Kiểm tra log CRS

$ cat $ORACLE_BASE/diag/crs/<DB server>/crs/trace/alert.log |grep "Failed\|ORA-\|Ora-\|TNS-\|Error\|error\|Fatal\|fatal"

Ví dụ:

$ cat $ORACLE_BASE/diag/crs/csdl01/crs/trace/alert.log |grep "Failed\|ORA-\|Ora-\|TNS-\|Error\|error\|Fatal\|fatal"

--> Với kết quả trả về, tùy theo từng lỗi cụ thể để có phương án phù hợp.

-         Kiểm tra log ASM

$ more $ORACLE_BASE/diag/asm/+asm/<Instance ASM>/trace/*alert*.log "Failed\|ORA-\|Ora-\|TNS-\|Error\|error\|Fatal\|fatal"

Ví dụ:

$ more $ORACLE_BASE/diag/asm/+asm/+ASM1/trace/*alert*.log "Failed\|ORA-\|Ora-\|TNS-\|Error\|error\|Fatal\|fatal"

--> Với kết quả trả về, tùy theo từng lỗi cụ thể để có phương án phù hợp.

3.9. Kiểm tra dung lượng ASM Group

Login vào máy chủ database với user “oracle”

-         Thực hiện các câu lệnh sau:

$sqlplus / as sysdba

SQL> Select name, type, total_mb, free_mb,Round((total_mb-free_mb)*100/total_mb,2) PCT_Used,  required_mirror_free_mb required_mirror from v$asm_diskgroup;

--> Nếu có Diskgroup nào mà giá trị %PCT_Used>90% thì xem xét việc tăng thêm dung lượng cho Diskgroup này.

3.10. Kiểm tra dung lượng Tablespace

Login vào máy chủ database với user “oracle”

-         Thực hiện các câu lệnh sau:

SELECT  a.tablespace_name,100 - ROUND ( (NVL (b.bytes_free, 0) / a.bytes_alloc) * 100) "%Usage",

    ROUND (a.bytes_alloc / 1024 / 1024) "Size MB",

    ROUND (a.bytes_alloc / 1024 / 1024)- ROUND (NVL (b.bytes_free, 0) / 1024 / 1024) "Used MB",

    ROUND (NVL (b.bytes_free, 0) / 1024 / 1024) "Free MB",

    --ROUND ( (NVL (b.bytes_free, 0) / a.bytes_alloc) * 100) "%Free",

    ROUND (maxbytes / 1048576)  "Max MB",

    round(maxbytes/1048576-(ROUND (a.bytes_alloc / 1024 / 1024)- ROUND (NVL (b.bytes_free, 0) / 1024 / 1024)),0) "Free_MB_Max",

    ROUND (ROUND ( (a.bytes_alloc - NVL (b.bytes_free, 0)) / 1024 / 1024)/  ROUND (maxbytes / 1048576) * 100) "%Used of Max"

    FROM (SELECT f.tablespace_name, SUM (f.bytes) bytes_alloc,  SUM (DECODE (f.autoextensible, 'YES', f.maxbytes, 'NO', f.bytes)) maxbytes

            FROM dba_data_files f

            GROUP BY tablespace_name) a,

        (SELECT f.tablespace_name, SUM (f.bytes) bytes_free  FROM dba_free_space f  GROUP BY tablespace_name) b

 WHERE a.tablespace_name = b.tablespace_name(+)  and  (a.tablespace_name in ('TEMP1','DATA201511','DATA2016','INDX','INDX2016'))

 order by "%Used of Max" desc;

Hoặc câu sau:

$sqlplus / as sysdba

SQL>set pages 80

set lin 120

set echo off

set feed off

column PCT format 999.99

column tbspce format A30

col container for a30

select substr(f.tablespace_name,1,30) tbspce,

  round(f.tsbytes/(1024*1024),0) "ALLOCATED(MB)",

  round(nvl(s.segbytes,0)/(1024*1024),0) "USED(MB)",

  round((nvl(s.segbytes,0)/f.tsbytes)*100,2) PCT_Used,

  lower(vc.name) as container

from

   (select con_id,tablespace_name,sum(bytes) tsbytes from cdb_data_files group by con_id,tablespace_name) f,

   (select con_id,tablespace_name,sum(bytes) segbytes from cdb_segments group by con_id,tablespace_name) s,

   v$containers vc

where f.con_id=s.con_id(+)

  and f.tablespace_name=s.tablespace_name(+)

  and f.con_id=vc.con_id

order by container, tbspce;

 

--> Nếu có tablespace nào mà giá trị PCT_Used (% sử dụng) >90% thì xem xét tăng thêm dung lượng cho những tablespace này.

3.11. Kiểm tra dung lượng mountpoint

$df -h   

Giá trị trả về: User% <=80 là tốt, lớn hơn cần dọn dẹp bớt log, các file không cần thiết.

3.12. Kiểm tra Invalid Object

Login vào máy chủ database với user “oracle”

-         Thực hiện các câu lệnh sau:

$sqlplus / as sysdba

SQL> select owner,object_type, object_name,status from   dba_objects where  status = 'invalid' order by owner, object_type, object_name;

--> Thực hiện compile các object bị “invalid” này, theo mục “2.12. Complie Object”

3.13. Kiểm tra index unusable

Login vào máy chủ database với user “oracle”

-         Thực hiện các câu lệnh sau:

$sqlplus / as sysdba

SQL> Select idxp.index_name, idxp.partition_name, idxp.status  from dba_ind_partitions idxp where idxp.status<>'usable'

union all

select idx.index_name,idx.table_name,idx.status from dba_indexes idx where idx.partitioned='no' and idx.status not in ('n/a','valid');

--> Thực hiện compile các object bị “invalid” này, theo mục “2.11.Rebuild Index”

3.14. Kiểm tra các table thiếu statistic

- Bảng partition: (trong TOAD dùng F4 --> partition để check)

select table_name, partition_name, last_analyzed from DBA_TAB_PARTITIONS where trunc(last_analyzed) > sysdate-7

--and table_owner=‘TEST_OWNER’ and table_name like upper(‘TEST_TAB1’)

order by last_analyzed desc;

 

select owner, table_name, partition_name,last_analyzed  from DBA_TAB_STATISTICS where

trunc(last_analyzed) > sysdate-7

--and owner=‘TEST_OWNER’ and table_name =‘TEST_TAB1’

order by last_analyzed desc;

-          Bảng ko partition:

select owner, table_name,last_analyzed  from dba_tables where

--owner=‘TEST_OWNER’ and

-- table_name like upper('TEST_TAB1') and

trunc(last_analyzed) > sysdate-7

order by last_analyzed desc;

 

select owner, table_name, partition_name,last_analyzed  from DBA_TAB_STATISTICS

where

--owner=‘TEST_OWNER’ and table_name =‘TEST_TAB1’ and

trunc(last_analyzed) > sysdate-7

order by last_analyzed desc;

--> Thực hiện analyse statistic cho các bảng này như mục “2.17.Gather statistics”

3.15. Checklist kiểm tra đảm bảo hệ thống hoạt động bình thường

STT

Nội dung kiểm tra

Phương pháp thực hiện

Kết quả

Đánh giá

1

Kiểm tra log của Database

Truy nhập với user ‘oracle’chạy lệnh và thay tham số phù hợp:

$tail -1000f $ORACLE_BASE/diag/rdbms/<DB name>/<Instance name>/trace/alert_<Instance name>.log

Giá trị trả về:

- Không có các giá trị Error, Fatal

Đạt

  Không đạt

2

Kiểm tra active session, session, blocking session

SELECT /*1.ActiveSession*/ distinct s.inst_id i#, s.username, s.SID SID, s.osuser, s.machine,DECODE(S.WAIT_TIME, 0, S.EVENT, 'CPU') ACTION,

s.sql_id, SUBSTR(DECODE(SS.SQL_TEXT, NULL, AA.NAME, SS.SQL_TEXT), 1, 1000) SQLTEXT,s.logon_time,s.p1text, S.P1, s.p2text, S.P2, s.p3text, S.P3

FROM GV$SESSION S, GV$SQLSTATS SS, AUDIT_ACTIONS AA

WHERE  S.STATUS = 'ACTIVE' AND  S.SQL_ID = SS.SQL_ID (+) AND AA.ACTION = S.COMMAND and s.type != 'BACKGROUND' AND S.TYPE = 'USER' 

and s.username  NOT in ('SYS','SYSMAN','DBSNMP','GGATE')

--AND username in 'USER1'

--and DECODE(S.WAIT_TIME, 0, S.EVENT, 'CPU') like '%cell single block physical read%'

--and lower(ss.sql_text) like lower('%parallel%')

--and s.sid=4588 

--and s.machine like '%USER1%'

--and s.sql_id ='ccwg0nqr1zbu7'

ORDER BY username,sql_id;

 

select /* 2.Total_ActiveSessioins*/ USERNAME,count(*) from gv$session where  status='ACTIVE' group by USERNAME order by count(*) desc;

 

select /* 3.Total_Session*/ username,status, count(*) from gv$session group by username,status order by count(*) desc;

 

Select /*4.Blocking_session*/ inst_id,blocking_session, sid, serial#, sql_id, wait_class, seconds_in_wait, username,STATUS,SCHEMANAME,OSUSER,MACHINE,PROGRAM,TYPE,LOGON_TIME  

From gv$session where blocking_session is not NULL and type not like 'BACKGROUND' order by inst_id;

Active, session trong ngưỡng, lock nhỏ (tuỳ từng hệ thống)

Đạt

  Không đạt

3

Kiểm tra trạng thái của resource

Truy nhập với user ‘grid’, chạy lệnh:

$ cd $ORACLE_HOME/bin

$ ./crsctl stat res –t

Giá trị trả về:

- Các resource ora.ons; ora.diskmon không cần check

- Các resource phải ở trạng thái ONLINE

 

Đạt

  Không đạt

4

Kiểm tra trạng thái listener

Truy nhập với user ‘grid’, chạy lệnh:

$ cd $ORACLE_HOME/bin

$ ./srvctl status listener

Giá trị trả về:

- Kết quả trả về “LISTENER is running on”

- Instance READY

 

Đạt

  Không đạt

5

Kiểm tra trạng thái ASM

Truy nhập với user ‘grid’, chạy lệnh:

$ srvctl status asm –detail

Giá trị trả về:

- ASM is running”

Đạt

  Không đạt

6

Kiểm tra hoạt động Database

Truy nhập với user ‘oracle’, chạy lệnh:

$ cd $ORACLE_HOME/bin

$ srvctl status asm –detail

Giá trị trả về:

- Database is running”

Đạt

  Không đạt

7

Kiểm tra trạng thái Instance Database

Truy nhập với user ‘oracle’, chạy lệnh:

$ sqlplus /as sysdba

SQL>select instance_name, status from gv$instance;

Giá trị trả về:

- Trạng thái: Open

Đạt

  Không đạt

8

Kiểm tra log của Cluster

Truy nhập với user ‘grid’ chạy lệnh và thay tham số phù hợp:

$ $tail -1000f $ORACLE_BASE/diag/crs/<DB server>/crs/trace/alert.log

$ tail -1000f $ORACLE_BASE/diag/asm/+asm/<Instance ASM>/trace/*alert*.log

Giá trị trả về:

- Không có các giá trị Error, Fatal

Đạt

  Không đạt

9

Kiểm tra dung lượng ASM Diskgroup

Truy nhập với user ‘oracle’, chạy lệnh

$sqlplus / as sysdba

SQL> Select name, type, total_mb, free_mb, (total_mb-free_mb)/total_mb) as PCT, required_mirror_free_mb,

usable_file_mb from v$asm_diskgroup;

Giá trị trả về:

- Các giá trị PCT <=90%

Đạt

  Không đạt

10

Kiểm tra dung lượng Tablespace

Truy nhập với user ‘oracle’, chạy lệnh:

SELECT  a.tablespace_name,100 - ROUND ( (NVL (b.bytes_free, 0) / a.bytes_alloc) * 100) "%Usage",   ROUND

(a.bytes_alloc / 1024 / 1024/1024) "Size_GB",   ROUND (NVL (b.bytes_free, 0) / 1024 / 1024/1024) "Free_GB",

   (ROUND (a.bytes_alloc / 1024 / 1024/1024)- ROUND (NVL (b.bytes_free, 0) / 1024 / 1024/1024)) "Used_GB", ROUND ( (NVL (b.bytes_free, 0) / a.bytes_alloc) * 100) "%Free", ROUND (maxbytes / 1048576/1024)  "Max_GB",

   ROUND (maxbytes / 1048576/1024)- (ROUND (a.bytes_alloc / 1024 / 1024/1024)- ROUND (NVL (b.bytes_free, 0) / 1024 / 1024/1024)) "Free_Max_GB",

    ROUND (ROUND ( (a.bytes_alloc - NVL (b.bytes_free, 0)) / 1024 / 1024/1024)/  ROUND (maxbytes / 1048576/1024) * 100) "%Used of Max"

  FROM (  SELECT f.tablespace_name, SUM (f.bytes) bytes_alloc,  SUM (DECODE (f.autoextensible, 'YES', f.maxbytes, 'NO', f.bytes)) maxbytes

            FROM dba_data_files f

     GROUP BY tablespace_name) a,

    (  SELECT f.tablespace_name, SUM (f.bytes) bytes_free  FROM dba_free_space f  GROUP BY tablespace_name) b

 WHERE a.tablespace_name = b.tablespace_name(+)

 --and a.tablespace_name in ('SH_ICC202008')

 and ROUND (maxbytes / 1048576/1024) -   (ROUND (a.bytes_alloc / 1024 / 1024/1024)- ROUND (NVL (b.bytes_free, 0) / 1024 / 1024/1024)) <500

 and ROUND (ROUND ( (a.bytes_alloc - NVL (b.bytes_free, 0)) / 1024 / 1024/1024)/  ROUND (maxbytes / 1048576/1024) * 100)  > 90

 order by "%Used of Max" desc;

hoặc

SQL> select substr(f.tablespace_name,1,30) tbspce,

     round(f.tsbytes/(1024*1024),0) "ALLOCATED(MB)", round(nvl(s.segbytes,0)/(1024*1024),0) "USED(MB)", round((nvl(s.segbytes,0)/f.tsbytes)*100,2) PCT,

     lower(vc.name) as container

from

   (select con_id,tablespace_name,sum(bytes) tsbytes from cdb_data_files group by con_id,tablespace_name) f,

   (select con_id,tablespace_name,sum(bytes) segbytes from cdb_segments group by con_id,tablespace_name) s,

   v$containers vc

where f.con_id=s.con_id(+)

  and f.tablespace_name=s.tablespace_name(+)

  and f.con_id=vc.con_id

order by container, tbspce;

Giá trị trả về:

- Các giá trị PCT <=90%

Đạt

  Không đạt

11

Kiểm tra dung lượng mountpoint

Truy nhập với user ‘root’, chạy lệnh:

$df -h

Giá trị trả về:

- User% <=90

Đạt

  Không đạt

12

Kiểm tra invalid object

select owner,object_type, object_name,status from   dba_objects where  status = 'invalid' order by owner, object_type, object_name;

Không có invalid object

Đạt

  Không đạt

13

Kiểm tra index unusable

SQL> Select idxp.index_name, idxp.partition_name, idxp.status  from dba_ind_partitions idxp where idxp.status<>'usable'

union all

select idx.index_name,idx.table_name,idx.status from dba_indexes idx where idx.partitioned='no' and idx.status not in ('n/a','valid');

Không có index unusable hoặc index đó không sử dụng

Đạt

  Không đạt

14

Kiểm tra thông tin statistic

select table_name, partition_name, last_analyzed from DBA_TAB_PARTITIONS where trunc(last_analyzed) > sysdate-7

--and table_owner=‘TEST_OWNER’ and table_name like upper(‘TEST_TAB1’)

order by last_analyzed desc;

 

select owner, table_name, partition_name,last_analyzed  from DBA_TAB_STATISTICS where

trunc(last_analyzed) > sysdate-7

--and owner=‘TEST_OWNER’ and table_name =‘TEST_TAB1’

order by last_analyzed desc;

-          Bảng ko partition:

select owner, table_name,last_analyzed  from dba_tables where

--owner=‘TEST_OWNER’ and

-- table_name like upper('TEST_TAB1') and

trunc(last_analyzed) > sysdate-7

order by last_analyzed desc;

 

select owner, table_name, partition_name,last_analyzed  from DBA_TAB_STATISTICS

where

--owner=‘TEST_OWNER’ and table_name =‘TEST_TAB1’ and

trunc(last_analyzed) > sysdate-7

order by last_analyzed desc;

Ngày hiện tại với bảng partition

Bảng không partition có thể chậm hơn 10 ngày

Đạt

  Không đạt

=============================
* 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: 0902912888
⚡️ Skype: tranbinh48ca
👨 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

=============================
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,khóa học pl/sql, 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 dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master