Thứ Hai, 24 tháng 7, 2023

Tổng hợp 30 câu truy vấn hữu ích trong Oracle

Chào các bạn, hôm nay vô tình đọc được một bài tổng hợp hơn 40 câu truy vấn hữu ích trong Oracle khá hay nên mình dịch lại và chia sẻ với các bạn, đây là những câu truy vấn mà mọi DBA nào cũng phải lưu lại vì trong quá trình quản lý Oracle sẽ phải sử dụng đến, đó là những câu truy vấn liên quan đến máy chủ server, trạng thái thực thi, tính kích thước database, ...

Mục lục

  • I. Oracle date/time queries
    • 1/ Lấy ngày đầu tiên của tháng
    • 2/ Lấy ngày cuối cùng của tháng
    • 3/ Lấy ngày đầu tiên của năm
    • 4/ Lấy ngày cuối cùng của năm
    • 5/ Tính số lượng ngày của tháng
    • 6/ Tính số ngày đã trôi qua trong tháng
    • 7/ Tính số ngày giữa hai ngày
    • 8/ Hiển thị ngày bắt đầu và ngày kết thúc của từng tháng trong năm
    • 9/ Tính sô giây đã trôi qua trong ngày
    • 10/ Tính số giây còn lại trong ngày
  • II. Oracle data dictionary queries
    • 11/ Kiểm tra table đã tồn tại trong database
    • 12/ Kiểm tra culumn đã tồn tại trong table 
    • 13/ Hiển thị cấu trúc table
    • 14/ Lấy tên của shema hiện tại
    • 15/ Thay đổi Shema hiện tại
  • III. Database administration queries
    • 16/ Hiển thị database version
    • 17/ Hiển thị thông tin mặc định của database
    • 18/ Hiển thị thông tin character set
    • 19/ Hiển thị Oracle version
    • 20/ Thay đổi kích thước của bảng mà không cần thêm dữ liệu
    • 21. Kiểm tra bật / tắt tự động cho không gian bảng
    • 22. Thêm dữ liệu vào khoảng trống của bảng
    • 23. Tăng kích thước của tập dữ liệu
    • 24. Kiểm tra kích thước thực tế của dữ liệu
    • 25. Kiểm tra chi tiết kích thước dữ liệu của database
    • 26. Tìm kích thước của SHEMA/ USER
    • 27. Câu SQL cuối cùng thực hiện bởi User
  • IV. Performance related queries
    • 28. CPU được sử dụng bởi User
    • 29. Lấy session id, process id, client process id hiện tại
    • 30. Lấy số lượng Object của mỗi owner

I. Oracle date/time queries

Dưới đây là những lệnh có liên quan đến Date/Time trong Oracle.

1/ Lấy ngày đầu tiên của tháng

1
2
SELECT TRUNC (SYSDATE, 'MONTH') "First day of current month"
    FROM DUAL;

2/ Lấy ngày cuối cùng của tháng

1
2
SELECT TRUNC (LAST_DAY (SYSDATE)) "Last day of current month"
    FROM DUAL;

3/ Lấy ngày đầu tiên của năm

1
SELECT TRUNC (SYSDATE, 'YEAR') "Year First Day" FROM DUAL;

4/ Lấy ngày cuối cùng của năm

1
SELECT ADD_MONTHS (TRUNC (SYSDATE, 'YEAR'), 12) - 1 "Year Last Day" FROM DUAL

5/ Tính số lượng ngày của tháng

1
2
SELECT CAST (TO_CHAR (LAST_DAY (SYSDATE), 'dd') AS INT) number_of_days
  FROM DUAL;

6/ Tính số ngày đã trôi qua trong tháng

1
2
3
4
SELECT SYSDATE,
       LAST_DAY (SYSDATE) "Last",
       LAST_DAY (SYSDATE) - SYSDATE "Days left"
  FROM DUAL;

7/ Tính số ngày giữa hai ngày

1
2
3
4
5
6
7
SELECT ROUND ( (MONTHS_BETWEEN ('01-Feb-2014', '01-Mar-2012') * 30), 0)
          num_of_days
  FROM DUAL;
 
OR
 
SELECT TRUNC(sysdate) - TRUNC(e.hire_date) FROM employees;

8/ Hiển thị ngày bắt đầu và ngày kết thúc của từng tháng trong năm

1
2
3
4
5
6
7
8
9
10
11
SELECT ADD_MONTHS (TRUNC (SYSDATE, 'MONTH'), i) start_date,
       TRUNC (LAST_DAY (ADD_MONTHS (SYSDATE, i))) end_date
  FROM XMLTABLE (
          'for $i in 0 to xs:int(D) return $i'
          PASSING XMLELEMENT (
                     d,
                     FLOOR (
                        MONTHS_BETWEEN (
                           ADD_MONTHS (TRUNC (SYSDATE, 'YEAR') - 1, 12),
                           SYSDATE)))
          COLUMNS i INTEGER PATH '.');

9/ Tính sô giây đã trôi qua trong ngày

1
2
SELECT (SYSDATE - TRUNC (SYSDATE)) * 24 * 60 * 60 num_of_sec_since_morning
  FROM DUAL;

10/ Tính số giây còn lại trong ngày

