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

DATABASE ORACLE DỮ LIỆU

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, …

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

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

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

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

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

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

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

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

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

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

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

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

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

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

SELECT table_name
  FROM user_tables
 WHERE table_name = 'TABLE_NAME';

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

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

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

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

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

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

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

SELECT * FROM v$version;

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

SELECT username,
       profile,
       default_tablespace,
       temporary_tablespace
  FROM dba_users;

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

SELECT * FROM nls_database_parameters;

19/ Hiển thị Oracle version

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

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

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

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

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

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

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

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

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

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

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

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

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é

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *