DB Query Indo
DB Query Indo
Database Information
Commands and Scripts with Examples
Asfaw Gedamu
Querying Database Information
This guide outlines procedures and scripts for querying various database information using SQL
commands and scripts.
Note: Replace <username> and <password> with your actual credentials and adjust commands
based on your specific database environment.
Privileges Required:
Most of the following queries require SELECT privilege on relevant tables and views. Some
queries might require additional privileges depending on the specific database and desired
information.
Comparison:
• Focus: Script 1 is more specific, targeting relevant information for analyzing redo log
members. Script 2 provides comprehensive details but might be overwhelming for quick
analysis.
• Readability: Script 1 enhances readability with formatting and filtering, while Script 2
requires scrolling through potentially irrelevant data.
• Performance: Script 1 might be slightly slower due to filtering and joining tables, while
Script 2 is faster as it retrieves all data directly.
Choosing the optimal script depends on your specific needs:
• If you need a quick overview of all redo log members: Use Script 2.
• If you want to focus on specific details and improve readability: Use Script 1.
Additional considerations:
Script 1:
Script 2 :
Script 1:
set heading off;
set echo off;
Set pages 999;
set long 90000;
spool ddl_tablespace.sql
select dbms_metadata.get_ddl('TABLESPACE',tb.tablespace_name)
from dba_tablespaces tb;
spool off
Script 2 :
SELECT dbms_metadata.get_ddl('TABLESPACE', tablespace_name) AS
ddl
FROM dba_tablespaces;
Script 1:
set feedback off pages 0 long 900000 lines 20000 pagesize 20000
serveroutput on
accept USERNAME prompt "Enter username :"
--This line add a semicolon at the end of each statement
execute
dbms_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFOR
M,'SQLTERMINATOR',true);
-- This will generate the DDL for the user and add his
objects,system and role grants
SELECT DBMS_METADATA.GET_DDL('USER',username) as script from
DBA_USERS where username='&username'
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT',grantee)as
script from DBA_SYS_PRIVS where grantee='&username' and rownum=1
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT',grantee)as
script from DBA_ROLE_PRIVS where grantee='&username' and
rownum=1
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT',grantee)as
script from DBA_TAB_PRIVS where grantee='&username' and
rownum=1;
Script 2:
SELECT * FROM user_grants;
Script 1:
Script 1:
Script 1:
set lines 200
COL ACL_OWNER FOR A12
COL ACL FOR A67
COL HOST FOR A34
col PRINCIPAL for a20
col PRIVILEGE for a13
select ACL_OWNER,ACL,HOST,LOWER_PORT,UPPER_PORT FROM
dba_network_acls;
select ACL_OWNER,ACL,PRINCIPAL,PRIVILEGE from
dba_network_acl_privileges;
Script 2:
Script 1:
set lines 299
SELECT TO_CHAR(TRUNC(FIRST_TIME),'Mon DD') "DG Date",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'00',1,0)),'9999')
"12AM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'01',1,0)),'9999')
"01AM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'02',1,0)),'9999')
"02AM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'03',1,0)),'9999')
"03AM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'04',1,0)),'9999')
"04AM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'05',1,0)),'9999')
"05AM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'06',1,0)),'9999')
"06AM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'07',1,0)),'9999')
"07AM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'08',1,0)),'9999')
"08AM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'09',1,0)),'9999')
"09AM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'10',1,0)),'9999')
"10AM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'11',1,0)),'9999')
"11AM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'12',1,0)),'9999')
"12PM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'13',1,0)),'9999')
"1PM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'14',1,0)),'9999')
"2PM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'15',1,0)),'9999')
"3PM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'16',1,0)),'9999')
"4PM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'17',1,0)),'9999')
"5PM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'18',1,0)),'9999')
"6PM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'19',1,0)),'9999')
"7PM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'20',1,0)),'9999')
"8PM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'21',1,0)),'9999')
"9PM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'22',1,0)),'9999')
"10PM",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'23',1,0)),'9999')
"11PM"
FROM V$LOG_HISTORY
GROUP BY TRUNC(FIRST_TIME)
ORDER BY TRUNC(FIRST_TIME) DESC
/
Script 2:
Script 1:
Script 1:
Script 2:
Script 1:
Script 2:
Script 1:
Script 2:
Script 1:
Script 2:
Script 1:
Script 2:
SELECT SYSTIMESTAMP - startup_time AS uptime FROM v$instance;
Script 1:
Script 2:
SELECT TO_CHAR(dbms_utility.SCN_TO_TIMESTAMP(<scn_value>),
'YYYY-MM-DD HH24:MI:SS') AS timestamp;
SELECT dbms_utility.SCN_TO_NUMBER(TO_CHAR(SYSDATE,
'YYYYMMDDHH24MISS')) AS scn;
Script:
-- Disable
BEGIN
FOR t IN (SELECT * FROM user_triggers) LOOP
EXECUTE DBMS_METADATA.DISABLE_TRIGGER(t.owner,
t.trigger_name);
END LOOP;
END;
/
-- Enable
BEGIN
FOR t IN (SELECT * FROM user_triggers) LOOP
EXECUTE DBMS_METADATA.ENABLE_TRIGGER(t.owner,
t.trigger_name);
END LOOP;
END;
/
Script 1:
select table_name,
to_number(extractvalue(dbms_xmlgen.getXMLtype('select /*+
PARALLEL(8) */ count(*) cnt from
"&&SCHEMA_NAME".'||table_name),'/ROWSET/ROW/CNT'))
rows_in_table from dba_TABLES
where owner='&&SCHEMA_NAME';
Script 2:
Script 1:
Script 2:
Script 1:
Script 2:
Script 1:
Script 2:
-- Oracle:
SELECT * FROM dba_registry WHERE KEY LIKE '%Patch%' OR KEY LIKE
'%Bundle%';
-- SQL Server:
SELECT * FROM sys.sql_modules m
INNER JOIN sys.extended_properties ep ON m.object_id =
ep.major_id
WHERE ep.name = N'MS_SQLServer_PatchLevel';
Optimization: Filter results based on keywords like "Patch" or "Bundle" in Oracle to improve
efficiency.
Script 1:
Script 2:
-- Oracle:
DECLARE
CURSOR c_orphan_jobs IS
SELECT job_name
FROM dba_datapump_jobs
WHERE status NOT IN ('SUCCEEDED', 'FAILED', 'STOPPED');
BEGIN
FOR rec IN c_orphan_jobs LOOP
DBMS_SCHEDULER.DROP_JOB(job_name => rec.job_name);
END LOOP;
END;
/
-- SQL Server:
-- Use Management Studio or PowerShell cmdlets for cleanup.
21. Installed RDBMS Components:
Script 1:
Script 2:
-- Oracle:
SELECT * FROM dba_registry WHERE KEY LIKE '%Component%';
-- SQL Server:
SELECT SERVERPROPERTY('ProductVersion'),
SERVERPROPERTY('ProductVersionFull')
Script 1:
Script 2:
-- Oracle:
SELECT * FROM nls_database_parameters;
-- SQL Server:
SELECT SERVERPROPERTY('Collation_Name')
23. View/Modify AWR Retention:
Script 1:
Script 2:
-- Oracle:
SELECT * FROM dba_retention_defs WHERE retention_name = 'AWR';
-- SQL Server:
-- Use Management Studio or PowerShell cmdlets for
configuration.
Script 1:
Script 2:
-- Oracle:
SELECT DBMS_UNDO.ESTIMATE_UNDO_RETENTION_SIZE(<retention_days>)
AS est_size_mb
FROM DUAL;
-- SQL Server:
-- Use built-in tools or recommendations from Microsoft.
Script 1:
Script 2:
-- Oracle:
DBMS_SNAPSHOT.DROP(<snapshot_id>);
-- SQL Server:
-- Use Management Studio or PowerShell cmdlets for cleanup.
Script 1:
Script 2:
-- Oracle:
ALTER SYSTEM SET "_optimizer_mvwb_size" = <new_size>;
-- SQL Server:
-- Use Management Studio or PowerShell cmdlets for
configuration.
Script 1:
Script 2:
-- Oracle:
SELECT * FROM dba_db_links;
-- SQL Server:
SELECT * FROM sys.linked_servers;
Script 1:
SELECT le.leseq "Current log sequence No",
100*cp.cpodr_bno/le.lesiz "Percent Full",
cp.cpodr_bno "Current Block No",
le.lesiz "Size of Log in Blocks"
FROM x$kcccp cp, x$kccle le
WHERE le.leseq =CP.cpodr_seq
AND bitand(le.leflg,24) = 8
/
Script 2:
-- Oracle:
SELECT (NVL(SUM(CASE WHEN archived = 'NO' THEN bytes ELSE 0
END), 0) / SUM(bytes)) * 100 AS pct_used
FROM v$logfile;
-- SQL Server:
-- Use DMV (Dynamic Management Views) for monitoring.
Script 1:
select * from (
select c.table_name, co.column_name, co.position column_position
from user_constraints c, user_cons_columns co
where c.constraint_name = co.constraint_name
and c.constraint_type = 'R'
minus
select ui.table_name, uic.column_name, uic.column_position
from user_indexes ui, user_ind_columns uic
where ui.index_name = uic.index_name
)
order by table_name, column_position;
select
a.constraint_name cons_name
,a.table_name tab_name
,b.column_name cons_column
,nvl(c.column_name,'***No Index***') ind_column
from user_constraints a
join
user_cons_columns b on a.constraint_name = b.constraint_name
left outer join
user_ind_columns c on b.column_name = c.column_name
and b.table_name = c.table_name
where constraint_type = 'R'
order by 2,1;
Script 2:
-- Oracle:
SELECT tc.table_name, c.column_name
FROM user_tables tc
JOIN user_constraints uc ON tc.table_name = uc.table_name
Script 1:
set pagesize 200
set lines 200
col name for a21
col stat_name for a25
col value for a13
col comments for a56
select STAT_NAME,to_char(VALUE) as VALUE ,COMMENTS from v$osstat
where
stat_name IN ('NUM_CPUS','NUM_CPU_CORES','NUM_CPU_SOCKETS')
union
select STAT_NAME,VALUE/1024/1024/1024 || ' GB' ,COMMENTS from
v$osstat where stat_name IN ('PHYSICAL_MEMORY_BYTES');
Script 2:
Optimizations:
Script 1:
Script 2:
-- Oracle:
SELECT * FROM v$system_event WHERE name = 'instance
incarnation';
-- SQL Server:
SELECT SERVERPROPERTY('ServerVersionInfo') -- Information
includes incarnation ID
Script 1:
Script 2:
-- Oracle:
SELECT * FROM nls_database_parameters WHERE parameter =
'TIME_ZONE';
-- SQL Server:
SELECT @@SERVERPROPERTY('timezoneoffset') -- Offset from UTC in
minutes
Additional Considerations:
• Security: Ensure you have the necessary privileges to execute the provided queries.
• Database version: The specific syntax and available views/functions might differ
slightly between database versions.
• Alternative methods: Explore management tools or vendor-specific utilities for
comprehensive performance and configuration information.
By following these guidelines and considering optimization techniques, you can efficiently
retrieve the desired database information while minimizing resource consumption.