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é