1
2
SELECT (TRUNC (SYSDATE+1) - SYSDATE) * 24 * 60 * 60 num_of_sec_left
  FROM DUAL;

Lưu ý: Những ví dụ trên sử dụng SYSDATE là ngày hiện tại của hệ thống, nếu bạn muốn tính một ngày khác thì hãy thay đổi giá trị cho biến này nhé.

II. Oracle data dictionary queries

Sau đây là những lệnh hữu ích liên quan đến cấu trúc của database.

11/ Kiểm tra table đã tồn tại trong database

1
2
3
SELECT table_name
  FROM user_tables
 WHERE table_name = 'TABLE_NAME';

12/ Kiểm tra culumn đã tồn tại trong table 

1
2
3
SELECT column_name AS FOUND
  FROM user_tab_cols
 WHERE table_name = 'TABLE_NAME' AND column_name = 'COLUMN_NAME';

13/ Hiển thị cấu trúc table

1
SELECT DBMS_METADATA.get_ddl ('TABLE', 'TABLE_NAME', 'USER_NAME') FROM DUAL;

14/ Lấy tên của shema hiện tại

1
SELECT SYS_CONTEXT ('userenv', 'current_schema') FROM DUAL;

15/ Thay đổi Shema hiện tại

1
ALTER SESSION SET CURRENT_SCHEMA = new_schema;

III. Database administration queries

Các lệnh dành cho Admin quản trị database.

16/ Hiển thị database version

1
SELECT * FROM v$version;

17/ Hiển thị thông tin mặc định của database

1
2
3
4
5
SELECT username,
       profile,
       default_tablespace,
       temporary_tablespace
  FROM dba_users;

18/ Hiển thị thông tin character set

1
SELECT * FROM nls_database_parameters;

19/ Hiển thị Oracle version

1
2
3
SELECT VALUE
  FROM v$system_parameter
 WHERE name = 'compatible';

20/ Thay đổi kích thước của bảng mà không cần thêm dữ liệu

1
ALTER DATABASE DATAFILE '/work/oradata/STARTST/STAR02D.dbf' resize 2000M;

21. Kiểm tra bật / tắt tự động cho không gian bảng

1
2
3
4
5
SELECT SUBSTR (file_name, 1, 50), AUTOEXTENSIBLE FROM dba_data_files;
 
(OR)
 
SELECT tablespace_name, AUTOEXTENSIBLE FROM dba_data_files;

22. Thêm dữ liệu vào khoảng trống của bảng

1
2
ALTER TABLESPACE data01 ADD DATAFILE '/work/oradata/STARTST/data01.dbf'
    SIZE 1000M AUTOEXTEND OFF;

23. Tăng kích thước của tập dữ liệu

1
ALTER DATABASE DATAFILE '/u01/app/Test_data_01.dbf' RESIZE 2G;<br>

24. Kiểm tra kích thước thực tế của dữ liệu

1
SELECT SUM (bytes) / 1024 / 1024 / 1024 AS GB FROM dba_data_files;

25. Kiểm tra chi tiết kích thước dữ liệu của database

1
SELECT SUM (bytes) / 1024 / 1024 / 1024 AS GB FROM dba_segments;<br>

26. Tìm kích thước của SHEMA/ USER

1
2
3
SELECT SUM (bytes / 1024 / 1024) "size"
  FROM dba_segments
 WHERE owner = '&owner';

27. Câu SQL cuối cùng thực hiện bởi User

1
2
3
4
5
6
7
8
9
10
11
SELECT S.USERNAME || '(' || s.sid || ')-' || s.osuser UNAME,
         s.program || '-' || s.terminal || '(' || s.machine || ')' PROG,
         s.sid || '/' || s.serial# sid,
         s.status "Status",
         p.spid,
         sql_text sqltext
    FROM v$sqltext_with_newlines t, V$SESSION s, v$process p
   WHERE     t.address = s.sql_address
         AND p.addr = s.paddr(+)
         AND t.hash_value = s.sql_hash_value
ORDER BY s.sid, t.piece;

IV. Performance related queries

Đây là những câu truy vấn kiểm tra hiệu suất.

28. CPU được sử dụng bởi User

1
2
3
4
5
6
7
8
SELECT ss.username, se.SID, VALUE / 100 cpu_usage_seconds
    FROM v$session ss, v$sesstat se, v$statname sn
   WHERE     se.STATISTIC# = sn.STATISTIC#
         AND NAME LIKE '%CPU used by this session%'
         AND se.SID = ss.SID
         AND ss.status = 'ACTIVE'
         AND ss.username IS NOT NULL
ORDER BY VALUE DESC;

29. Lấy session id, process id, client process id hiện tại

1
2
3
4
5
6
SELECT b.sid,
       b.serial#,
       a.spid processid,
       b.process clientpid
  FROM v$process a, v$session b
 WHERE a.addr = b.paddr AND b.audsid = USERENV ('sessionid');

30. Lấy số lượng Object của mỗi owner

1
2
3
4
SELECT owner, COUNT (owner) number_of_objects
    FROM dba_objects
GROUP BY owner
ORDER BY number_of_objects DESC;

Trên là 30 câu truy vấn SQL hữu ích dành cho người quản trị Oracle Database, các bạn hãy lưu lại để tham khảo nhé

=============================
* 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: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Đị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, ms 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

ĐỌC NHIỀU

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