May 17, 2026, 11:40 PM

This commit is contained in:
Paweł Domański
2026-05-18 06:40:19 +00:00
commit 64944cf004
896 changed files with 310709 additions and 0 deletions
@@ -0,0 +1,22 @@
* Migracja bazy LICS z 11g do 19c
** Przygotowania do instalacji
1. instalacja oprogramowania Oracle 11 musi być zainstalowany .NET stary
2. instalacja oprogramowania Oracle 12
3. instalacja oprogramowania Oracle 19c
4. Utworzenie pustej bazy LICS na serwerze docelowym. Baza powinna być utworzona w wersji 11i.
1. Należy bazie docelowej przydzielić 80% pamięci dostępnej na serwerze
2. Należy przydzielić dużo zasobów do FRA, w przeciwnym razie podczas upgrade będzie pojawiał się błąd i operację będzie trzeba powtórzyć
5. Wykonany pełny backup bazy źródłowej
6. Przeniesione pliki backupu na server docelowy
7. odtworzenie bazy LICS na maszynie docelowej - w trybie recovery
1. rman
2. connect target /
3. restore controlfile from 'Z:\backup\LICS_14329_20240701'; -> nalezy wprowadzić poprawny plik z controlfile
4. alter database mount;
5. catalog start with 'Z:\backup'; -> skąd będzie pobierany backup
6. restore database
7. w innej sesji uruchamiamy SQLPlus i wyłączamy plik numer 14
1. alter database datafile 14 offline;
8. recover database using backup controlfile; -> w tym miejscu powinniśmy mieć w odpowiedniej lokalizacji wszystkie pliki logów
9. REM -> nie roimy tego w tym miejsu -> recover database using backup controlfile until cancel;
+27
View File
@@ -0,0 +1,27 @@
# Oracle-Scripts
## Rerpozytoria Oracle na GitHub
[Oracle Examples](https://github.com/oracle/oracle-db-examples)
[Oracle Data Tools](https://github.com/oracle/oracle-db-tools)
[Oracle Sample Schema](https://github.com/oracle/db-sample-schemas)
https://oracle-base.com/dba/scripts
https://oracle-base.com/articles/rac/articles-rac
## Lista skryptów
### Sesje użytkownika
[Top Session](./session/top_sessions.sql)
### Backup
[Backup postęp](./backup/backup_postep.sql)
[Backup RMAN](./backup/backup_rman.sql)
[Klonowanie RMAN](./backup/cloning_rman.md)
@@ -0,0 +1,26 @@
run
{
ALLOCATE CHANNEL ch11 TYPE DISK;
BACKUP AS COMPRESSED BACKUPSET skip inaccessible
FORMAT '/backup/%T_D_%d_DBID_%I_%u_s%s_p%p.bck'
DATABASE
CURRENT CONTROLFILE
FORMAT '/backup/%T_C_%d_DBID_%I_%u.bck'
SPFILE
FORMAT '/backup/%T_S_%d_DBID_%I_%u.bck'
PLUS ARCHIVELOG
FORMAT '/backup/%T_A_%d_DBID_%I_%u_s%s_p%p.bck';
RELEASE CHANNEL ch11;
}
set lines 250 pages 9999
col opname form a40
col operation form a20
col status form a30
alter session set nls_date_format = "YYYY-MM-DD HH24:MI:SS";
 
SELECT sysdate, OPNAME, SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK, start_time, last_update_time, ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE" FROM gV$SESSION_LONGOPS WHERE OPNAME LIKE 'RMAN%' AND OPNAME NOT LIKE '%aggregate%' AND TOTALWORK != 0 AND SOFAR <> TOTALWORK;
@@ -0,0 +1,18 @@
$ rman target / nocatalog
spool log to /tmp/backup.teta.log
run
{
ALLOCATE CHANNEL ch11 TYPE DISK;
BACKUP AS COMPRESSED BACKUPSET skip inaccessible
FORMAT '/backup_teta/%T_D_%d_DBID_%I_%u_s%s_p%p.bck'
DATABASE
CURRENT CONTROLFILE
FORMAT '/backup_teta/%T_C_%d_DBID_%I_%u.bck'
SPFILE
FORMAT '/backup_teta/%T_S_%d_DBID_%I_%u.bck'
PLUS ARCHIVELOG
FORMAT '/backup_teta/%T_A_%d_DBID_%I_%u_s%s_p%p.bck';
RELEASE CHANNEL ch11;
}
@@ -0,0 +1,127 @@
CLONING RMAN FROM A BACKUP IN 10G
[oracle@boss ~]$ cd rmanbackup/
[oracle@boss rmanbackup]$ ls
01nsnp5o_1_1 02nsnp5r_1_1 03nsnp6k_1_1 control_filebkc-1965345038-20121213-01
[oracle@boss rmanbackup]$ vi control_filebkc-1965345038-20121213-01
Now go down and copy the pfile from the backup piece.
Copy the pfile from the backup piece and past it inthe clone db.
[oracle@boss ~]$ mkdir db6
[oracle@boss ~]$ cd db6
[oracle@boss db6]$ mkdir admin oradata
[oracle@boss db6]$ cd admin/
[oracle@boss admin]$ mkdir pfile bdump cdump udump create
[oracle@boss admin]$ cd pfile/
[oracle@boss pfile]$ vi initdb6.ora
[oracle@boss pfile]$ cd ../../oradata/
[oracle@boss oradata]$ mkdir data log ctrl arch
[oracle@boss oradata]$
[oracle@boss oradata]$ ls
arch ctrl data log
[oracle@boss oradata]$
Open the pfile add the db_unique_name=db6.
Change the db_name as same as the source db
background_dump_dest='/home/oracle/db6/admin/bdump/'
compatible='10.2.0'
control_files='/home/oracle/db6/oradata/ctrl/control1.ctrl'
core_dump_dest='/home/oracle/db6/admin/cdump/'
db_name='db2'-- snap db
db_unique_name=db6-- clone db
pga_aggregate_target=500m
sga_target=800m
undo_management='auto'
undo_tablespace='undo'
user_dump_dest='/home/oracle/db6/admin/udump/'
[oracle@boss ~]$ export ORACLE_SID=db6
[oracle@boss ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Dec 13 20:33:39 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> startup pfile='/home/oracle/db6/admin/pfile/initdb6.ora' nomount;
ORACLE instance started.
Total System Global Area 838860800 bytes
Fixed Size 1270244 bytes
Variable Size 213913116 bytes
Database Buffers 620756992 bytes
Redo Buffers 2920448 bytes
SQL>
[oracle@boss ~]$ export ORACLE_SID=db6
[oracle@boss ~]$ rman target /
Recovery Manager: Release 10.2.0.4.0 - Production on Thu Dec 13 20:49:35 2012
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: db2 (not mounted)
RMAN> set dbid=1965345038
executing command: SET DBID
RMAN> restore controlfile from '/home/oracle/rmanbackup/control_filebkc-1965345038-20121213-01';
Starting restore at 13-DEC-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=35 devtype=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time:00:00:01
output filename=/home/oracle/db6/oradata/ctrl/control1.ctrl
Finished restore at 13-DEC-12
RMAN> alter database mount;
database mounted
released channel: ORA_DISK_1
RMAN> run
2> {
3> set newname for datafile 1 to '/home/oracle/db6/oradata/data/system.dbf';
4> set newname for datafile 2 to '/home/oracle/db6/oradata/data/undo.dbf';
5> set newname for datafile 3 to '/home/oracle/db6/oradata/data/sysaux.dbf';
6> sql"alter database rename file ''/home/oracle/db2/oradata/log/log1.log'' to
''/home/oracle/db6/oradata/log/log1.log''";
7> sql"alter database rename file ''/home/oracle/db2/oradata/log/log2.log''to
''/home/oracle/db6/oradata/log/log2.log''";
8> restore database;
9> switch datafile all;
10> recover database;
11> }
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 13-DEC-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /home/oracle/db6/oradata/data/system.dbf
restoring datafile 00002 to /home/oracle/db6/oradata/data/undo.dbf
restoring datafile 00003 to /home/oracle/db6/oradata/data/sysaux.dbf
channel ORA_DISK_1: reading from backup piece
/u01/app/oracle/product/10.2.0/db_1/dbs/0anspjtv_1_1
channel ORA_DISK_1: restored backup piece 1
piece handle=/u01/app/oracle/product/10.2.0/db_1/dbs/0anspjtv_1_1
tag=TAG20121213T202119
channel ORA_DISK_1: restore complete, elapsed time:00:01:16
Finished restore at 13-DEC-12
datafile 1 switched to datafile copy
input datafile copy recid=4 stamp=801956019
filename=/home/oracle/db6/oradata/data/system.dbf
datafile 2 switched to datafile copy
input datafile copy recid=5 stamp=801956019
filename=/home/oracle/db6/oradata/data/undo.dbf
datafile 3 switched to datafile copy
input datafile copy recid=6 stamp=801956019
filename=/home/oracle/db6/oradata/data/sysaux.dbf
Starting recover at 13-DEC-12
using channel ORA_DISK_1
starting media recovery
archive log thread 1 sequence 3 is already on disk as file
/home/oracle/db2/oradata/log/log1.log
archive log filename=/home/oracle/db2/oradata/log/log1.log thread=1 sequence=3
media recovery complete, elapsed time: 00:00:06
Finished recover at 13-DEC-12
RMAN> alter database open resetlogs;
database opened
RMAN>exit
@@ -0,0 +1,44 @@
TTITLE LEFT '% Completed. Aggregate is the overall progress:'
SET LINE 132
SELECT opname, round(sofar/totalwork*100) "% Complete"
FROM gv$session_longops
WHERE opname LIKE 'RMAN%'
AND totalwork != 0
AND sofar <> totalwork
ORDER BY 1;
TTITLE LEFT 'Channels waiting:'
COL client_info FORMAT A15 TRUNC
COL event FORMAT A20 TRUNC
COL state FORMAT A7
COL wait FORMAT 999.90 HEAD "Min waiting"
SELECT s.sid, p.spid, s.client_info, status, event, state, seconds_in_wait/60 wait
FROM gv$process p, gv$session s
WHERE p.addr = s.paddr
AND client_info LIKE 'rman%';
TTITLE LEFT 'Files currently being written to:'
COL filename FORMAT a50
SELECT filename, bytes, io_count
FROM v$backup_async_io
WHERE status='IN PROGRESS'
/
TTITLE OFF
SET HEAD OFF
SELECT 'Throughput: '||
ROUND(SUM(v.value/1024/1024),1) || ' Meg so far @ ' ||
ROUND(SUM(v.value /1024/1024)/NVL((SELECT MIN(elapsed_seconds)
FROM v$session_longops
WHERE opname LIKE 'RMAN: aggregate input'
AND sofar != TOTALWORK
AND elapsed_seconds IS NOT NULL
),SUM(v.value /1024/1024)),2) || ' Meg/sec'
FROM gv$sesstat v, v$statname n, gv$session s
WHERE v.statistic# = n.statistic#
AND n.name = 'physical write total bytes'
AND v.sid = s.sid
AND v.inst_id = s.inst_id
AND s.program LIKE 'rman@%'
GROUP BY n.name
/
SET HEAD ON
@@ -0,0 +1,5 @@
run
{
set archivelog destination to '/tetap/arch/RFC-543';
restore archivelog from logseq=70108 until logseq=70125;
}
@@ -0,0 +1,70 @@
-- -----------------------------------------------------------------------------------
-- File Name : https://oracle-base.com/dba/script_creation/user_ddl.sql
-- Author : Tim Hall
-- Description : Displays the DDL for a specific user.
-- Call Syntax : @user_ddl (username)
-- Last Modified: 07/08/2018
-- -----------------------------------------------------------------------------------
set long 20000 longchunksize 20000 pagesize 0 linesize 1000 feedback off verify off trimspool on
column ddl format a1000
begin
dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'SQLTERMINATOR', true);
dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'PRETTY', true);
end;
/
variable v_username VARCHAR2(30);
exec :v_username := upper('&1');
select dbms_metadata.get_ddl('USER', u.username) AS ddl
from dba_users u
where u.username = :v_username
union all
select dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA', tq.username) AS ddl
from dba_ts_quotas tq
where tq.username = :v_username
and rownum = 1
union all
select dbms_metadata.get_granted_ddl('ROLE_GRANT', rp.grantee) AS ddl
from dba_role_privs rp
where rp.grantee = :v_username
and rownum = 1
union all
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT', sp.grantee) AS ddl
from dba_sys_privs sp
where sp.grantee = :v_username
and rownum = 1
union all
select dbms_metadata.get_granted_ddl('OBJECT_GRANT', tp.grantee) AS ddl
from dba_tab_privs tp
where tp.grantee = :v_username
and rownum = 1
union all
select dbms_metadata.get_granted_ddl('DEFAULT_ROLE', rp.grantee) AS ddl
from dba_role_privs rp
where rp.grantee = :v_username
and rp.default_role = 'YES'
and rownum = 1
union all
select to_clob('/* Start profile creation script in case they are missing') AS ddl
from dba_users u
where u.username = :v_username
and u.profile <> 'DEFAULT'
and rownum = 1
union all
select dbms_metadata.get_ddl('PROFILE', u.profile) AS ddl
from dba_users u
where u.username = :v_username
and u.profile <> 'DEFAULT'
union all
select to_clob('End profile creation script */') AS ddl
from dba_users u
where u.username = :v_username
and u.profile <> 'DEFAULT'
and rownum = 1
/
set linesize 80 pagesize 14 feedback on trimspool on verify on
+215
View File
@@ -0,0 +1,215 @@
#primary database destination folders
echo "enter primary database name"
read primary
mkdir $primary
cd $primary
mkdir admin oradata
cd admin
mkdir pfile create bdump cdump udump
cd ..
cd oradata
mkdir control data log arch
cd
#standby datadase
echo "enter standby database name"
read a
mkdir $a
cd $a
mkdir admin oradata
cd admin
mkdir pfile create bdump cdump udump
cd ..
cd oradata
mkdir control data log arch
cd
#Listener entry for primary and stand by
cd $ORACLE_HOME/network/admin
echo "following listeners currently used"
cat listener.ora |grep SID_LIST_|cut -d "_" -f3
echo "enter new listener name"
read l
for ip in `hostname -i`
do
echo "following ports are curently used in Server"
cat listener.ora | grep PORT|cut -d "=" -f5|cut -c 2-5
echo "port number"
read port
echo "SID_LIST_$l =
(SID_LIST =
(SID_DESC =
(SID_NAME = $primary)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(GLOBAL_DBNAME= $primary)
)
(SID_DESC =
(SID_NAME = $a)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(GLOBAL_DBNAME= $a)
)
)
$l =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = $ip)(PORT = $port))
))
">> listener.ora
cd
lsnrctl start $l
cd $ORACLE_HOME/network/admin
echo "
$primary =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = $ip)(PORT = $port))
)
(CONNECT_DATA =
(SERVICE_NAME = $primary)
)
)
$a =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.54)(PORT = 1585))
)
(CONNECT_DATA =
(SERVICE_NAME = $a)
)
)
">> tnsnames.ora
cd
tnsping $primary 5
tnsping $a 5
cd $ORACLE_HOME/dbs
echo "enter $primary database password"
read pass1
export ORACLE_SID=$primary
orapwd file=orapw$primary password=$pass1 entries=5 force=y
echo "enter $a database password (must be same as primary database password)"
read pass2
export ORACLE_SID=$a
orapwd file=orapw$a password=$pass2 entries=5 force=y
cd
cd $primary/admin/pfile
echo " db_name=$primary
background_dump_dest='/home/oracle/$primary/admin/bdump/'
core_dump_dest='/home/oracle/$primary/admin/cdump/'
user_dump_dest='/home/oracle/$primary/admin/udump/'
control_files='/home/oracle/$primary/oradata/control/ctrl.ctl'
db_unique_name=$primary
fal_client='$primary'
fal_server='$a'
log_archive_dest_1='location=/home/oracle/$primary/oradata/arch/'
log_archive_dest_2='service=$a'
log_file_name_convert='$a','$primary'
remote_login_passwordfile='exclusive'
sga_target=700m
standby_file_management=auto
standby_archive_dest='/home/oracle/$primary/oradata/arch'
db_file_name_convert='$a','$primary'
" >> init$primary.ora
cd
cd $primary/admin/create/
echo "create database $primary
datafile '/home/oracle/$primary/oradata/data/system.dbf' size 300m
sysaux datafile '/home/oracle/$primary/oradata/data/sysaux.dbf' size 300m
logfile group 1 '/home/oracle/$primary/oradata/log/log1.log' size 10m,
group 2 '/home/oracle/$primary/oradata/log/log2.log' size 10m;" >> $primary.sql
cd
export ORACLE_SID=$primary
sqlplus /nolog << eof
conn sys/$pass1 as sysdba
startup pfile='/home/oracle/$primary/admin/pfile/init$primary.ora' nomount;
@/home/oracle/$primary/admin/create/$primary.sql;
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
create spfile from pfile='/home/oracle/$primary/admin/pfile/init$primary.ora';
conn system/manager
@?/sqlplus/admin/pupbld.sql
conn sys/$pass1
alter database close
alter database archivelog;
shut immediate
startup
conn sys/sys as sysdba
spool on tbs1.sql replace
set heading off
select file_name from dba_data_files;
spool off
shut immediate
eof
cd
cd $a/admin/pfile/
echo " db_name=$primary
background_dump_dest='/home/oracle/$a/admin/bdump/'
core_dump_dest='/home/oracle/$a/admin/cdump/'
user_dump_dest='/home/oracle/$a/admin/udump/'
control_files='/home/oracle/$a/oradata/control/ctrl.ctl'
db_unique_name=$a
fal_client='$a'
fal_server='$primary'
log_archive_dest_1='location=/home/oracle/$a/oradata/arch/'
log_archive_dest_2='service=$primary'
log_file_name_convert='$primary','$a'
remote_login_passwordfile='exclusive'
sga_target=700m
standby_file_management=auto
standby_archive_dest='/home/oracle/$a/oradata/arch'
db_file_name_convert='$primary','$a'
" >> init$a.ora
cd
export ORACLE_SID=$a
conn sys/$pass1 as sysdba
startup pfile='/home/oracle/$a/admin/pfile/init$a.ora' nomount
eof
cd
cd /home/oracle/$primar/oradata/data/
cp * /home/oracle/$a/oradata/data/
cd
export ORACLE_SID=$primary
sqlplus /nolog << eof
conn sys/$pass1 as sysdba
startup mount
alter database add standby logfile group 3 '/home/oracle/$a/oradata/log/log3.log' size 10m;
alter database add standby logfile group 4 '/home/oracle/$a/oradata/log/log4.log' size 10m;
alter database create standby controlfile as '/home/oracle/$a/oradata/control/ctrl.ctl';
eof
cd
export ORACLE_SID=$a
sqlplus /nolog << eof
conn sys/$pass2 as sysdba
alter database mount standby database;
eof
done
@@ -0,0 +1,49 @@
These scripts should work on all versions of PostgreSQL up to 9.4
Most have options to specify host and port.
./<script> -h shows all options
cache_hit_ratio.sh -> Shows the cache hit ration for all databases
cancel_all_queries.sh -> Terminates all queries in progress
check_postgresql_log.sh -> greps the postgres log file for ERROR, WARNING and ref's to pg_hba. You will probably need to edit and adjust the directory path and suffix for your cluster.
columns_of_type_x -> Shows all tables and columns with specific character type
connect_count.sh -> Shows connection count for each database
current_locks.sh -> Shows status for all current locks
current_queries.sh -> Shows information on all current queries, will loop continuously unless -x option is specified. -s option specifies sleeptime, default is 5 secs. -i will ignore <IDLE> queries
database_sizes.sh -> shows size of all databases
filename_tables.sh -> shows physical directory, filename, owner & size for all tables in specified database
flip_database_connect.sh -> Flips state of datallowconn for database
get_trans_min_cnt.sh -> shows transaction count per minute for cluster
groups_users.sh -> shows all groups & members in cluster and if group or user is a superuser
index_bloat.sh -> shows index ration to table size for all indexes of all or specified table in database.
index_comments.sh -> shows comments on all or specified index for database
logins_block.sh -> prevents all non-superusers from future logins. MUST be run as user postgres
logins_allow.sh -> re-allows login access to all normal users. MUST be run as user postgres
pg_backup.sh -> generic backup script for postgres database. You will need to edit and adjust for your needs.
pg_runtime.sh -> shows startup and continuous runtime for the cluster
pg_stat_all_indexes.sh -> shows stats and status of all indexes or just for specified table
pg_stat_all_tables.sh -> shows stats for all or specified table
pg_vacuum_time.sh -> Shows total time to vacuum a database
remove_ctrl.sh -> removes control characters from a script. Useful if script was created on a windows PC and then copied to Linux
role_members.sh -> Shows roles and all members
slony_status.sh -> shows status and lag time of slony cluster. Should be run on master node.
table_column_stats.sh -> shows stats for all columns of specified table
table_comments.sh -> shows comments for all or specified table
table_dependents.sh -> shows foreign key constraints for all or specified table
table_in_functions.sh -> shows all functions that reference specified table
table_in_trogger.sh -> shows all triggerss that reference specified table
tables_and_owners.sh -> shows owners and permits on all tables
tables-filenames.sh -> shows physical directory, filename, owner & size for all tables in specified database
table_sizes.sh -> shows tuple count and size for all or specified table
tablespace_use.sh -> shows tablespace used by all or specified table/index
tables_with_column_name.sh -> shows all tables that have a column name LIKE specified column name
tables_with_FKS.sh -> shows all tables taht have a foreign key constraint
tables_with_no_public_grants.sh -> shows tables that have no public grants (restricted table)
triggers_and_constraints.sh -> shows all triggers and called functions for all or specified table
user_table_access_detail.sh -> shows table access for specified user
user_table_access.sh -> shows permit and position in permit for specified user
@@ -0,0 +1,49 @@
#!/bin/bash
# Shows cache hit ratio for all databases
USER=""
PORT=""
DBNAME="postgres"
usage() {
echo "Usage: $0 [-d <dbname> -h <host> -U <user> -p <port>]"
exit 1
}
while getopts "d:h:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
h) HOST="-h $OPTARG"
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
exit 1
fi
psql $USER $HOST $PORT $DBNAME <<_EOF_
SELECT pg_stat_database.datname,
pg_stat_database.blks_read,
pg_stat_database.blks_hit,
round((pg_stat_database.blks_hit::double precision
/ (pg_stat_database.blks_read
+ pg_stat_database.blks_hit
+1)::double precision * 100::double precision)::numeric, 2) AS cachehitratio
FROM pg_stat_database
WHERE pg_stat_database.datname !~ '^(template(0|1)|postgres)$'::text
ORDER BY round((pg_stat_database.blks_hit::double precision
/ (pg_stat_database.blks_read
+ pg_stat_database.blks_hit
+ 1)::double precision * 100::double precision)::numeric, 2) DESC;
_EOF_
@@ -0,0 +1,52 @@
#!/bin/bash
usage() {
echo "Usage: $0 [-h <host> -p <port>]"
echo "-p will default to 5432"
exit 1
}
while getopts "h:p:" OPT;
do case "${OPT}" in
h) HOST="-h $OPTARG"
;;
p) PORT="-p $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
getver()
{
VER=$(psql -t $HOST $PORT -U postgres <<_QRYVER_
SELECT substring(version() from 12 for 1);
_QRYVER_
)
}
cancel_pids()
{
psql -t $HOST $PORT -U postgres <<_QRYVER_
--SELECT pg_cancel_backend($PID)
SELECT pg_terminate_backend($PID)
FROM pg_stat_activity WHERE pg_backend_pid() <> $PID);
_QRYVER_
}
##### MAIN #####
getveri
declare -i VER
if [ "$VER" -lt 9 ]
then
PID="procpid"
else
PID="pid"
fi
cancel_pids
exit 0;
@@ -0,0 +1,35 @@
#!/bin/bash
# if arguments > 0, set count option
if [ $# -eq 0 ]
then
cntflg='-c'
else
cntflg=''
fi
set $(date '+%m%d')
MMDD=$1
#set $(date)
## if day number less than 10, prefix a '0'
#if [ $3 -le 9 ]
# then
# DD=0${3}
# else
# DD=${3}
#fi
set $(date +%m)
MM=${1}
logdir=/var/log/postgresql/
echo "Current error log is: ${logdir}postgresql.${MMDD}"
echo
echo -n "ERROR: "
grep ${cntflg} -i ERROR ${logdir}postgresql.${MMDD}
echo -n "WARNING: "
grep ${cntflg} -i WARNING ${logdir}postgresql.${MMDD}
echo -n "pg_hba: "
grep ${cntflg} -i pg_hba ${logdir}postgresql.${MMDD}
@@ -0,0 +1,77 @@
#!/bin/bash
# Shows tables and columns that are of type specified
PORT=""
USER=""
COLTYPE="?"
usage() {
echo "Usage: $0 -d <dbname> -t <coltype> [-h <host> -U <user> -p <port>]"
exit 1
}
while getopts "d:t:h:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
h) HOST="-h $OPTARG"
;;
p) PORT="-p $OPTARG"
;;
t) COLTYPE="$OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
DBNAME="postgres"
fi
choose_qry ()
{
if [ "$COLTYPE" = "?" ]
then
echo "Usage: $0 -d <dbname> -t <coltype> [-h <host> -U <user> -p <port>]"
echo
echo "Available Data Types"
QRY="SELECT DISTINCT (c.data_type)
FROM information_schema.columns c
ORDER BY c.data_type;"
else
QRY="SELECT quote_ident(c.table_schema) as schema,
quote_ident(c.table_name) as table,
quote_ident(c.column_name) as column,
c.data_type as type,
case when c.data_type LIKE '%char%'
then COALESCE(character_maximum_length::text, 'N/A')
when c.data_type LIKE '%numeric%'
then '(' || c.numeric_precision::text || ', ' || c.numeric_scale::text || ')'
when c.data_type LIKE '%int%'
then c.numeric_precision::text
else COALESCE(character_maximum_length::text, 'N/A')
end as size
FROM information_schema.columns c
WHERE c.table_schema NOT LIKE 'pg_%'
AND c.table_schema NOT LIKE 'information%'
AND c.table_name NOT LIKE 'sql_%'
AND c.data_type LIKE '%$COLTYPE%'
AND c.is_updatable = 'YES'
ORDER BY 1, 2, 3;"
fi
psql $HOST $USER $PORT $DBNAME <<_CODE_
${QRY}
_CODE_
}
choose_qry
@@ -0,0 +1,131 @@
#!/bin/bash
DBNAME="postgres"
USER="-U postgres"
PORT="-p 5432"
usage() {
echo "Usage: $0 [-d <dbname> -h <host> -U <user> -p <port> u]"
exit 1
}
while getopts "d:h:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
h) HOST="-h $OPTARG"
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
set $(date '+%m%d')
MMDD=$1
LOGDIR='/var/log/postgresql'
getver()
{
VER=$(psql $HOST $PORT $USER $DBNAME <<_QUERY_
SELECT version();
_QUERY_
)
#VER=$(cat ${PGDATA}/PG_VERSION)
#use next line only if PGDATA has version in path
#VER=$(echo $PGDATA | cut -d / -f 5)
}
clear
getver
echo "PostgreSQL Version is $VER"
connect_cnts() {
DBLIST=$(psql -q -t $HOST $PORT $USER $DBNAME <<_QUERY_
SELECT d.datname
FROM pg_database d
WHERE datallowconn = TRUE
AND datistemplate = FALSE
ORDER BY 1;
_QUERY_
)
}
get_cnt() {
CNT=$(psql -t $PORT $USER $DBNAME <<_QUERY_
/*
SELECT count(*)
FROM pg_stat_activity
WHERE datname = '$DB';
*/
SELECT usename,
count(*)
FROM pg_stat_activity
WHERE datname = '$DB'
GROUP BY usename;
_QUERY_
)
}
all_count() {
CNT=$(psql -t $PORT $USER $DBNAME <<_QUERY_
SELECT count(*)
FROM pg_stat_activity;
_QUERY_
)
}
###############################################################
# MAIN #
###############################################################
connect_cnts
for DB in $DBLIST;
do
echo -n "$DB "
get_cnt
# grep -E -c "$DB.*connection auth" #LOGDIR/postgresql.${MMDD}
echo -e "\t$CNT"
done
all_count
echo
echo -e "TOTAL \t\t$CNT"
#exit 0
#echo "$(hostname -f) CONNECTION COUNTS"
#echo "Current log file is: $logdir/postgresql.$MMDD"
#echo
#for DB in $DBLIST
# do
# echo -n "$DB: "
# grep 'connection authorized' $LOGDIR/postgresql.${MMDD} | grep -c "$DB"
#done
#exit 0
@@ -0,0 +1,109 @@
#!/bin/bash
USER="-U postgres"
PORT="-p 5432"
usage() {
echo "Usage: $0 -d <dbname> [-h <host> -U <user> -p <port>]"
exit 1
}
while getopts "d:h:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
h) HOST="-h $OPTARG"
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
DBNAME="postgres"
fi
#Column names changed from procpid $ current_query to pid & query from 9.2 up
gettstver()
{
TSTVER=$(psql -q -t $HOST $PORT $USER $DBNAME <<_QRY_
SELECT CASE WHEN SUBSTRING(version() FROM 12 FOR 3) < '9.2'
THEN 'procpid'
ELSE 'pid'
END;
_QRY_
)
TSTVER=${TSTVER:1:7}
}
gettstver
if [ "${TSTVER}" = "procpid" ]
then
COL="procpid"
QRY="current_query"
else
COL="pid"
QRY="query"
fi
getver()
{
VER=$(psql -t $HOST $PORT $USER $DBNAME <<_QRYVER_
SELECT version();
_QRYVER_
)
}
getver
VER=$(echo $VER | cut -c -16)
echo "Version is $VER"
current_locks() {
LCKLIST=$(psql -q $HOST $PORT $USER $DBNAME <<_QUERY_
SELECT l.database,
d.datname,
l.relation,
n.nspname,
c.relname,
l.pid,
a.usename,
l.locktype,
l.mode,
l.granted,
l.tuple
FROM pg_locks l
JOIN pg_class c ON (c.oid = l.relation)
JOIN pg_database d ON (CASE WHEN l.database = 0 THEN d.oid = 0 ELSE d.oid = l.database END)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_stat_activity a ON (a.$COL = l.pid)
ORDER BY l.database,
l.relation,
l.pid;
_QUERY_
)
}
if [ "$DBNAME" = "" ]
then
usage
fi
current_locks
echo "${LCKLIST}"
exit 0
@@ -0,0 +1,127 @@
#!/bin/bash
DBNAME="postgres"
USER="-U postgres"
PORT="-p 5432"
SLEEPTIME=5
CANCEL="F"
NOIDLE=""
usage() {
echo "Usage: $0 [-s <sleeptime> -d <dbname> -h <host> -U <user> -p <port> -x -i]"
echo "-x will exit after 1 iteration"
echo "-i will exclude <IDLE> queries"
exit 1
}
while getopts "d:s:h:p:uU:xi" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
s) SLEEPTIME=$OPTARG
;;
h) HOST="-h $OPTARG"
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
x) CANCEL="T"
;;
i) NOIDLE="AND current_query <> '<IDLE>'"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
exit 1
fi
getver() {
VER=$(psql -q -t $HOST $PORT $USER $DBNAME <<_VER_
SELECT SUBSTR(version(), 1, 16);
_VER_
)
}
#Column names changed from procpid $ current_query to pid & query from 9.2 up
gettstver()
{
TSTVER=$(psql -q -t $HOST $PORT $USER $DBNAME <<_QRY_
SELECT CASE WHEN SUBSTRING(version() FROM 12 FOR 3) < '9.2'
THEN 'procpid'
ELSE 'pid'
END;
_QRY_
)
TSTVER=${TSTVER:1:7}
}
gettstver
if [ "${TSTVER}" = "procpid" ]
then
COL="procpid"
QRY="current_query"
else
COL="pid"
QRY="query"
fi
getver
echo "$VER"
sleep 2
current_qry() {
QRYLIST=$(psql -q $HOST $PORT $USER $DBNAME <<_QUERY_
SELECT datname,
$COL as pid,
-- procpid as pid,
client_addr,
usename as user,
-- regexp_replace(current_query, ' (..)', ' ', 'g') as query,
regexp_replace($QRY, ' (..)', ' ', 'g') as query,
waiting,
query_start,
clock_timestamp() - query_start as duration
FROM pg_stat_activity
--WHERE procpid != pg_backend_pid()
WHERE $COL != pg_backend_pid()
$NOIDLE
ORDER BY datname,
query_start;
_QUERY_
)
}
#### MAIN ####
while [ 1 -ge 0 ]
do
clear
current_qry
echo "${QRYLIST}"
if [ "$CANCEL" = "T" ]
then
exit 0
fi
echo "Sleeping $SLEEPTIME"
sleep $SLEEPTIME
done
@@ -0,0 +1,46 @@
#!/bin/bash
# Reports sizes for all or selected database
PORT=""
USER=""
DBNAME="%"
usage() {
echo "Usage: $0 [-d <dbname> -U <user> -p <port>]"
exit 1
}
while getopts "d:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
exit 1
fi
psql $PORT $USER postgres <<_EOF_
SELECT datname,
rolname as owner,
pg_size_pretty(pg_database_size(datname) )as size_pretty,
pg_database_size(datname) as size,
(SELECT pg_size_pretty (SUM( pg_database_size(datname))::bigint)
FROM pg_database) AS total,
((pg_database_size(datname) / (SELECT SUM( pg_database_size(datname))
FROM pg_database) ) * 100)::numeric(6,3) AS pct
FROM pg_database d
JOIN pg_authid a ON a.oid = datdba
WHERE datname LIKE '%$DBNAME%'
ORDER BY datname;
_EOF_
@@ -0,0 +1,55 @@
#!/bin/bash
# SHOWS TABLES AND SIZES FOR ALL TABLES
# SHOULD BE RUN AS a SUPERUSER
HOST=""
PORT=""
USER=""
usage() {
echo "Usage: $0 -d <dbname> [-h <host> -p <port> -U <user>]"
exit 1
}
while getopts "d:h:p:U:u" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
h) HOST="-h $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
fi
psql $HOST $PORT $USER $DBNAME <<_CODE_
SELECT d.oid as directory,
c.relfilenode as filename,
n.nspname as schema,
c.relname as table,
a.rolname as owner,
pg_size_pretty(pg_relation_size(quote_ident(n.nspname) || '.' || quote_ident(c.relname))) as size
FROM pg_class c
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_authid a ON ( a.oid = c.relowner ),
pg_database d
WHERE d.datname = current_database()
AND relname NOT LIKE 'pg_%'
AND relname NOT LIKE 'information%'
AND relname NOT LIKE 'sql_%'
AND relkind = 'r'
ORDER BY relfilenode;
_CODE_
@@ -0,0 +1,63 @@
#!/bin/bash
# Disables or Enables connections to specified database
PORT=""
USER=""
usage() {
echo "Usage: $0 -d <dbname> [-p <port> -U <user>]"
echo Database name to disable/enable is required
exit 1
}
while getopts "d:p:U:u" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
exit 1
fi
if [ $DBNAME == "postgres" ]
then
echo Disable of postgres is prohibited
exit
fi
echo changing $DBNAME
psql $PORT $USER -v ON_ERROR_STOP=on postgres <<_EOF_
SELECT datname, datallowconn
FROM pg_database
WHERE datname = '$DBNAME' ;
UPDATE pg_database
SET datallowconn = CASE
WHEN datallowconn = TRUE THEN
FALSE
ELSE
TRUE
END
WHERE datname = '$DBNAME' ;
SELECT datname, datallowconn
FROM pg_database
WHERE datname = '$DBNAME' ;
\echo Connect status for $DBNAME has been reversed
_EOF_
@@ -0,0 +1,48 @@
#!/bin/bash
# Counts transaction per minute
# for postgresql server
# Note: transactions are actual / not potential
PORT=""
USER=""
DBNAME="postgres"
usage() {
echo "Usage: $0 [-d <dbname> -p <port> -U <user>]"
exit 1
}
while getopts "d:p:U:u" OPT;
do case "${OPT}" in
d) DBNAME="$OPTARG"
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
get_procnum() {
PROCNUM=$(psql $PORT -q -t $USER $DBNAME <<_QUERY_
SELECT SUM(xact_commit + xact_rollback)
FROM pg_stat_database;
_QUERY_
)
}
get_procnum
echo "$PROCNUM"
FIRST_CNT=$PROCNUM
sleep 60
get_procnum
LAST_CNT=$PROCNUM
echo "$PROCNUM"
(( TOT_QRY = $LAST_CNT - $FIRST_CNT ))
echo "Total queries = $TOT_QRY"
@@ -0,0 +1,19 @@
#!/bin/bash
psql -U postgres postgres <<_EOF_
SELECT g.rolname as group,
u.rolname as user,
r.admin_option,
CASE WHEN g.rolsuper = TRUE
THEN 'SUPERUSER'
ELSE 'f'
END as g_super,
CASE WHEN u.rolsuper = TRUE
THEN 'SUPERUSER'
ELSE 'f'
END as u_super
FROM pg_auth_members r
JOIN pg_authid g ON (r.roleid = g.oid)
JOIN pg_authid u ON (r.member = u.oid)
ORDER BY 1;
_EOF_
@@ -0,0 +1,56 @@
#!/bin/bash
# SHOWS TABLES AND SIZES FOR ALL TABLES
# SHOULD BE RUN AS SUPERUSER
PORT=""
USER=""
TBL=""
usage() {
echo "Usage: $0 -d <dbname> [-t <table> -p <port> -U <user>]"
exit 1
}
while getopts "d:p:t:U:u" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
t) TBL="$OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
exit 1
fi
psql $PORT $USER $DBNAME <<_CODE_
SELECT quote_ident(N.nspname),
quote_ident(T.relname) AS "table",
quote_ident(C.relname) AS idx_name,
round(100 * pg_relation_size(indexrelid) / pg_relation_size(indrelid) ) / 100 AS "index_ratio %",
pg_size_pretty(pg_relation_size(indexrelid) ) AS index_size,
pg_size_pretty(pg_relation_size(indrelid) ) AS table_size_size
FROM pg_index I
LEFT JOIN pg_class C ON (c.oid = I.indexrelid)
LEFT JOIN pg_class T ON (T.oid = I.indrelid)
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
AND c.relkind = 'i'
AND pg_relation_size(indrelid) > 0
AND C.relname LIKE '%$TBL%'
ORDER BY 4 DESC, 2;
_CODE_
@@ -0,0 +1,75 @@
#!/bin/bash
#Shows commnets on all or selected index
USER=""
PORT=""
usage() {
echo "Usage: $0 -d <dbname> [-i <index> -U <user> -p <port>]"
exit 1
}
while getopts "d:i:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
i) IDX=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
fi
getver()
{
VER=$(psql $PORT -t $USER $DBNAME <<_QRYVER_
SELECT version();
_QRYVER_
)
}
getver
VER=$(echo $VER | cut -c -16)
echo "Version is $VER"
QRY="SELECT quote_ident(n.nspname) as schema,
quote_ident(c.relname),
d.description as comment
FROM pg_class c
LEFT JOIN pg_description d ON (d.objoid = c.oid)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE n.nspname NOT LIKE 'information%'
AND relname NOT LIKE 'pg_%'
AND relname NOT LIKE 'information%'
AND relname NOT LIKE 'sql_%'
AND relname LIKE '%$IDX%'
AND relkind = 'i'
AND d.description IS NOT NULL
ORDER BY 2;"
current_stats() {
STATLIST=$(psql $PORT -q $USER $DBNAME <<_QUERY_
${QRY}
_QUERY_
)
}
current_stats
echo "${STATLIST}"
exit 0
@@ -0,0 +1,78 @@
#!/bin/bash
DBNAME="postgres"
USER="-U postgres"
PORT="-p 5432"
usage() {
echo "Usage: $0 [-d <dbname> -h <host> -U <user> -p <port> u]"
exit 1
}
while getopts "d:h:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
h) HOST="-h $OPTARG"
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
allow_logins()
{
CNT=$(psql $HOST $PORT $USER $DBNAME <<_QUERY_
UPDATE pg_authid au
SET rolcanlogin = TRUE
FROM pg_lockout lo
WHERE au.rolname = lo.rolname;
_QUERY_
)
}
current_user()
{
CUSER=$(psql -t $HOST $PORT $USER $DBNAME <<_QUERY_
SELECT TRIM(BOTH FROM current_user);
_QUERY_
)
}
###############################################################
# MAIN #
###############################################################
current_user
if [ $CUSER != "postgres" ]
then
echo "You must be postgres to execute this script."
echo "Aborting."
exit 1
fi
allow_logins
echo "Users allowed to login = $CNT"
exit 0
@@ -0,0 +1,90 @@
#!/bin/bash
DBNAME="postgres"
USER="-U postgres"
PORT="-p 5432"
usage() {
echo "Usage: $0 [-d <dbname> -U <user> -p <port> u]"
exit 1
}
while getopts "d:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
lockout()
{
CNT=$(psql $PORT $USER $DBNAME <<_QUERY_
DROP TABLE IF EXISTS pg_lockout;
CREATE TABLE pg_lockout
AS SELECT rolname,
rolsuper,
rolcanlogin
FROM pg_authid
WHERE rolsuper IS FALSE;
ALTER TABLE pg_lockout
ADD CONSTRAINT pg_lockout_pkey PRIMARY KEY (rolname);
UPDATE pg_authid au
SET rolcanlogin = FALSE
FROM pg_lockout lo
WHERE lo.rolcanlogin = TRUE
AND au.rolname = lo.rolname;
_QUERY_
)
}
current_user()
{
CUSER=$(psql -t $PORT $USER $DBNAME <<_QUERY_
SELECT TRIM(BOTH FROM current_user);
_QUERY_
)
}
###############################################################
# MAIN #
###############################################################
current_user
echo "current user is $CUSER"
if [ $CUSER != "postgres" ]
then
echo "You must be postgres to execute this script."
echo "Aborting."
exit 1
fi
lockout
echo "Users locked out = $CNT"
exit 0
@@ -0,0 +1,3 @@
BACKFILE=pgbackup.`date +%C%y%m%d%H%M`
pg_dump -f /home/pgsql/backup/$BACKFILE -F c postgres
@@ -0,0 +1,54 @@
#!/bin/bash
# Show start and runtime for postgresql server
DBNAME="postgres"
PORT=""
USER=""
usage() {
echo "Usage: $0 [-d <dbname> -p <port> -U <user>]"
exit 1
}
while getopts "d:p:U:u" OPT;
do case "${OPT}" in
d) DBNAME="$OPTARG"
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
getver()
{
VER=$(psql -t $PORT $USER $DBNAME <<_QRYVER_
SELECT version();
_QRYVER_
)
}
getver
VER=$(echo $VER | cut -c -16)
echo "Version is $VER"
show_runtime() {
RUNTIME=$(psql -q $PORT $USER $DBNAME <<_QUERY_
SELECT pg_postmaster_start_time() as pg_start,
current_timestamp - pg_postmaster_start_time() as runtime;
_QUERY_
)
}
show_runtime
echo "${RUNTIME}"
exit 0
@@ -0,0 +1,140 @@
#!/bin/bash
# Shows statistics for all indexes on all selected table
PORT=""
USER=""
TBL="%"
COLS=""
usage() {
echo "Usage: $0 -d <dbname> [-U <user> -p <port> -t <table> -s ]"
echo "dbname REQUIRED"
echo "-s will show columns used in index"
exit 1
}
getver()
{
VER=$(psql -t $PORT $USER $DBNAME <<_QRYVER_
SELECT version();
_QRYVER_
)
}
set_qry_cols() {
QRY="SELECT n.nspname as schema,
i.relname as table,
i.indexrelname as index,
i.idx_scan,
i.idx_tup_read,
i.idx_tup_fetch,
CASE WHEN idx.indisprimary
THEN 'pkey'
WHEN idx.indisunique
THEN 'uidx'
ELSE 'idx'
END AS type,
pg_get_indexdef(idx.indexrelid, 1, FALSE) as idxcol1,
pg_get_indexdef(idx.indexrelid, 2, FALSE) as idxcol2,
pg_get_indexdef(idx.indexrelid, 3, FALSE) as idxcol3,
pg_get_indexdef(idx.indexrelid, 4, FALSE) as idxcol4,
CASE WHEN idx.indisvalid
THEN 'valid'
ELSE 'INVALID'
END as status,
pg_relation_size( quote_ident(n.nspname) || '.' || quote_ident(i.relname) ) as size_in_bytes,
pg_size_pretty(pg_relation_size(quote_ident(n.nspname)|| '.' || quote_ident(i.relname) )) as size
FROM pg_stat_all_indexes i
JOIN pg_class c ON (c.oid = i.relid)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_index idx ON (idx.indexrelid = i.indexrelid )
WHERE i.relname LIKE '%$TBL%'
AND n.nspname NOT LIKE 'pg_%'
ORDER BY 1, 2, 3;"
}
set_qry_nocols() {
QRY="SELECT n.nspname as schema,
i.relname as table,
i.indexrelname as index,
i.idx_scan,
i.idx_tup_read,
i.idx_tup_fetch,
CASE WHEN idx.indisprimary
THEN 'pkey'
WHEN idx.indisunique
THEN 'uidx'
ELSE 'idx'
END AS type,
CASE WHEN idx.indisvalid
THEN 'valid'
ELSE 'INVALID'
END as status,
pg_relation_size(quote_ident(n.nspname) || '.' || quote_ident(i.relname) ) as size_in_bytes
FROM pg_stat_all_indexes i
JOIN pg_class c ON (c.oid = i.relid)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_index idx ON (idx.indexrelid = i.indexrelid )
WHERE i.relname LIKE '%$TBL%'
AND n.nspname NOT LIKE 'pg_%'
ORDER BY 1, 2, 3;"
}
current_stats() {
STATLIST=$(psql -q -U postgres $DBNAME <<_QUERY_
$QRY
_QUERY_
)
}
###########################################################
# MAIN #
###########################################################
while getopts "d:p:st:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
s) COLS="TRUE"
;;
t) TBL="$OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
fi
getver
VER=$(echo $VER | cut -c -16)
echo "Version is $VER"
if [ "$COLS" = "TRUE" ]
then
set_qry_cols
else
set_qry_nocols
fi
current_stats
echo "${STATLIST}"
exit 0
@@ -0,0 +1,100 @@
#!/bin/bash
# Reports statistics for all tables
PORT=""
USER=""
TBL=""
usage() {
echo "Usage: $0 -d <dbname> [-t <table> -U <user> -p <port>]"
exit 1
}
while getopts "d:p:t:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
t) TBL=$OPTARG
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
fi
getver()
{
VER=$(psql -t $PORT $USER $DBNAME <<_QRYVER_
SELECT version();
_QRYVER_
)
}
getver
VER=$(echo $VER | cut -c -16)
echo "Version is $VER"
if [ "${VER:11:3}" \< "8.3" ]
then
QRY="SELECT n.nspname as schema,
s.relname as table,
c.reltuples::bigint,
n_tup_ins,
n_tup_upd,
n_tup_del,
date_trunc('second', last_vacuum) as last_vacuum,
date_trunc('second', last_autovacuum) as last_autovacuum,
date_trunc('second', last_analyze) as last_analyze,
date_trunc('second', last_autoanalyze) as last_autoanalyze
FROM pg_stat_all_tables s
JOIN pg_class c ON c.oid = s.relid
JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE s.relname NOT LIKE 'pg_%'
AND s.relname NOT LIKE 'sql_%'
AND s.relname LIKE '%$TBL%'
ORDER by 1, 2;"
else
QRY="SELECT n.nspname as schema,
s.relname as table,
c.reltuples::bigint,
n_live_tup,
n_tup_ins,
n_tup_upd,
n_tup_del,
date_trunc('second', last_vacuum) as last_vacuum,
date_trunc('second', last_autovacuum) as last_autovacuum,
date_trunc('second', last_analyze) as last_analyze,
date_trunc('second', last_autoanalyze) as last_autoanalyze
FROM pg_stat_all_tables s
JOIN pg_class c ON c.oid = s.relid
JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE s.relname NOT LIKE 'pg_%'
AND s.relname NOT LIKE 'sql_%'
AND s.relname LIKE '%$TBL%'
ORDER by 1, 2;"
fi
current_stats() {
STATLIST=$(psql -q $PORT $USER $DBNAME <<_QUERY_
${QRY}
_QUERY_
)
}
current_stats
echo "${STATLIST}"
exit 0
@@ -0,0 +1,66 @@
#!/bin/bash
# Shows vacuum time for all or selected table.
PORT=""
USER=""
TBL=""
usage() {
echo "Usage: $0 -d <dbname> [-t <table> -p <port> -U <user>]"
exit 1
}
while getopts "d:p:t:U:u" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
t) TBL="$OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
fi
getver()
{
VER=$(psql $PORT -t $USER $DBNAME <<_QRYVER_
SELECT version();
_QRYVER_
)
}
getver
VER=$(echo $VER | cut -c -16)
echo "Version is $VER"
vacuum_time() {
TIMEINFO=$(psql -q $PORT $USER $DBNAME <<_QUERY_
SELECT max(last_vacuum) - min(last_vacuum) as vacuum_time
FROM pg_stat_all_tables s
WHERE s.relname NOT LIKE 'pg_%'
AND s.relname NOT LIKE 'sql_%'
AND s.relname LIKE '%$TBL%'
ORDER by 1;
_QUERY_
)
}
vacuum_time
echo "${TIMEINFO}"
exit 0
@@ -0,0 +1,24 @@
#!/bin/bash
#!/bin/bash
OLDFILE=$1
usage() {
echo "Usage: $0 oldfile"
exit 1
}
if [ -z "$OLDFILE" ]
then
usage
exit 1
fi
OLDFILE=$1
NEWFILE=x$1
col -bp < $OLDFILE >> $NEWFILE
chmod +x $NEWFILE
rm $OLDFILE
mv $NEWFILE $OLDFILE
@@ -0,0 +1,64 @@
#!/bin/bash
#Shows roles and members
PORT=""
USER="-U postgres"
DBNAME="postgres"
usage() {
echo "Usage: $0 [-d <dbname> -U <user> -p <port>]"
exit 1
}
while getopts "d:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
getver()
{
VER=$(psql -t $PORT $USER $DBNAME <<_QRYVER_
SELECT version();
_QRYVER_
)
}
getver
VER=$(echo $VER | cut -c -16)
echo "Version is $VER"
show_members() {
MEMBERS=$(psql -q $PORT $USER $DBNAME <<_QUERY_
SELECT a.rolname as role,
u.rolname as member,
CASE
WHEN m.admin_option THEN
'YES'
ELSE
'no'
END as admin
FROM pg_auth_members m
JOIN pg_authid a ON (a.oid = m.roleid)
JOIN pg_authid u ON (u.oid = m.member)
ORDER BY 1, 2
_QUERY_
)
}
show_members
echo "${MEMBERS}"
exit 0
@@ -0,0 +1,55 @@
#!/bin/bash
PORT=""
usage() {
echo "Usage: $0 [-p <port>]"
exit 1
}
while getopts "p:u" OPT;
do case "${OPT}" in
p) PORT="-p $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
getver()
{
VER=$(psql $PORT -t -U postgres postgres <<_QRYVER_
SELECT version();
_QRYVER_
)
}
getver
VER=$(echo $VER | cut -c -16)
echo "Version is $VER"
slony_status() {
STATUS=$(psql $PORT -q <<_QUERY_
BEGIN;
SELECT st_origin as org,
st_last_event as last_event,
st_lag_num_events as lag_events,
st_lag_time
FROM _slony.sl_status;
COMMIT;
_QUERY_
)
}
slony_status
echo "${STATUS}"
exit 0
@@ -0,0 +1,83 @@
#!/bin/bash
# Reports statistics for all tables
HOST=""
PORT=""
USER=""
TBL=""
usage() {
echo "Usage: $0 -d <dbname> -t <table> [-h <host> -U <user> -p <port>]"
exit 1
}
while getopts "d:h:p:t:U:u" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
h) HOST="-h $OPTARG"
;;
p) PORT="-p $OPTARG"
;;
t) TBL=$OPTARG
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
DBNAME="playmaker"
fi
if [ "$TBL" = "" ]
then
usage
fi
getver()
{
VER=$(psql -t $PORT $HOST $USER $DBNAME <<_QRYVER_
SELECT version();
_QRYVER_
)
}
getver
current_stats() {
STATLIST=$(psql -q $HOST $PORT $USER $DBNAME <<_QUERY_
SELECT schemaname,
tablename,
attname As colname,
n_distinct,
array_to_string(most_common_vals, E'\n') AS common_vals,
array_to_string(most_common_freqs, E'\n') As dist_freq
FROM pg_stats
WHERE tablename = '$TBL'
ORDER BY schemaname,
tablename,
attname;
_QUERY_
)
}
##### MAIN #####
echo "HOST=$HOST"
echo "PORT=$PORT"
echo "USER=$USER"
echo "TBL=$TBL"
echo "DBNAME=$DBNAME"
current_stats
echo "${STATLIST}"
exit 0
@@ -0,0 +1,101 @@
#!/bin/bash
# Shows comments for all or specified table
USER=""
PORT=""
TBL=""
usage() {
echo "Usage: $0 -d <dbname> [-t <table> -U <user> -p <port>]"
exit 1
}
while getopts "d:t:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
t) TBL=$OPTARG
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
fi
getver()
{
VER=$(psql $PORT -t $USER $DBNAME <<_QRYVER_
SELECT version();
_QRYVER_
)
}
getver
VER=$(echo $VER | cut -c -16)
echo "Version is $VER"
QRY="SELECT DISTINCT ON (c.relname)
n.nspname as schema,
c.relname,
a.rolname as owner,
0 as col_seq,
'' as column,
d.description as comment
FROM pg_class c
LEFT JOIN pg_attribute col ON (col.attrelid = c.oid)
LEFT JOIN pg_description d ON (d.objoid = col.attrelid AND d.objsubid = 0)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_authid a ON ( a.OID = c.relowner )
WHERE n.nspname NOT LIKE 'information%'
AND relname NOT LIKE 'pg_%'
AND relname NOT LIKE 'information%'
AND relname NOT LIKE 'sql_%'
AND relname LIKE '%$TBL%'
AND relkind = 'r'
-- AND d.description IS NOT NULL
UNION
SELECT n.nspname as schema,
c.relname,
'' as owner,
col.attnum as col_seq,
col.attname as column,
d.description
FROM pg_class c
JOIN pg_attribute col ON (col.attrelid = c.oid)
LEFT JOIN pg_description d ON (d.objoid = col.attrelid AND d.objsubid = col.attnum)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_authid a ON ( a.OID = c.relowner )
WHERE n.nspname NOT LIKE 'information%'
AND relname NOT LIKE 'pg_%'
AND relname NOT LIKE 'information%'
AND relname NOT LIKE 'sql_%'
AND relname LIKE '%$TBL%'
AND relkind = 'r'
-- AND d.description IS NOT NULL
AND col.attnum >= 0
ORDER BY 1, 2, 4;"
current_stats() {
STATLIST=$(psql $USER $PORT -q $DBNAME <<_QUERY_
${QRY}
_QUERY_
)
}
current_stats
echo "${STATLIST}"
exit 0
@@ -0,0 +1,70 @@
#!/bin/bash
USER=""
PORT=""
TBL=""
usage() {
echo "Usage: $0 -d <dbname> [-t <table> -p <port> -U <user>]"
exit 1
}
while getopts "d:p:t:U:u" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
t) TBL=$OPTARG
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
fi
getver()
{
VER=$(psql $PORT -t $USER $DBNAME <<_QRYVER_
SELECT version();
_QRYVER_
)
}
getver
VER=$(echo $VER | cut -c -16)
echo "Version is $VER"
get_dependents() {
DEPLIST=$(psql $PORT -q $USER $DBNAME <<_QUERY_
SELECT n.nspname as schema,
pa.relname as parent,
ch.relname as dependent,
cn.conname as constraint_name
FROM pg_constraint cn
JOIN pg_class pa ON (pa.oid = cn.confrelid)
JOIN pg_class ch ON (ch.oid = cn.conrelid)
JOIN pg_namespace n ON (n.oid = pa.relnamespace)
WHERE pa.relname LIKE '%$TBL%'
AND contype = 'f'
ORDER BY 1, 2, 3;
_QUERY_
)
}
get_dependents
echo "${DEPLIST}"
exit 0
@@ -0,0 +1,58 @@
#!/bin/bash
# Shows functions that specified table occurs in
USER=""
PORT=""
usage() {
echo "Usage: $0 -d <dbname> -t <table> [-U <user> -p <port>]"
exit 1
}
while getopts "d:t:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
t) TBL=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
DBNAME="enf"
fi
if [ "$TBL" = "" ]
then
usage
exit 1
fi
echo "$TBL"
psql $USER $PORT $DBNAME <<_CODE_
SELECT p.proname,
CASE WHEN p.proretset = TRUE
THEN 'SET OF '
ELSE ''
END ||
UPPER( (SELECT typname
FROM pg_type
WHERE oid = p.prorettype) ) AS return_type,
proargnames as parameters
FROM pg_proc p
WHERE prosrc LIKE '%$TBL%'
ORDER BY p.proname;
_CODE_
exit 0
@@ -0,0 +1,53 @@
#!/bin/bash
# Shows trigger functions that specified table occurs in
USER=""
PORT=""
usage() {
echo "Usage: $0 -d <dbname> -t <table> [-U <user> -p <port>]"
exit 1
}
while getopts "d:t:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
t) TBL=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
DBNAME="enf"
fi
if [ "$TBL" = "" ]
then
usage
exit 1
fi
echo "$TBL"
psql $USER $PORT $DBNAME <<_CODE_
SELECT c.relname,
t.tgname,
p.proname
FROM pg_proc p
JOIN pg_trigger t ON (t.tgfoid = p.oid)
JOIN pg_class c ON (c.oid = t.tgrelid)
WHERE prosrc LIKE ('%$TBL%')
ORDER BY c.relname;
_CODE_
exit 0
@@ -0,0 +1,69 @@
#!/bin/bash
# SHOWS TABLES AND SIZES FOR ALL TABLES
# SHOULD BE RUN AS SUPERUSER
PORT=""
USER=""
TBL=""
usage() {
echo "Usage: $0 -d <dbname> [-t <table> -p <port> -U <user>]"
exit 1
}
while getopts "d:p:t:U:u" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
t) TBL="$OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
exit 1
fi
psql $PORT $USER $DBNAME <<_CODE_
SELECT n.nspname as schema,
c.relname as table,
a.rolname as owner,
d.oid as directory,
c.relfilenode as filename,
c.reltuples::integer,
pg_size_pretty(pg_relation_size( quote_ident( n.nspname ) || '.' || quote_ident( c.relname ) )) as size,
pg_size_pretty(pg_relation_size( quote_ident( n.nspname ) || '.' || quote_ident( c.relname ) )
+ pg_relation_size( i.indexrelid ) ) as total_size,
pg_relation_size( quote_ident( n.nspname ) || '.' || quote_ident( c.relname ) ) as size_bytes,
pg_total_relation_size( quote_ident( n.nspname ) || '.' || quote_ident( c.relname ) ) as total_size_bytes,
CASE WHEN c.reltablespace = 0
THEN 'pg_default'
ELSE (SELECT t.spcname
FROM pg_tablespace t WHERE (t.oid = c.reltablespace) )
END as tablespace
FROM pg_class c
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_index i ON (i.indrelid = c.oid )
JOIN pg_authid a ON ( a.oid = c.relowner ),
pg_database d
WHERE d.datname = current_database()
AND relname NOT LIKE 'pg_%'
AND relname NOT LIKE 'information%'
AND relname NOT LIKE 'sql_%'
AND relname LIKE '%$TBL%'
AND relkind = 'r'
ORDER BY 9 DESC, 1, 2;
_CODE_
@@ -0,0 +1,49 @@
#!/bin/bash
# SHOWS TABLES AND OWNERS FOR ALL TABLES
# SHOULD BE RUN AS SUPERUSER
PORT=""
USER="-U postgres"
usage() {
echo "Usage: $0 -d <dbname> [-U <user> -p <port>]"
exit 1
}
while getopts "d:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
fi
psql $PORT $USER $DBNAME <<_CODE_
SELECT n.nspname as schema,
c.relname as table,
a.rolname as owner,
c.relacl as permits
FROM pg_class c
JOIN pg_namespace n ON ( n.oid = c.relnamespace )
JOIN pg_authid a ON ( a.OID = c.relowner )
WHERE relname NOT LIKE 'pg_%'
AND relname NOT LIKE 'information%'
AND relname NOT LIKE 'sql_%'
AND relkind = 'r'
-- AND position('useradmin' in ARRAY_TO_STRING(c.relacl, '') )> 0
ORDER BY n.nspname,
c.relname;
_CODE_
@@ -0,0 +1,55 @@
#!/bin/bash
# SHOWS TABLES AND SIZES FOR ALL TABLES
# SHOULD BE RUN AS postgres user
PORT=""
USER=""
usage() {
echo "Usage: $0 -d <dbname> [-p <port> -U <user>]"
exit 1
}
while getopts "d:p:U:u" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
fi
psql $PORT $USER $DBNAME <<_CODE_
SELECT n.nspname as schema,
c.relname as table,
-- c.relkind,
a.rolname as owner,
d.oid as directory,
c.relfilenode as filename,
pg_size_pretty(pg_relation_size( quote_ident(n.nspname ) || '.' || quote_ident( c.relname ) )) as size
FROM pg_class c
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_authid a ON ( a.oid = c.relowner ),
pg_database d
WHERE d.datname = current_database()
AND relname NOT LIKE 'pg_%'
AND relname NOT LIKE 'information%'
AND relname NOT LIKE 'sql_%'
AND relkind = 'r'
-- AND relkind IN ('i', 'r')
ORDER BY 1, 2;
_CODE_
@@ -0,0 +1,58 @@
#!/bin/bash
# SHOWS FOREIGN KEY COUNT FOR EACH TABLE
# THEN SHOWS FOREIGN KEYS FOR EACH TABLE
PORT=""
USER=""
usage() {
echo "Usage: $0 -d <dbname> [-U <user> -p <port>]"
exit 1
}
while getopts "d:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
fi
psql $PORT $USER $DBNAME <<_CODE_
SELECT n.nspname as schema,
t.relname as table,
count(c.conname)
FROM pg_class t
JOIN pg_constraint c ON ( c.conrelid = t.OID AND c.contype = 'f')
JOIN pg_namespace n ON (n.oid = t.relnamespace)
WHERE relkind = 'r'
AND t.relname NOT LIKE 'pg_%'
AND t.relname NOT LIKE 'sql_%'
GROUP BY 1, 2
ORDER BY 1, 3;
SELECT n.nspname as schema,
t.relname as table,
c.conname as fk_name
FROM pg_class t
JOIN pg_constraint c ON ( c.conrelid = t.OID AND c.contype = 'f')
JOIN pg_namespace n ON (n.oid = t.relnamespace)
WHERE relkind = 'r'
AND t.relname NOT LIKE 'pg_%'
AND t.relname NOT LIKE 'sql_%'
ORDER BY 1, 2, 3;
_CODE_
@@ -0,0 +1,65 @@
#!/bin/bash
# SHOWS ALL TABLES WITH A COLUMN NAME LIKE <ColumnName>
USER=""
PORT=""
usage() {
echo "Usage: $0 -d <dbname> -c <colname> [-U <user> -p <port>]"
exit 1
}
while getopts "d:c:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
c) COLNAME="$OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
echo "col=$COLNAME"
if [ "$DBNAME" = "" ]
then
DBNAME="enf"
fi
if [ "$COLNAME" = "" ]
then
usage
exit 1
fi
psql -a $USER $PORT $DBNAME <<_CODE_
SELECt c.table_schema as schema,
c.table_name as table,
c.column_name as column,
c.data_type as type,
case when c.data_type LIKE '%char%'
then COALESCE(character_maximum_length::text, 'N/A')
when c.data_type LIKE '%numeric%'
then '(' || c.numeric_precision::text || ', ' || c.numeric_scale::text || ')'
when c.data_type LIKE '%int%'
then c.numeric_precision::text
else COALESCE(character_maximum_length::text, 'N/A')
end as size
FROM information_schema.columns c
WHERE c.table_schema NOT LIKE 'pg_%'
AND c.table_schema NOT LIKE 'information%'
AND c.table_name NOT LIKE 'sql_%'
AND c.column_name LIKE '%$COLNAME%'
AND c.is_updatable = 'YES'
ORDER BY c.table_name, c.column_name;
_CODE_
exit 0
@@ -0,0 +1,49 @@
#!/bin/bash
# SHOWS TABLES AND OWNERS FOR ALL TABLES
# That have no public grants
# SHOULD BE RUN AS SUPERUSER
USER="-U postgres"
PORT=""
usage() {
echo "Usage: $0 -d <dbname> [-U <user> -p <port>]"
exit 1
}
while getopts "d:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
fi
psql $PORT $USER $DBNAME <<_CODE_
SELECT n.nspname as schema,
c.relname,
a.rolname as owner,
array_to_string(ARRAY[c.relacl], '|') as permits
FROM pg_class c
JOIN pg_authid a ON (a.OID = c.relowner)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE relkind = 'r'
AND relname NOT LIKE 'pg_%'
AND relname NOT LIKE 'information%'
AND relname NOT LIKE 'sql_%'
AND position('|=' in array_to_string(ARRAY[relacl], '|')) = 0
ORDER BY 1, 2;
_CODE_
@@ -0,0 +1,103 @@
#!/bin/bash
# Shows tablespace use for all or selected table
# that are not in default tablespace
PORT=""
USER=""
TBL="%"
usage() {
echo "Usage: $0 -d <dbname> [-t <table> -U <user> -p <port>]"
exit 1
}
while getopts "d:t:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
t) TBL=$OPTARG
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
exit 1
fi
getver()
{
VER=$(psql -t $USER $PORT $DBNAME <<_QRYVER_
SELECT version();
_QRYVER_
)
}
getver
VER=$(echo $VER | cut -c -16)
echo "Version is $VER"
gettstver()
{
TSTVER=$(psql -q -t $HOST $PORT $USER $DBNAME <<_QRY_
SELECT CASE WHEN SUBSTRING(version() FROM 12 FOR 3) < '9.2'
THEN 'oid'
ELSE 'func'
END;
_QRY_
)
TSTVER=${TSTVER:1:4}
}
gettstver
if [ "${TSTVER}" = "oid" ]
then
TSL="t.spclocation"
else
TSL="pg_tablespace_location(t.oid)"
fi
tspace_use() {
TSPACELIST=$(psql -q $USER $PORT $DBNAME <<_QUERY_
SELECT CASE WHEN t.spcname IS NULL
THEN 'pg_default'
ELSE t.spcname
END as tablespace,
$TSL as location,
n.nspname as schema,
c.relname as relation,
a.rolname as owner,
c.relkind as type
FROM pg_class c
LEFT JOIN pg_tablespace t ON (t.oid = c.reltablespace)
JOIN pg_authid a ON ( a.oid = c.relowner )
JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE relname LIKE '%$TBL%'
AND relkind IN ('i', 'r')
AND c.relname NOT LIKE 'pg_%'
AND c.relname NOT LIKE 'sql_%'
ORDER BY 1, 2;
_QUERY_
)
}
tspace_use
echo "${TSPACELIST}"
exit 0
@@ -0,0 +1,125 @@
#!/bin/bash
PORT=""
USER=""
TBL="%"
CONSTR=""
# Shows trigger function on all or selected trigger
usage() {
echo "Usage: $0 -d <dbname> [-U <user> -p <port> -t <trigger> -s ]"
echo "dbname REQUIRED"
echo "-s will show constraints"
exit 1
}
getver()
{
VER=$(psql -t $PORT $USER $DBNAME <<_QRYVER_
SELECT version();
_QRYVER_
)
}
set_qry_noconstraints() {
QRY="SELECT c.relname AS table,
t.tgname,
p.proname AS function_called,
-- t.tgisconstraint AS is_constraint,
cn.conname AS constraint_nm,
CASE WHEN t.tgconstrrelid > 0
THEN (SELECT relname
FROM pg_class
WHERE oid = t.tgconstrrelid)
ELSE ''
END AS constr_tbl
FROM pg_trigger t
INNER JOIN pg_proc p ON ( p.oid = t.tgfoid)
INNER JOIN pg_class c ON ( c.oid = t.tgrelid)
LEFT JOIN pg_constraint cn ON ( cn.oid = t.tgconstraint )
WHERE tgname NOT LIKE 'pg_%'
AND tgname NOT LIKE 'RI_%' -- < comment out to see constraints
AND tgname LIKE '%$TRG%'
ORDER BY 1;"
}
set_qry_constraints() {
QRY="SELECT c.relname AS table,
t.tgname,
p.proname AS function_called,
-- t.tgisconstraint AS is_constraint,
cn.conname AS constraint_nm,
CASE WHEN t.tgconstrrelid > 0
THEN (SELECT relname
FROM pg_class
WHERE oid = t.tgconstrrelid)
ELSE ''
END AS constr_tbl
FROM pg_trigger t
INNER JOIN pg_proc p ON ( p.oid = t.tgfoid)
INNER JOIN pg_class c ON ( c.oid = t.tgrelid)
LEFT JOIN pg_constraint cn ON ( cn.oid = t.tgconstraint )
WHERE tgname NOT LIKE 'pg_%'
AND tgname LIKE '%$TRG%'
ORDER BY 1;"
}
list_triggers() {
LIST=$(psql -q $PORT $USER $DBNAME <<_QUERY_
$QRY
_QUERY_
)
}
###########################################################
# MAIN #
###########################################################
while getopts "d:p:st:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
s) CONSTR="TRUE"
;;
t) TRG="$OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
usage
fi
getver
VER=$(echo $VER | cut -c -16)
echo "Version is $VER"
if [ "$CONSTR" = "TRUE" ]
then
set_qry_constraints
else
set_qry_noconstraints
fi
list_triggers
echo "${LIST}"
exit 0
@@ -0,0 +1,59 @@
#!/bin/bash
# Shows Tables access for user specified
# SHOULD BE RUN AS SUPERUSER
USER=""
PORT=""
usage() {
echo "Usage: $0 -d <dbname> -a <user2check> [-U <user> -p <port>]"
exit 1
}
while getopts "d:a:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
a) CKUSER=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
DBNAME="enf"
fi
if [ "$CKUSER" = "" ]
then
usage
exit 1
fi
psql $USER $PORT $DBNAME <<_CODE_
SELECT n.nspname,
c.relname,
array_to_string(ARRAY[c.relacl], '|') as permits,
position('useradmin' in array_to_string(ARRAY[relacl], '|'))
FROM pg_class c
JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE n.nspname not like 'pg_%'
AND n.nspname not like 'inform_%'
AND relkind = 'r'
AND (position('$CKUSER' in array_to_string(ARRAY[relacl], '|')) > 0
OR position( (SELECT g.rolname
FROM pg_auth_members r
JOIN pg_authid g ON (r.roleid = g.oid)
JOIN pg_authid u ON (r.member = u.oid)
AND u.rolname LIKE '$CKUSER%') in array_to_string(ARRAY[relacl], '|')) > 0 )
ORDER BY 1,2;
_CODE_
@@ -0,0 +1,76 @@
#!/bin/bash
# Shows table access detail for user specified
# SHOULD BE RUN AS SUPERUSER
USER=""
PORT=""
usage() {
echo "Usage: $0 -d <dbname> -a <user2check> [-U <user> -p <port>]"
exit 1
}
while getopts "d:a:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
a) CKUSER=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
if [ "$DBNAME" = "" ]
then
DBNAME="enf"
fi
if [ "$CKUSER" = "" ]
then
usage
exit 1
fi
psql $USER $PORT $DBNAME <<_CODE_
SELECT n.nspname,
c.relname,
CASE WHEN has_table_privilege('$CKUSER', quote_ident(n.nspname) || '.' || quote_ident(c.relname), 'SELECT')
THEN 'YES'
ELSE 'no'
END AS "SEL",
CASE WHEN has_table_privilege('$CKUSER', quote_ident(n.nspname) || '.' || quote_ident(c.relname), 'INSERT')
THEN 'YES'
ELSE 'no'
END AS "INS",
CASE WHEN has_table_privilege('$CKUSER', quote_ident(n.nspname) || '.' || quote_ident(c.relname), 'UPDATE')
THEN 'YES'
ELSE 'no'
END AS "UPD",
CASE WHEN has_table_privilege('$CKUSER', quote_ident(n.nspname) || '.' || quote_ident(c.relname), 'DELETE')
THEN 'YES'
ELSE 'no'
END AS "DEL",
array_to_string(ARRAY[c.relacl], '|') as permits
FROM pg_class c
JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE n.nspname not like 'pg_%'
AND n.nspname not like 'inform_%'
AND relkind = 'r'
/*
AND (position('$CKUSER' in array_to_string(ARRAY[relacl], '|')) > 0
OR position( (SELECT g.rolname
FROM pg_auth_members r
JOIN pg_authid g ON (r.roleid = g.oid)
JOIN pg_authid u ON (r.member = u.oid)
AND u.rolname LIKE '$CKUSER%') in array_to_string(ARRAY[relacl], '|')) > 0 )
*/
ORDER BY 1,2;
_CODE_
@@ -0,0 +1,43 @@
METHOD:1
select distinct
a.tablespace_name,
SUM(a.bytes)/1024/1024 "Used Size MB",
SUM(decode(b.maxextend, null, A.BYTES/1024/1024, b.maxextend*8192/1024/1024)) "Max Size Mb",
(SUM(a.bytes)/1024/1024 - round(c."Free"/1024/1024)) "Total Used MB",
(SUM(decode(b.maxextend, null, A.BYTES/1024/1024, b.maxextend*8192/1024/1024)) - (SUM(a.bytes)/1024/1024 - round(c."Free"/1024/1024))) "Total Free MB",
round(100*(SUM(a.bytes)/1024/1024 - round(c."Free"/1024/1024))/(SUM(decode(b.maxextend, null, A.BYTES/1024/1024, b.maxextend*8192/1024/1024)))) "Used Percentage"
from
dba_data_files a,
sys.filext$ b,
(SELECT d.tablespace_name , sum(nvl(c.bytes,0)) "Free" FROM dba_tablespaces d,DBA_FREE_SPACE c where d.tablespace_name = c.tablespace_name(+) group by d.tablespace_name) c
where a.file_id = b.file#(+)
and a.tablespace_name = c.tablespace_name
GROUP by a.tablespace_name, c."Free"/1024
order by round(100*(SUM(a.bytes)/1024/1024 - round(c."Free"/1024/1024))/(SUM(decode(b.maxextend, null, A.BYTES/1024/1024, b.maxextend*8192/1024/1024)))) desc/
METHOD:2
select substr(A.tablespace_name,1,16) "Tablespace",
MAX(A.contents) "Type",
MAX(A.status) "Status",
MAX(A.initial_extent)/1024 "Initial extent(Kb)",
MAX(A.next_extent)/1024 "Next extent(Kb)",
MAX(A.max_extents) "Max extents",
MAX(A.pct_increase) "Pct_increase",
(SUM(B.BYTES)*COUNT(DISTINCT B.FILE_ID)/COUNT(B.FILE_ID)/1024/1024)-(ROUND(SUM(C.BYTES)/1024/1024/COUNT(DISTINCT B.FILE_ID))) "USED SIZE(Mb)",
(SUM(B.BLOCKS)*COUNT(DISTINCT B.FILE_ID)/COUNT(B.FILE_ID))-(SUM(C.BLOCKS)/COUNT(DISTINCT B.FILE_ID)) "USED BLOCKS",
TO_CHAR(100-(SUM(C.BLOCKS)*100*COUNT(B.FILE_ID)/(SUM(B.BLOCKS)*COUNT(DISTINCT B.FILE_ID)))/COUNT(DISTINCT B.FILE_ID),'999.99')||'%' "USED USAGE",
ROUND(SUM(C.BYTES)/1024/1024/COUNT(DISTINCT B.FILE_ID)) "FREE SIZE(MB)",
SUM(C.BLOCKS)/COUNT(DISTINCT B.FILE_ID) "FREE BLOCKS",
TO_CHAR((SUM(C.BLOCKS)*100*COUNT(B.FILE_ID)/(SUM(B.BLOCKS)*COUNT(DISTINCT B.FILE_ID)))/COUNT(DISTINCT B.FILE_ID),'999.99')||'%' "FREE USAGE",
SUM(B.BYTES)*COUNT(DISTINCT B.FILE_ID)/COUNT(B.FILE_ID)/1024/1024 "TOTAL SIZE(Mb)",
SUM(B.BLOCKS)*COUNT(DISTINCT B.FILE_ID)/COUNT(B.FILE_ID) "TOTAL BLOCKS"
from dba_tablespaces A,
DBA_DATA_FILES B,
DBA_FREE_SPACE C
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME
AND A.TABLESPACE_NAME=C.TABLESPACE_NAME
GROUP BY A.TABLESPACE_NAME
order by 1
+272
View File
@@ -0,0 +1,272 @@
Steps followed to shutdown:
1. Shutdown Oracle Home process accessing database.
> emctl stop dbconsole
> srvctl stop listener -n node1
2. Shutdown RAC Database Instances on all nodes.
> srvctl status database -d oradb
> srvctl stop database -d oradb
3. Shutdown All ASM instances from all nodes.
> srvctl status asm
> srvctl stop asm -n node1 -f
> srvctl stop asm -n node2 -f
4. Shutdown Node applications running on nodes.
> srvctl status nodeapps -n node1
> srvctl stop nodeapps -n node1 -f
5. Shut down the Oracle Cluster ware or CRS. ( Run as root user)
> crsctl check cluster -all
> crsctl stop crs
Steps followed to startup:
1. Start Oracle Clusterware or CRS. (Run as root user)
> crsctl start crs
> crsctl check cluster -all
( DBA can see "CRS-4639: Could not contact Oracle High Availability Services" or "CRS-4535: Cannot communicate with Cluster Ready Services" messages.
Wait 5 minutes and then again check with "crsctl check cluster -all" command.
This time Database administrator will get "CRS-4537: Cluster Ready Services is online".
If still same issue DBA can start ora.crsd process to resolve this issue. Below is the command
> crsctl start res ora.crsd -init
2. Start Node applications running on nodes.
> srvctl start nodeapps -n node1
> srvctl status nodeapps -n node1
3. Start All ASM instances from all nodes.
> srvctl start asm -n node1
> srvctl status asm -n node1
4. Start RAC Database Instances on all nodes.
> srvctl start database -d oradb
> srvctl status database -d oradb
5. Start Oracle Home process accessing database.
> srvctl start listener -n node1
> srvctl status listener -n node1
> emctl start dbconsole
Start and Stop the One node services: ------------------> one by one node down query.
> srvctl stop listener -n node_name
> srvctl stop instance -d <db_name> -i <instance_name> -o immediate
> srvctl stop asm -n node_name
> srvctl stop nodeapps -n node_name
> srvctl start listener -n node_name
> srvctl start instance -d <db_name> -i <instance_name> -o immediate
> srvctl start asm -n node_name
> srvctl start nodeapps -n node_name
Check scan IP using OS command nslookup
# nslookup rac-scan.localdomain
Server: 192.168.0.4
Address: 192.168.0.4#53
Name: rac-scan.localdomain
Address: 192.168.0.121
Name: rac-scan.localdomain
Address: 192.168.0.122
Name: rac-scan.localdomain
Address: 192.168.0.123
# nslookup 192.168.0.121
Server: 192.168.0.4
Address: 192.168.0.4#53
121.0.168.192.in-addr.arpa name = rac-scan.localdomain.
# nslookup 192.168.0.122
Server: 192.168.0.4
Address: 192.168.0.4#53
122.0.168.192.in-addr.arpa name = rac-scan.localdomain.
# nslookup 192.168.0.123
Server: 192.168.0.4
Address: 192.168.0.4#53
123.0.168.192.in-addr.arpa name = rac-scan.localdomain.
============================================================================================================================================
CRSCTL CheatSheet
Amit Bansal / 21 May, 2008
You can find below various commands which can be used to administer Oracle Clusterware using crsctl. This is for purpose of easy reference.
Start Oracle Clusterware
#crsctl start crs
Stop Oracle Clusterware
#crsctl stop crs
Enable Oracle Clusterware
#crsctl enable crs
It enables automatic startup of Clusterware daemons
Disable Oracle Clusterware
#crsctl disable crs
It disables automatic startup of Clusterware daemons. This is useful when you are performing some
operations like OS patching and does not want clusterware to start the daemons automatically.
Checking Voting disk Location
$crsctl query css votedisk
0. 0 /dev/sda3
1. 0 /dev/sda5
2. 0 /dev/sda6
Located 3 voting disk(s).
Note: -Any command which just needs to query information can be run using oracle user. But anything which alters Oracle Clusterware requires root privileges.
Add Voting disk
#crsctl add css votedisk path
Remove Voting disk
#crsctl delete css votedisk path
Check CRS Status
$crsctl check crs
Cluster Synchronization Services appears healthy
Cluster Ready Services appears healthy
Event Manager appears healthy
You can also see particular daemon status
$crsctl check cssd
Cluster Synchronization Services appears healthy
$crsctl check crsd
Cluster Ready Services appears healthy
$crsctl check evmd
Event Manager appears healthy
You can also check Clusterware status on both the nodes using
$crsctl check cluster
prod01 ONLINE
prod02 ONLINE
Checking Oracle Clusterware Version
To determine software version (binary version of the software on a particular cluster node) use
$crsctl query crs softwareversion
Oracle Clusterware version on node [prod01] is [11.1.0.6.0]
For checking active version on cluster, use
$ crsctl query crs activeversion
Oracle Clusterware active version on the cluster is [11.1.0.6.0]
As per documentation, multiple versions are used while upgrading.
There are other options for CRSCTL too which can be seen using
$crsctl
Or
$crsctl help
11.2 Reference
11.2 introduced few changes to crsctl usage. Most important is clusterized commands which allows you to perform remote operations. They are
crsctl check cluster
crsctl start cluster
crsctl stop cluster
All these commands allow following usage
Default Stop local server
-all Stop all servers
-n Stop named servers
server [...] One or more blank-separated server names
-f Force option
Let's see usage
% crsctl check cluster -all
**************************************************************
prod01:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
prod02:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
crsctl pin css is used to associate node name with node number. i.e if olsnodes shows prod01 as 1, then it should persist. This is helpful if you intend to run pre 11.2 database
?
1
2
#crsctl pin css -n prod01
#crsctl pin css -n prod02
To check daemon status, following commands need to be used
Check crsd - crsctl check crs
Check cssd - crsctl check crs
check evmd - crsctl check evm
crs_unregister is replaced by crsctl delete resource <resource_name>
crs_stat has been deprecated (though still works) and you need to use
@@ -0,0 +1,16 @@
set lines 1000 pages 1000
connect / as sysdba
startup mount
alter system set "_system_trig_enabled" = false scope=memory;
alter database open;
@?/javavm/install/initjvm.sql
@?/xdk/admin/initxml.sql
@?/xdk/admin/xmlja.sql
@?/rdbms/admin/catjava.sql
@?/rdbms/admin/catexf.sql
shutdown immediate
startup
REM Recompile all
@?/rdbms/admin//utlrp.sql
column comp_name format a50
SELECT COMP_ID, COMP_NAME, STATUS FROM DBA_REGISTRY;
@@ -0,0 +1,8 @@
select sessionid,
username,
min(decode(action_name,'LOGON',TIMESTAMP)) logon_time,
min(decode(action_name,'LOGOFF',TIMESTAMP)) logoff_time
from dba_audit_session
group by sessionid, username
order by 2
;
@@ -0,0 +1,867 @@
------%%%% Session Related Queries %%%%------
alter system kill session '
alter system kill session 'sid,serial#' immediate;
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,PROCESS, to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from gv$session where sid= '388';
col USERNAME for a15
col OSUSER for a13
col SCHEMANAME for a15
col MACHINE for a20
select SID,SERIAL#,USERNAME, MACHINE from gv$session where MACHINE like 'wawplappp10%';
SELECT spid
FROM v$session a, v$process b WHERE a.paddr = b.addr AND sid = '388';
1) Session details (status, logon time etc.)
2) Blocking sessions/Wait events etc.
3) SQL text
4) No. Of rows processed
5) Any change in the Access plan
6) Any long running sessions
select instance_name, name, open_mode from v$instance, v$database;
set lines 900
set pagesize 900
Finding details using username:
*************************************
set lines 900
set pagesize 900
col USERNAME for a15
col OSUSER for a13
col SCHEMANAME for a15
col MACHINE for a20
col LOGON_TIME for a30
col SQL_ID for a15
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from gv$session where
osuser like '%%' order by LOGON_TIME;
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from v$session order by SID;
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from v$session order by STATUS;
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from gv$session where STATUS='ACTIVE';
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from v$session where username= 'SAS_ANALISTA' order by status;
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from gv$session where username='H3G_TRAFFICO' order by LOGON_TIME;
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from gv$session order by LOGON_TIME;
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from v$session where username='EBIS_DWH' and OSUSER = 'dsadmc' order by LOGON_TIME;
select SID,SERIAL#,USERNAME,OSUSER,inst_id,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from v$session order by LOGON_TIME;
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from gv$session where MACHINE='h3fah055' order by LOGON_TIME;
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char(logon_time, 'hh24:mi:ss dd/mm/yy') login_time from gv$SESSION where OSUSER='dsadmc' and machine='h3fah055' order by LOGIN_TIME;
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from v$session where SQL_ID='6sbr8wusrcy8a';
Sessions sorted by logon time:-
**********************************
set lines 100 pages 999
col ID format a15
col osuser format a15
col login_time format a14
select username
, osuser
, sid || ',' || serial# "ID"
, status
, to_char(logon_time, 'hh24:mi dd/mm/yy') login_time
, last_call_et
from v$session
where username is not null
order by login_time;
Finding details using sid:
*****************************
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from gv$session where sid= '2191';
select SID,SERIAL#,USERNAME,OSUSER,SCHEMANAME,MACHINE,SQL_ID,STATUS,to_char (LOGON_TIME,'DD-MON-YY:HH24:MI:SS') from v$session where sid in ('1334', '2573', '2664') order by status;
To Find Blocking Sessions :
*************************************
Query 1:
***********
select s1.username || '@' || s1.machine
|| ' ( SID=' || s1.sid || ', SERIAL#='||s1.serial#||' ) is blocking'
|| s2.username || '@' || s2.machine || ' ( SID=' || s2.sid || ', SERIAL#='||s2.serial#||' ) ' AS blocking_status
from v$lock l1, v$session s1, v$lock l2, v$session s2
where s1.sid=l1.sid and s2.sid=l2.sid
and l1.BLOCK=1 and l2.request > 0
and l1.id1 = l2.id1
and l2.id2 = l2.id2;
## output ## BLOCKING_SESSION_STATUS
--------------------------------------------------------------------------------
OPS$GBC@htcfh006 ( SID=2622) is blocking OPS$GBC@htcfh006 ( SID=2561)
OPS$GBC@htcfh006 ( SID=2561) is blocking OPS$GBC@htcfh006 ( SID=2622)
In this example the 2622 session is blocking 2561. ##
Query 2:
***********
select blocking_session,sid,serial#,wait_class,seconds_in_wait from gv$session where blocking_session is not NULL order by blocking_session;
## output ##
BLOCKING_SESSION SID SERIAL# WAIT_CLASS SECONDS_IN_WAIT
---------------- ---------- ---------- -------------------- ---------------
148 135 61521 Idle 64
Finding Locks:
*****************
set linesize 180 pagesize 90
break on Kill on username on terminal
column Kill heading 'Kill String' format a18
column res heading 'Resource Type' format 999
column id1 format 9999990
column id2 format 9999990
column lmode heading 'Lock Held' format a20;
column request heading 'Lock Requested' format a20;
column serial# format 99999
column username format a15 heading "Username"
column terminal heading Term format a11
column tab format a45 heading "Table Name"
column owner format a9
column Address format a18
select /*+RULE*/ nvl(S.USERNAME,'Internal') username,
nvl(S.TERMINAL,'None') terminal,
L.SID||','||S.SERIAL# ||' '|| P.spid Kill,
U1.NAME||'.'||substr(T1.NAME,1,30) tab,
decode(L.LMODE,1,'No Lock',
2,'Row Share',
3,'Row Exclusive',
4,'Share',
5,'Share Row Exclusive',
6,'Exclusive',null) lmode,
decode(L.REQUEST,1,'No Lock',
2,'Row Share',
3,'Row Exclusive',
4,'Share',
5,'Share Row Exclusive',
6,'Exclusive',null) request
from V$LOCK L,
GV$SESSION S,
V$PROCESS P,
SYS.USER$ U1,
SYS.OBJ$ T1
where L.SID = S.SID
and P.addr=S.paddr
and T1.OBJ# = decode(L.ID2,0,L.ID1,L.ID2)
and U1.USER# = T1.OWNER#
and S.TYPE != 'BACKGROUND'
--and S.SID= 1243
order by 1,2,5;
To find statement running on session:
*************************************************
Query 1 if sid is known:
*****************************
set pages 1000
set lines 132
col SQL_TEXT for a127
select SQL_TEXT from gv$sqltext
where hash_value = (select sql_hash_value from v$session where sid =2791)
order by piece;
Query 2 if sql_id is known:
*********************************
select sql_text from gv$sql where sql_id='00p5pgs2cgnnn';
No.Of Rows processed for given Session:
********************************************************
select spid, osuser, s.program from v$process p, v$session s where p.addr=s.paddr and SID=139;
select rows_processed from v$sql where hash_value= (select sql_hash_value from v$session where paddr = (select addr from v$process where spid='&spid'));
We could see “0” rows processed with the mentioned SID.
SQL> select
rows_processed
from
v$sql
where
hash_value=
(select
sql_hash_value
from
v$session
where paddr=
(select addr from v$process where spid='&spid')
); 2 3 4 5 6 7 8 9 10 11 12 13
Enter value for spid: 28914
old 12: (select addr from v$process where spid='&spid')
new 12: (select addr from v$process where spid='28914')
ROWS_PROCESSED
--------------
0
Accessplan comparision (running same/diff ):
**********************************************************
select BEGIN_INTERVAL_TIME, PLAN_HASH_VALUE PHV from DBA_HIST_SQLSTAT s,
DBA_HIST_SNAPSHOT a where SQL_ID=<sql_id found from v$session>'
and s.snap_id=a.snap_id
and s.instance_number=1
and a.instance_number=1
order by 1;
col BEGIN_INTERVAL_TIME for a35
select BEGIN_INTERVAL_TIME, PLAN_HASH_VALUE PHV from DBA_HIST_SQLSTAT s,
DBA_HIST_SNAPSHOT a where SQL_ID='adj06zhwr5n39'
and s.snap_id=a.snap_id
and s.instance_number=1
and a.instance_number=1
order by 1;
Long running Sessions:
*******************************
SELECT sid,opname,sofar, totalwork, units,elapsed_seconds,time_remaining FROM v$session_longops WHERE sofar != totalwork;
set lines 100 pages 999
col username format a15
col message format a40
col remaining format 9999
select SID,username
, to_char(start_time, 'hh24:mi:ss dd/mm/yy') started
, time_remaining remaining
, message
from v$session_longops
where time_remaining = 0
order by time_remaining desc;
select SID,SERIAL#,SOFAR,START_TIME,TIME_REMAINING,ELAPSED_SECONDS,MESSAGE from v$session_longops where SQL_ID = '62z84b4rzzscu';
select SID,SERIAL#,SOFAR,START_TIME,TIME_REMAINING,ELAPSED_SECONDS,MESSAGE from v$session_longops where SQL_ID = '62z84b4rzzscu' and SID='1460';
How long the query is runnig and how much completed:-
*************************************************************
set linesize 1000
column username format a15
column target format a29
column OPNAME format a25
SELECT USERNAME,SID,SERIAL#,TARGET,OPNAME,START_TIME,LAST_UPDATE_TIME,ELAPSED_SECONDS,TIME_REMAINING,MESSAGE FROM V$SESSION_LONGOPS WHERE TIME_REMAINING>0;
SELECT USERNAME,SID,SERIAL#,TARGET,OPNAME,START_TIME,LAST_UPDATE_TIME,ELAPSED_SECONDS,TIME_REMAINING,MESSAGE FROM V$SESSION_LONGOPS WHERE TIME_REMAINING>0 and SID='1460';
set linesize 200
column username format a15
column target format a25
column OPNAME format a25
SELECT USERNAME,TARGET,TOTALWORK,SOFAR,OPNAME,ELAPSED_SECONDS,TIME_REMAINING FROM V$SESSION_LONGOPS WHERE TOTALWORK<>SOFAR;
SELECT * FROM (SELECT USERNAME,OPNAME,SID,SERIAL#,CONTEXT,SOFAR,TOTALWORK,TARGET,ROUND(SOFAR/TOTALWORK*100,2) "% COMPLETE" FROM V$SESSION_LONGOPS) WHERE "% COMPLETE" != 100;
SELECT SID,USERNAME,TARGET,(sofar*100/TOTALWORK) "Percent work",OPNAME,ELAPSED_SECONDS,TIME_REMAINING FROM V$SESSION_LONGOPS WHERE TOTALWORK<>SOFAR and totalwork>0;
SQL to find the Session details and associated statement in excel format:
***********************************************************
SET MARKUP HTML ON ENTMAP ON SPOOL ON PREFORMAT OFF;
spool session_detail.xls
set pagesize 9999
column username format a10
column machine format a25
column type format a15
column sql_text format a40
column sid format 99999
column serial# 99999
set line 200
--
-- query metadata
--
select b.sid, b.serial#,a.spid spid,
to_char(b.LOGON_TIME,'dd/mm/yyyy hh:mi:ss'),
floor(b.last_call_et / 60) "Idle (min)",
b.machine machine,
b.inst_id INST_ID,
b.process process,
b.program,
b.type type,
b.status status,
b.username username,
c.sql_text sql_text
from v$process a,
v$session b,
v$sql c
where b.paddr = a.addr
and b.sql_address = c.address(+)
and b.type<>'BACKGROUND'
order by 2,4
/
Plan Table Output: Checked Xplan:
******************************
select * from table(dbms_xplan.display_cursor('ckg31y8rg6psa','','typical'));
Finding spid:
***********
select spid, osuser, s.program from v$process p, v$session s where p.addr=s.paddr and SID=889;
Sessions sorted by logon time/status:
******************************
set lines 100
set pages 999
col ID format a15
col osuser format a15
col login_time format a14
select username, osuser, sid, serial# "ID", status, to_char(logon_time, 'hh24:mi dd/mm/yy') login_time, last_call_et from v$session where username is not null order by status;
Time since last user activity:
************************
set lines 100 pages 999
select username, floor(last_call_et / 60) "Last Activity (Minutes)", status from v$session where username is not null order by last_call_et;
Show all connected users:
*********************
set lines 100 pages 999
col ID format a15
select username, sid, serial# "ID", status, last_call_et "Last Activity" from v$session where username is not null order by status desc, last_call_et desc;
Show a users current sql:
********************
select sql_text from v$sqlarea where (address, hash_value) in(select sql_address, sql_hash_value from v$session where username like '&username');
Show user info including os pid:
**************************
col username format a15
col osuser format a15
col program format a30
select s.sid, s.serial# "SID/SERIAL", s.username, s.osuser, p.spid "OS PID", s.program from v$session s, v$process p where s.paddr = p.addr order by to_number(p.spid);
Session status associated with the specified os process id:
**********************************************
select s.username, s.sid, s.serial#, p.spid, last_call_et, status from V$SESSION s, V$PROCESS p where s.PADDR = p.ADDR and p.spid='&pid';
Finding OS PID for a specific sid:
****************************
select s.sid, s.username, s.serial#, s.osuser, p.spid "OS PID", s.program from v$session s, v$process p where s.paddr=p.addr and s.sid='691';
Display any long operations:
************************
set lines 300 pages 999
col username format a15
col started format a25
col message format a40
col remaining format 9999
select SID, username, to_char(start_time, 'hh24:mi:ss dd/mm/yy') started, time_remaining remaining, message from v$session_longops
where time_remaining = 0 order by time_remaining desc;
select username, to_char(start_time, 'hh24:mi:ss dd/mm/yy') started, time_remaining remaining, message from v$session_longops where sid = '911';
List open cursors per user:
***********************
set pages 999
select sess.username, sess.sid, sess.serial#, stat.value cursors from v$sesstat stat, v$statname sn, v$session sess
where sess.username is not null and sess.sid = stat.sid
and stat.statistic# = sn.statistic#
and sn.name = 'opened cursors current'
order by value;
Show all connected users:
*********************
set lines 100 pages 999
select username, sid, serial# "ID", status, last_call_et "Last Activity" from v$session where username is not null order by status desc, last_call_et desc;
Finding Locks in DB:
******************
Set lines 200
col OBJECT_NAME for a25
col OBJECT_TYPE for a25
select a.sid,a.serial#,c.object_name,c.object_type
from v$session a,
v$locked_object b,
dba_objects c
where a.sid=b.session_id
and b.object_id=c.object_id and c.object_name='DB_MDS2_EVO_SUMMARY_TMP';
--------------------------------------------------------------------------------------------------------------
set lines 200 pages 1000
col Object_Name for a25
col Lock_Mode for a25
SELECT DISTINCT session_id as "Session Id",
a.os_user_name as "Os_user",
b.object_name "Object_Name",
decode(a.locked_mode,
2 ,'ROW SHARE MODE',
3 ,'ROW EXCLUSIVE MODE',
4 ,'SHARE MODE',
5 ,'SHARE ROW EXCLUSIVE MODE',
6 ,'EXCLUSIVE','UNKNOWN')as "Lock_Mode"
from v$locked_object a,
all_objects b
WHERE a.object_id = b.object_id and b.object_name='REPD_EVENT_DETAIL';
order by b.object_name;
--------------------------------------------------------------------------------------------------------------
To find locks with more details:
**************************
set lines 200
set pagesize 66
break on Kill on sid on username on terminal
column Kill heading 'Kill String' format a13
column res heading 'Resource Type' format 999
column id1 format 9999990
column id2 format 9999990
column locking heading 'Lock Held/Lock Requested' format a40
column lmode heading 'Lock Held' format a15
column request heading 'Lock Requested' format a15
column serial# format 99999
column username format a10 heading "Username"
column terminal heading Term format a8
column tab format a20 heading "Table Name"
column owner format a9
column LAddr heading "ID1 - ID2" format a18
column Lockt heading "Lock Type" format a34
column command format a25
column sid format 9999
select
nvl(S.USERNAME,'Internal') username,
L.SID,
nvl(S.TERMINAL,'None') terminal,
decode(command,
0,'None',decode(l.id2,0,U1.NAME||'.'||substr(T1.NAME,1,20),'None')) tab,
decode(command,
0,'BACKGROUND',
1,'Create Table',
2,'INSERT',
3,'SELECT',
4,'CREATE CLUSTER',
5,'ALTER CLUSTER',
6,'UPDATE',
7,'DELETE',
8,'DROP',
9,'CREATE INDEX',
10,'DROP INDEX',
11,'ALTER INDEX',
12,'DROP TABLE',
13,'CREATE SEQUENCE',
14,'ALTER SEQUENCE',
15,'ALTER TABLE',
16,'DROP SEQUENCE',
17,'GRANT',
18,'REVOKE',
19,'CREATE SYNONYM',
20,'DROP SYNONYM',
21,'CREATE VIEW',
22,'DROP VIEW',
23,'VALIDATE INDEX',
24,'CREATE PROCEDURE',
25,'ALTER PROCEDURE',
26,'LOCK TABLE',
27,'NO OPERATION',
28,'RENAME',
29,'COMMENT',
30,'AUDIT',
31,'NOAUDIT',
32,'CREATE EXTERNAL DATABASE',
33,'DROP EXTERNAL DATABASE',
34,'CREATE DATABASE',
35,'ALTER DATABASE',
36,'CREATE ROLLBACK SEGMENT',
37,'ALTER ROLLBACK SEGMENT',
38,'DROP ROLLBACK SEGMENT',
39,'CREATE TABLESPACE',
40,'ALTER TABLESPACE',
41,'DROP TABLESPACE',
42,'ALTER SESSION',
43,'ALTER USER',
44,'COMMIT',
45,'ROLLBACK',
46,'SAVEPOINT',
47,'PL/SQL EXECUTE',
48,'SET TRANSACTION',
49,'ALTER SYSTEM SWITCH LOG',
50,'EXPLAIN',
51,'CREATE USER',
52,'CREATE ROLE',
53,'DROP USER',
54,'DROP ROLE',
55,'SET ROLE',
56,'CREATE SCHEMA',
57,'CREATE CONTROL FILE',
58,'ALTER TRACING',
59,'CREATE TRIGGER',
60,'ALTER TRIGGER',
61,'DROP TRIGGER',
62,'ANALYZE TABLE',
63,'ANALYZE INDEX',
64,'ANALYZE CLUSTER',
65,'CREATE PROFILE',
66,'DROP PROFILE',
67,'ALTER PROFILE',
68,'DROP PROCEDURE',
69,'DROP PROCEDURE',
70,'ALTER RESOURCE COST',
71,'CREATE SNAPSHOT LOG',
72,'ALTER SNAPSHOT LOG',
73,'DROP SNAPSHOT LOG',
74,'CREATE SNAPSHOT',
75,'ALTER SNAPSHOT',
76,'DROP SNAPSHOT',
79,'ALTER ROLE',
85,'TRUNCATE TABLE',
86,'TRUNCATE CLUSTER',
87,'-',
88,'ALTER VIEW',
89,'-',
90,'-',
91,'CREATE FUNCTION',
92,'ALTER FUNCTION',
93,'DROP FUNCTION',
94,'CREATE PACKAGE',
95,'ALTER PACKAGE',
96,'DROP PACKAGE',
97,'CREATE PACKAGE BODY',
98,'ALTER PACKAGE BODY',
99,'DROP PACKAGE BODY',
command||' - ???') COMMAND,
decode(L.LMODE,1,'No Lock',
2,'Row Share',
3,'Row Exclusive',
4,'Share',
5,'Share Row Exclusive',
6,'Exclusive','NONE') lmode,
decode(L.REQUEST,1,'No Lock',
2,'Row Share',
3,'Row Exclusive',
4,'Share',
5,'Share Row Exclusive',
6,'Exclusive','NONE') request,
l.id1||'-'||l.id2 Laddr,
l.type||' - '||
decode(l.type,
'BL','Buffer hash table instance lock',
'CF',' Control file schema global enqueue lock',
'CI','Cross-instance function invocation instance lock',
'CS','Control file schema global enqueue lock',
'CU','Cursor bind lock',
'DF','Data file instance lock',
'DL','Direct loader parallel index create',
'DM','Mount/startup db primary/secondary instance lock',
'DR','Distributed recovery process lock',
'DX','Distributed transaction entry lock',
'FI','SGA open-file information lock',
'FS','File set lock',
'HW','Space management operations on a specific segment lock',
'IN','Instance number lock',
'IR','Instance recovery serialization global enqueue lock',
'IS','Instance state lock',
'IV','Library cache invalidation instance lock',
'JQ','Job queue lock',
'KK','Thread kick lock',
'MB','Master buffer hash table instance lock',
'MM','Mount definition gloabal enqueue lock',
'MR','Media recovery lock',
'PF','Password file lock',
'PI','Parallel operation lock',
'PR','Process startup lock',
'PS','Parallel operation lock',
'RE','USE_ROW_ENQUEUE enforcement lock',
'RT','Redo thread global enqueue lock',
'RW','Row wait enqueue lock',
'SC','System commit number instance lock',
'SH','System commit number high water mark enqueue lock',
'SM','SMON lock',
'SN','Sequence number instance lock',
'SQ','Sequence number enqueue lock',
'SS','Sort segment lock',
'ST','Space transaction enqueue lock',
'SV','Sequence number value lock',
'TA','Generic enqueue lock',
'TD','DDL enqueue lock',
'TE','Extend-segment enqueue lock',
'TM','DML enqueue lock',
'TO','Temporary Table Object Enqueue',
'TT','Temporary table enqueue lock',
'TX','Transaction enqueue lock',
'UL','User supplied lock',
'UN','User name lock',
'US','Undo segment DDL lock',
'WL','Being-written redo log instance lock',
'WS','Write-atomic-log-switch global enqueue lock',
'TS',decode(l.id2,0,'Temporary segment enqueue lock (ID2=0)',
'New block allocation enqueue lock (ID2=1)'),
'LA','Library cache lock instance lock (A=namespace)',
'LB','Library cache lock instance lock (B=namespace)',
'LC','Library cache lock instance lock (C=namespace)',
'LD','Library cache lock instance lock (D=namespace)',
'LE','Library cache lock instance lock (E=namespace)',
'LF','Library cache lock instance lock (F=namespace)',
'LG','Library cache lock instance lock (G=namespace)',
'LH','Library cache lock instance lock (H=namespace)',
'LI','Library cache lock instance lock (I=namespace)',
'LJ','Library cache lock instance lock (J=namespace)',
'LK','Library cache lock instance lock (K=namespace)',
'LL','Library cache lock instance lock (L=namespace)',
'LM','Library cache lock instance lock (M=namespace)',
'LN','Library cache lock instance lock (N=namespace)',
'LO','Library cache lock instance lock (O=namespace)',
'LP','Library cache lock instance lock (P=namespace)',
'LS','Log start/log switch enqueue lock',
'PA','Library cache pin instance lock (A=namespace)',
'PB','Library cache pin instance lock (B=namespace)',
'PC','Library cache pin instance lock (C=namespace)',
'PD','Library cache pin instance lock (D=namespace)',
'PE','Library cache pin instance lock (E=namespace)',
'PF','Library cache pin instance lock (F=namespace)',
'PG','Library cache pin instance lock (G=namespace)',
'PH','Library cache pin instance lock (H=namespace)',
'PI','Library cache pin instance lock (I=namespace)',
'PJ','Library cache pin instance lock (J=namespace)',
'PL','Library cache pin instance lock (K=namespace)',
'PK','Library cache pin instance lock (L=namespace)',
'PM','Library cache pin instance lock (M=namespace)',
'PN','Library cache pin instance lock (N=namespace)',
'PO','Library cache pin instance lock (O=namespace)',
'PP','Library cache pin instance lock (P=namespace)',
'PQ','Library cache pin instance lock (Q=namespace)',
'PR','Library cache pin instance lock (R=namespace)',
'PS','Library cache pin instance lock (S=namespace)',
'PT','Library cache pin instance lock (T=namespace)',
'PU','Library cache pin instance lock (U=namespace)',
'PV','Library cache pin instance lock (V=namespace)',
'PW','Library cache pin instance lock (W=namespace)',
'PX','Library cache pin instance lock (X=namespace)',
'PY','Library cache pin instance lock (Y=namespace)',
'PZ','Library cache pin instance lock (Z=namespace)',
'QA','Row cache instance lock (A=cache)',
'QB','Row cache instance lock (B=cache)',
'QC','Row cache instance lock (C=cache)',
'QD','Row cache instance lock (D=cache)',
'QE','Row cache instance lock (E=cache)',
'QF','Row cache instance lock (F=cache)',
'QG','Row cache instance lock (G=cache)',
'QH','Row cache instance lock (H=cache)',
'QI','Row cache instance lock (I=cache)',
'QJ','Row cache instance lock (J=cache)',
'QL','Row cache instance lock (K=cache)',
'QK','Row cache instance lock (L=cache)',
'QM','Row cache instance lock (M=cache)',
'QN','Row cache instance lock (N=cache)',
'QO','Row cache instance lock (O=cache)',
'QP','Row cache instance lock (P=cache)',
'QQ','Row cache instance lock (Q=cache)',
'QR','Row cache instance lock (R=cache)',
'QS','Row cache instance lock (S=cache)',
'QT','Row cache instance lock (T=cache)',
'QU','Row cache instance lock (U=cache)',
'QV','Row cache instance lock (V=cache)',
'QW','Row cache instance lock (W=cache)',
'QX','Row cache instance lock (X=cache)',
'QY','Row cache instance lock (Y=cache)',
'QZ','Row cache instance lock (Z=cache)','????') Lockt
from V$LOCK L,
GV$SESSION S,
SYS.USER$ U1,
SYS.OBJ$ T1
where L.SID = S.SID
and T1.OBJ# = decode(L.ID2,0,L.ID1,1)
and U1.USER# = T1.OWNER#
and S.TYPE != 'BACKGROUND'
order by 1,2,5;
Finding All active sql:
*******************
set feedback offset
server output on size 9999
column username format a20
column sql_text format a55 word_wrapped
begin
for x in
(select username'('sid','serial#') ospid = ' process ' program = ' program username,
to_char(LOGON_TIME,' Day HH24:MI') logon_time,
to_char(sysdate,' Day HH24:MI') current_time,
sql_address,
sql_hash_value from v$session
where status = 'ACTIVE' and rawtohex(sql_address) <> '00'
and username is not null ) loop
for y in
(select sql_text from v$sqlarea where address = x.sql_address ) loop
if ( y.sql_text not like '%listener.get_cmd%' and
y.sql_text not like '%RAWTOHEX(SQL_ADDRESS)%' )
then dbms_output.put_line( '--------------------' );
dbms_output.put_line( x.username );
dbms_output.put_line( x.logon_time ' ' x.current_time ' SQL#=' x.sql_hash_value); dbms_output.put_line( substr( y.sql_text, 1, 250 ) );
end if;
end loop;
end loop;
end;
/
Blocking Tables:
*************
select (select username || ' - ' || osuser from v$session where sid=a.sid) blocker, a.sid || ', ' || (select serial# from v$session where sid=a.sid) sid_serial, ' is blocking ', (select username || ' - ' || osuser from v$session where sid=b.sid) blockee, b.sid || ', ' || (select serial# from v$session where sid=b.sid) sid_serial from v$lock a, v$lock b where a.block = 1 and b.request > 0 and a.id1 = b.id1 and a.id2 = b.id2;
select * from dba_dml_locks where name='FRULLO.INTERF_OPZIONI';
select c.owner, c.object_name, c.object_type, b.sid, b.serial#, b.status,b.osuser,b.machine from v$locked_object a, v$session b, dba_objects c where b.sid = a.session_id and a.object_id = c.object_id;
Identify the session which is locking the object:-
***************************************
select OWNER, TABLE_NAME from dba_tables where table_name = 'INTERF_OPZIONI';
SELECT owner,
segment_name,
segment_type,
tablespace_name,
bytes/1048576 MB,
initial_extent,
next_extent,
extents,
pct_increase
FROM
DBA_SEGMENTS
WHERE
OWNER = 'FRULLO' AND
SEGMENT_NAME = 'INTERF_OPZIONI' AND
SEGMENT_TYPE = 'TABLE'
/
select a.sid, a.serial#
from v$session a, v$locked_object b, dba_objects c
where b.object_id = c.object_id
and a.sid = b.session_id
and OBJECT_NAME='FRULLO.INTERF_OPZIONI';
To identify the locked rows, use the below query:-
****************************************
set lines 200
col object_name for a30
select do.object_name
, row_wait_obj#
, row_wait_file#
, row_wait_block#
, row_wait_row#
, dbms_rowid.rowid_create (1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#,
ROW_WAIT_BLOCK#, ROW_WAIT_ROW#) ROW_ID
from v$session s
, dba_objects do
where s.ROW_WAIT_OBJ# = do.OBJECT_ID
and do.object_name=upper('<object_name_from_above_query>');
O/P:
OBJECT_NAME ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW# ROW_ID
----------- ------------- -------------- --------------- ------------- ------
LOCK_TEST 41862 4 70 0 AAAKOGAAEAAAABGAAA
*******************************************************
SELECT a.sid,a.serial#, a.username,
s.sql_text
FROM V$SESSION a, V$SQLTEXT s
WHERE a.sql_address = s.address
AND a.sql_hash_value = s.hash_value
AND a.username like '&user'
ORDER BY a.username,a.sid,s.piece;
******************************************************
SQL> select resource_name, current_utilization, max_utilization from v$resource_limit where resource_name in ('processes','sessions');
Show a users current sql:-
****************************
Select sql_text
from v$sqlarea
where (address, hash_value) in
(select sql_address, sql_hash_value
from v$session
where username like '&username');
Show user info including os pid:-
***************************
col "SID/SERIAL" format a10
col username format a15
col osuser format a15
col program format a40
select s.sid || ',' || s.serial# "SID/SERIAL"
, s.username
, s.osuser
, p.spid "OS PID"
, s.program
from v$session s
, v$process p
Where s.paddr = p.addr
order by to_number(p.spid);
SELECT a.object,
a.type,
a.sid,
b.username,
b.osuser,
b.program
FROM v$access a,
v$session b
WHERE a.sid = b.sid
AND a.owner = UPPER('&ENTER_SCHEMA_NAME')
AND a.sid = &enter_session_id
ORDER BY a.object
/
SELECT a.object,
a.type,
a.sid,
b.username,
b.osuser,
b.program
FROM v$access a,
v$session b
WHERE a.sid = b.sid
AND a.owner = UPPER('H3G_TRAFFICO')
AND a.sid in ('544','329','307','169','447','505','546','564','583','606','624','85','65','48','1','21')
ORDER BY a.object
/
-- Finding details using username:
SELECT sid,a.SQL_TEXT FROM v$session s, v$sqlarea a WHERE s.sql_address = a.ADDRESS AND s.sql_hash_value = a.hash_value AND s.username like 'C2%';
-- Finding Blocking sessions with v$session
SELECT s.blocking_session,s.sid,s.serial#,s.seconds_in_wait FROM v$session s WHERE blocking_session IS NOT NULL;
-- find blocking sessions using v$lock
SELECT
l1.sid || ' is blocking ' || l2.sid blocking_sessions
FROM
v$lock l1, v$lock l2
WHERE
l1.block = 1 AND
l2.request > 0 AND
l1.id1 = l2.id1 AND
l1.id2 = l2.id2;
--blocking sessions with all available information (including machine name)
SELECT s1.username || '@' || s1.machine
|| ' ( SID=' || s1.sid || ' ) is blocking '
|| s2.username || '@' || s2.machine || ' ( SID=' || s2.sid || ' ) ' AS blocking_status
FROM v$lock l1, v$session s1, v$lock l2, v$session s2
WHERE s1.sid=l1.sid AND s2.sid=l2.sid
AND l1.BLOCK=1 AND l2.request > 0
AND l1.id1 = l2.id1
AND l1.id2 = l2.id2;
-- identifying blocked objects(when TM lock condition)
SELECT sid, id1 FROM v$lock WHERE TYPE='TM';
SELECT object_name,object_type FROM dba_objects WHERE object_id=&1; (provide value ID1 from abov
+666
View File
@@ -0,0 +1,666 @@
select x.sid
,x.serial#
,x.username
,x.sql_id
,x.sql_child_number
,optimizer_mode
,hash_value
,address
,sql_text
from v$sqlarea sqlarea
,v$session x
where x.sql_hash_value = sqlarea.hash_value
and x.sql_address = sqlarea.address
and x.sid = 763
and x.username like '%CHOIMAL%' ;
select sid, event, blocking_session, last_call_et
from v$session
where status = 'ACTIVE'
and blocking_session is not null;
select sid, seq#, EVENT, WAIT_CLASS, SECONDS_IN_WAIT
from v$session_wait where sid='763';
SELECT ROUND(SOFAR*21411/TOTALWORK)
FROM V$SESSION_LONGOPS
WHERE username like '%MAL%'
AND TIME_REMAINING > 0
1134
1430
select STATUS, WAIT_TIME, LOGON_TIME from v$session where username like '%CHOIMAL%'
select sql_text from v$sqltext where sql_id=1134;
select blocking_session, sid, serial#, wait_class, seconds_in_wait
from v$session where username like '%CHOIMAL%';
select sid, serial#, username, program, event, p1, status, sql_id from v$session where username like '%CHOIMAL%';
select sid from v$session where username like '%CHOIMAL%';
select sql_id from v$session where username like '%CHOIMAL%';
FROM A SPECIFIC USERNAME -------------------This only we want
----------------------
SET LINSIZE 152
col spid for a10
col process_spid for a10
col user_name for a20
col form_name for a20
select a.pid,a.spid,a.process_spid, c.user_name,to_char(a.start_time,'DD-MON-YYYY HH24:MI:SS') "START_TIME" ,
d.user_form_name "FORM_NAME"
from apps.fnd_logins a, apps.fnd_login_resp_forms b, apps.fnd_user c,
apps.fnd_form_tl d
where
a.login_id=b.login_id
and c.user_name like 'JROMO'
and a.user_id=c.user_id
and trunc(b.start_time) >trunc(sysdate -11)
and trunc(b.end_time) is null
and b.form_id=d.form_id
and d.language='US';
Total Count of sessions
-----------------------
select count(s.status) TOTAL_SESSIONS from gv$session s;
Total Count of Inactive sessions
---------------------------------
select count(s.status) INACTIVE_SESSIONS
from gv$session s, v$process p
where
p.addr=s.paddr and
s.status='INACTIVE';
SESSIONS WHICH ARE IN INACTIVE STATUS FROM MORE THAN 1HOUR
select count(s.status) "INACTIVE SESSIONS > 1HOUR "
from gv$session s, v$process p
where
p.addr=s.paddr and
s.last_call_et > 3600 and
s.status='INACTIVE';
COUNT OF ACTIVE SESSIONS
--------------------------
select count(s.status) ACTIVE_SESSIONS
from gv$session s, v$process p
where
p.addr=s.paddr and
s.status='ACTIVE';
TOTAL SESSIONS COUNT ORDERED BY PROGRAM
--------------------------------------
col program for a30
select s.program,count(s.program) Total_Sessions
from gv$session s, v$process p
where p.addr=s.paddr
group by s.program;
TOTAL COUNT OF SESSIONS ORDERED BY MODULE
----------------------------------------
col module for a30
prompt TOTAL SESSIONS
select s.module,count(s.sid) Total_Sessions
from gv$session s, v$process p
where p.addr=s.paddr
group by s.module;
TOTAL COUNT OF SESSIONS ORDERED BY ACTION
----------------------------------------
col action for a30
prompt TOTAL SESSIONS
select s.action,count(s.sid) Total_Sessions
from gv$session s, v$process p
where p.addr=s.paddr
group by s.action;
INACTIVE SESSIONS
-----------------
prompt INACTIVE SESSIONS
select p.spid, s.sid,s.last_call_et/3600 last_call_et ,s.status,s.action,s.module,s.program
from gv$session s, v$process p
where
p.addr=s.paddr and
s.status='INACTIVE';
INACTIVE
---------
prompt INACTIVE SESSIONS
select count(s.status) INACTIVE
from gv$session s, gv$sqlarea t,v$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.status='INACTIVE';
INACTIVE PROGRAMS
-------------------
col module for a40
prompt INACTIVE SESSIONS
col INACTIVE_PROGRAMS FOR A40
select distinct (s.program) INACTIVE_PROGRAMS,s.module
from gv$session s, v$process p
where p.addr=s.paddr and
s.status='INACTIVE';
INACTIVE PROGRAMS with disk reads
----------------------------------
prompt INACTIVE SESSIONS
select distinct (s.program) INACTIVE_PROGRAMS,SUM(T.DISK_READS)
from gv$session s, gv$sqlarea t,v$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.status='INACTIVE'
GROUP BY S.PROGRAM;
INACTIVE SESSIONS COUNT WITH PROGRAM
--------------------------------------
col program for a30
prompt TOTAL INACTIVE SESSIONS
col INACTIVE_PROGRAMS FOR A40
select s.program,count(s.program) Total_Inactive_Sessions
from gv$session s,v$process p
where p.addr=s.paddr AND
s.status='INACTIVE'
group by s.program
order by 2 desc;
TOTAL INACTIVE SESSIONS MORE THAN 1HOUR
---------------------------------------
col program for a30
col INACTIVE_PROGRAMS FOR A40
select s.program,count(s.program) Inactive_Sessions_from_1Hour
from gv$session s,v$process p
where p.addr=s.paddr AND
s.status='INACTIVE'
and s.last_call_et > (3600)
group by s.program
order by 2 desc;
TOTAL INACTIVE SESSIONS GROUP BY MODULE
col program for a60
COL MODULE FOR A30
prompt TOTAL SESSIONS
col INACTIVE_PROGRAMS FOR A40
select s.module,count(s.module) Total_Inactive_Sessions
from gv$session s,v$process p
where p.addr=s.paddr AND
s.status='INACTIVE'
group by s.module;
INACTIVE SESSION DETAILS MORE THAN 1 HOUR
--------------------------------------------
set pagesize 40
col INST_ID for 99
col spid for a10
set linesize 150
col PROGRAM for a10
col action format a10
col logon_time format a16
col module format a13
col cli_process format a7
col cli_mach for a15
col status format a10
col username format a10
col last_call_et_Hrs for 9999.99
col sql_hash_value for 9999999999999col username for a10
set linesize 152
set pagesize 80
col "Last SQL" for a60
col elapsed_time for 999999999999
select p.spid, s.sid,s.last_call_et/3600 last_call_et_Hrs ,s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL"
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.status='INACTIVE'
and s.last_call_et > (3600)
order by last_call_et;
INACTIVE PROGRAM --ANY--
------------------------
select p.spid, s.sid,s.last_call_et/3600 last_call_et_Hrs ,s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL"
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.status='INACTIVE'
And s.program='&PROGRAM_NAME'
order by last_call_et;
INACTIVE MODULES --ANY---
--------------------------
select p.spid, s.sid,s.last_call_et/3600 last_call_et_Hrs ,s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL"
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr
And s.module like '%order_cleanup_hazmat_v3.sql'
order by last_call_et;
INACTIVE JDBC SESSIONS
------------------------
set pagesize 40
col INST_ID for 99
col spid for a10
set linesize 150
col PROGRAM for a10
col action format a10
col logon_time format a16
col module format a13
col cli_process format a7
col cli_mach for a15
col status format a10
col username format a10
col last_call_et for 9999.99
col sql_hash_value for 9999999999999col username for a10
set linesize 152
set pagesize 80
col "Last SQL" for a60
col elapsed_time for 999999999999
select p.spid, s.sid,s.last_call_et/3600 last_call_et ,s.status,s.action,
s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL"
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.status='INACTIVE'
and s.program='JDBC Thin Client'
and s.last_call_et > 3600
order by last_call_et;
COUNT OF INACTIVE SESSIONS MORE THAN ONE HOUR
---------------------------------------------
SELECT COUNT(P.SPID)
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.status='INACTIVE'
and s.program='JDBC Thin Client'
and s.last_call_et > 3600
order by last_call_et;
FORMS
TOTAL FORM SESSIONS
----------------------
SELECT COUNT(S.SID) INACTIVE_FORM_SESSIONS FROM V$SESSION S
WHERE S.STATUS='INACTIVE' and
s.action like ('%FRM%');
FORMS SESSIONS DETAILS
-----------------------
col "Last SQL" for a30
select p.spid,s.sid,s.status,s.last_call_et/3600 last_call_et_hrs ,
s.sid,t.disk_reads, t.elapsed_time,lpad(t.sql_text,30) "Last SQL"
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.action like ('FRM%') and
s.last_call_et > 3600
order by spid;
col machine for a15
col "Last SQL" for a30
select p.spid,s.sid,s.status,s.last_call_et/3600 last_call_et_hrs ,
S.ACTION,s.process Client_Process,s.machine
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.action like ('FRM%') and
s.last_call_et > 3600;
order by 4;
INACTIVE FORMS SESSIONS DETAILS
-------------------------------
col program for a15
col last_call_et for 999.99
select p.spid, s.sid, s.process,s.last_call_et/3600 last_call_et ,s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL"
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.status='INACTIVE'
and s.action like 'FRM:%'
and s.last_call_et > 3600
order by last_call_et desc;
UNIQUE SPID
------------
select unique(p.spid)
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.status='INACTIVE'
and s.action like 'FRM:%'
and s.last_call_et > 3600;
COUNT FORMS
------------
select COUNT(p.spid)
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.status='INACTIVE'
and s.action like 'FRM:%'
and s.last_call_et > 3600;
ZERO HASH VALUE
-----------------
select COUNT(p.spid)
from gv$session s,gv$process p
where
p.addr=s.paddr and
s.status='INACTIVE'
and s.action like 'FRM:%'
and s.last_call_et > 3600
AND S.SQL_HASH_VALUE=0;
INACTIVE FORM BY NAME
---------------------
select count(s.sid) from v$session S
where s.action like ('%&ACTION%')
AND S.STATUS='INACTIVE';
GROUP BY ACTION
---------------
SELECT S.ACTION,COUNT(S.SID) FROM V$SESSION S
WHERE S.STATUS='INACTIVE' and
s.action like ('%FRM%')
group by s.action;
INACTIVE FORM
-----------------
set pagesize 40
col INST_ID for 99
col spid for a10
set linesize 150
col PROGRAM for a10
col action format a10
col logon_time format a16
col module format a13
col cli_process format a7
col cli_mach for a15
col status format a10
col username format a10
col last_call_et for 9999.99
col sql_hash_value for 9999999999999col username for a10
set linesize 152
set pagesize 80
col "Last SQL" for a30
col elapsed_time for 999999999999
select p.spid, s.sid,s.process cli_process,s.last_call_et/3600 last_call_et ,
s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL"
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.status='INACTIVE'
and s.action like ('FRM%')
and s.last_call_et > (3600*3)
order by last_call_et;
INACTIVE FORM SESSIONS
---------------------
col cli_proc for a9
COL AUDSID FOR A6
COL PID FOR A6
COL SID FOR A5
COL FORM_NAME FOR A25
COL USER_NAME FOR A15
col last_call_et for 9999.99
SELECT
-- /*+ ORDERED FULL(fl) FULL(vp) USE_HASH(fl vp) */
( SELECT SUBSTR ( fu.user_name, 1, 20 )
FROM apps.fnd_user fu
WHERE fu.user_id = fl.user_id
) user_name,vs.status,
TO_CHAR ( fl.start_time, 'DD-MON-YYYY HH24:MI' ) login_start_time,
TO_CHAR ( fl.end_time, 'DD-MON-YYYY HH24:MI' ) login_end_time,
vs.last_call_et/3600 last_call_et,
SUBSTR ( fl.process_spid, 1, 6 ) spid,
SUBSTR ( vs.process, 1, 8 ) cli_proc,
SUBSTR ( TO_CHAR ( vs.sid ), 1, 3 ) sid,
SUBSTR ( TO_CHAR ( vs.serial#), 1, 7 ) serial#,
SUBSTR ( TO_CHAR ( rf.audsid ), 1, 6 ) audsid,
SUBSTR ( TO_CHAR ( fl.pid ), 1, 3 ) pid,
SUBSTR ( vs.module || ' - ' ||
( SELECT SUBSTR ( ft.user_form_name, 1, 40 )
FROM apps.fnd_form_tl ft
WHERE ft.application_id = rf.form_appl_id
AND ft.form_id = rf.form_id
AND ft.language = USERENV('LANG')
), 1, 40 ) form_name
FROM apps.fnd_logins fl,
gv$process vp,
apps.fnd_login_resp_forms rf,
gv$session vs
WHERE fl.start_time > sysdate - 7 /* login within last 7 days */
AND fl.login_type = 'FORM'
AND fl.process_spid = vp.spid
AND fl.pid = vp.pid
AND fl.login_id = rf.login_id
AND rf.end_time IS NULL
AND rf.audsid = vs.audsid
and vs.status='INACTIVE'
ORDER BY
vs.process,
fl.process_spid;
ACTIVE
-------
prompt ACTIVE SESSIONS
select count(s.status) ACTIVE
from gv$session s, gv$sqlarea t,v$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.status='ACTIVE';
MODULE
-------
set pagesize 40
col INST_ID for 99
col spid for a10
set linesize 150
col PROGRAM for a10
col action format a10
col logon_time format a16
col module format a13
col cli_process format a7
col cli_mach for a15
col status format a10
col username format a10
col last_call_et for 9999.99
col sql_hash_value for 9999999999999col username for a10
set linesize 152
set pagesize 80
col "Last SQL" for a30
col elapsed_time for 999999999999
select p.spid, s.sid,s.process cli_process,s.last_call_et/3600 last_call_et ,
s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL"
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr
and s.MODULE like ('&MODULE_NAME_1HR%')
and s.last_call_et > ('&TIME_HRS' * 3600)
order by last_call_et;
select p.spid, s.sid,s.process cli_process,s.last_call_et/3600 last_call_et ,
s.status,s.action,s.module,s.program
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
p.addr=s.paddr
and s.MODULE like ('%TOAD%')
Order by last_call_et;
TOAD SESSIONS
-------------
select p.spid, s.sid,s.process cli_process,s.last_call_et/3600 last_call_et ,
s.status,s.action,s.module,s.program
from gv$session s, gv$process p
where
p.addr=s.paddr
and s.MODULE like ('%TOAD%')
Order by last_call_et;
CLIENT MACHINE SESSIONS COUNT
-----------------------------
select count(s.process) TOTAL from v$session S
where s.machine like ('%&CLIENT_MACHINE%');
select count(s.process) INACTIVE from v$session S
where s.machine like ('%&CLIENT_MACHINE%')
and s.status='INACTIVE';
hash value=0
-------------
select count(s.process) from v$session S
where s.machine like ('%&CLIENT_MACHINE%')
AND S.SQL_HASH_VALUE=0;
select count(s.process) from v$session S
where s.machine like ('%&CLIENT_MACHINE%')
AND S.SQL_HASH_VALUE=0
AND S.LAST_CALL_ET > 3600;
Unique Actions
---------------
col module for a40
prompt INACTIVE SESSIONS
col INACTIVE_PROGRAMS FOR A40
select distinct (s.program) INACTIVE_PROGRAMS,s.module
from gv$session s, gv$sqlarea t,v$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
s.machine like ('%&CLIENT_MACHINE%') AND
p.addr=s.paddr and
s.status='INACTIVE';
GROUP BY program
------------------
col program for a60
prompt TOTAL SESSIONS
col INACTIVE_PROGRAMS FOR A40
select s.program,count(s.program) Total_Inactive_Sessions
from gv$session s, gv$sqlarea t,v$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr AND
s.machine like ('%&CLIENT_MACHINE%') AND
s.status='INACTIVE'
group by s.program;
alter system kill session 'sid,serial#' immediate;
alter system kill session '2208, 37605' immediate;
alter system kill session '1308,38903' immediate;
alter system kill session '277,30355' immediate;
ALTER SYSTEM DISCONNECT SESSION '304,3276' IMMEDIATE;
select 'Alter system kill session '''||SID||','||SERIAL#||''';' from v$session where status ='INACTIVE' and username='H3G_ODS';
select 'Alter system kill session '''||SID||','||SERIAL#||''' immediate;' from v$session where username like 'NSISNW';
select 'Alter system kill session '''||SID||','||SERIAL#||''' IMMEDIATE;' from v$session where sid=143;
select 'Alter system kill session '''||SID||','||SERIAL#||''' IMMEDIATE;', to_char(logon_time, 'hh24:mi:ss dd/mm/yy') login_time from v$SESSION where status='INACTIVE';
select SID,SERIAL#,status from v$session where sid=143;
select status from v$session where SERIAL=53718
----------------------------------------
Check how rollback is going after killing session
Summary
If you kill a session and has uncommited transactions you must wait until rollback. To find how rollback is going execute
SELECT used_ublk FROM v$transaction WHERE ADDR IN (SELECT TADDR FROM v$session WHERE SID = <SID>)
where sid, is the sid of the killed session
If there is a value there, this is the number of undo blocks used by the transaction. Wait one minute and again. If it is decreasing, a rollback is occuring and based on the difference between these values, you can "guesstimate" the time required to complete the rollback.
Output will be like the below
SQL> SELECT used_ublk FROM v$transaction WHERE ADDR IN (SELECT TADDR FROM v$session WHERE SID = 304);
USED_UBLK
----------
270265
SQL> /
USED_UBLK
----------
270244
where the USED_UBLK keeps reducing
alter system kill session 'sid,serial#' immediate;
alter system kill session '2208, 37605' immediate;
alter system kill session '1308,38903' immediate;
alter system kill session '277,30355' immediate;
ALTER SYSTEM DISCONNECT SESSION '304,3276' IMMEDIATE;
select 'Alter system kill session '''||SID||','||SERIAL#||''';' from v$session where status ='INACTIVE' and username='H3G_ODS';
select 'Alter system kill session '''||SID||','||SERIAL#||''' immediate;' from v$session where username like 'NSISNW';
select 'Alter system kill session '''||SID||','||SERIAL#||''' IMMEDIATE;' from v$session where sid=143;
select 'Alter system kill session '''||SID||','||SERIAL#||''' IMMEDIATE;', to_char(logon_time, 'hh24:mi:ss dd/mm/yy') login_time from v$SESSION where status='INACTIVE';
select SID,SERIAL#,status from v$session where sid=143;
select status from v$session where SERIAL=53718
----------------------------------------
Check how rollback is going after killing session
Summary
If you kill a session and has uncommited transactions you must wait until rollback. To find how rollback is going execute
SELECT used_ublk FROM v$transaction WHERE ADDR IN (SELECT TADDR FROM v$session WHERE SID = <SID>)
where sid, is the sid of the killed session
If there is a value there, this is the number of undo blocks used by the transaction. Wait one minute and again. If it is decreasing, a rollback is occuring and based on the difference between these values, you can "guesstimate" the time required to complete the rollback.
Output will be like the below
SQL> SELECT used_ublk FROM v$transaction WHERE ADDR IN (SELECT TADDR FROM v$session WHERE SID = 304);
USED_UBLK
----------
270265
SQL> /
USED_UBLK
----------
270244
where the USED_UBLK keeps reducing
+11
View File
@@ -0,0 +1,11 @@
col instance_name for a20
col Instance Up Time for a50
SELECT instance_name,
floor(((sysdate-startup_time)*24*60*60)/3600/24) || ' DAYS '
|| floor ((floor(((sysdate-startup_time)*24*60*60)) -
floor(((sysdate-startup_time)*24*60*60)/3600/24)*24*60*60)/3600) || ' Hours '
|| floor(floor ((floor(((sysdate-startup_time)*24*60*60))
- floor(((sysdate-startup_time)*24*60*60)/3600/24)*24*60*60) -
( floor ((floor(((sysdate-startup_time)*24*60*60)) -
floor(((sysdate-startup_time)*24*60*60)/3600/24)*24*60*60)/3600))*60*60)/60) || ' MINUTES '
FROM v$instance;
+113
View File
@@ -0,0 +1,113 @@
https://oracle-base.com/dba/script?category=monitoring&file=jobs.sql = Jobs Scripts
http://oracledbazone.com/scripts/ = All Scripts
http://oracledbascriptsfromajith.blogspot.in/ = Scripts
https://communities.bmc.com/docs/DOC-9942 = listener checking scripts
http://www.idevelopment.info/cgi/ORACLE_dba_scripts.cgi = All Scripts
https://usdc1sp002.chep.com:7799/em
https://chep.service-now.com/navpage.do
http://www.idevelopment.info/data/Oracle/DBA_tips/Automatic_Storage_Management/ASM_50.shtml
http://gavinsoorma.com/category/scripts/
https://oe.us.dell.com/
http://select-star-from.blogspot.in/2012/12/delete-archivelogs-and-old-rman-backups.html
Dataguard
---------
http://emrebaransel.blogspot.in/2013/07/data-guard-queries.html
http://www.pafumi.net/Standby_Concepts_Configuration.html
http://www.orafaq.com/forum/t/176313/
http://oracledatabasegrid.blogspot.in/p/dataguard_4.html
http://askdba.org/weblog/resource-center/useful-sql-dba/
Undo parameter
--------------
http://www.akadia.com/services/ora_optimize_undo.html
http://oracledatabasegrid.blogspot.in/p/dgmgrl.html
Trace file:
-----------
http://csl-oracle.blogspot.in/2013/01/finding-location-of-oracle-alert-log.html
Syncplicity:
------------
https://my.syncplicity.com/Default.aspx
ASM
---
http://noriegaaoracleexpert.blogspot.in/2010/06/asm-load-balancing-anthony-d.html?m=1
http://appsdbaera.blogspot.in/2013/04/oracle-asm-load-balancing.html
http://www.sivakumardba.com/2013/02/adding-new-asm-disk-into-existing.html
RAC
---
http://www.databasejournal.com/features/oracle/article.php/3681531/Oracle-RAC-Checking-RAC-status-with-SQLOS-level-statements.htm
https://dbamohsin.wordpress.com/2011/02/09/rac-services-command-list/
http://oracledbabay.blogspot.in/2012/11/oracle-11gr2-rac-services.html
https://community.oracle.com/welcome
http://oracledatabasegrid.blogspot.in/2014/07/oracle-11gr2-rac-oc4j-and-gsd-resource.html
DBA_Jobs
--------
http://www.dba-oracle.com/t_how_to_tell_when_scheduled_job_is_running.htm
https://community.oracle.com/thread/557102?start=60&tstart=0
http://ora-apps-dba.blogspot.in/2009/07/repair-broken-jobs-in-dbajobs.html
http://oracledatabasegrid.blogspot.in/2014/07/oracle-11gr2-rac-oc4j-and-gsd-resource.html
https://dbhk.wordpress.com/2014/11/13/ctssd1883crs-2409the-clock-on-host-xxxxx-is-not-synchronous-with-the-mean-cluster-time-no-action-has-been-taken-as-the-cluster-time-synchronization-service-is-running-in-observer-mode/
http://oradbatips.blogspot.in/2012/12/tip-104-node-eviction-in-rac-11gr2-due.html
http://docs.oracle.com/cd/E19044-01/sol.containers/817-1592/rmtaskproj.task-6/index.html
Alert log:
---------
http://www.oradba.ch/2013/07/query-alert-log-from-sqlplus/
Agent
-----
https://mehmeteser.wordpress.com/tag/emctl-clearstate-agent/
http://www.pythian.com/blog/how-to-fix-a-target-with-a-pending-status-in-oem-12cr2/
https://jhdba.wordpress.com/tag/clearstate/
http://www.idevelopment.info/data/Oracle/DBA_tips/Enterprise_Manager/OEM_15.shtml
DBA_profiles:
--------------
http://kannan-oracle.blogspot.in/2012/06/how-to-show-user-profile-and-change-its.html
GRID INSTALLATION:
=================
https://balakumarnair.wordpress.com/2011/02/13/oracle-11gr1-enterprise-manager-grid-control-oem-installation-part-1/
https://balakumarnair.wordpress.com/2011/02/24/oracle-11gr1-enterprise-manager-grid-control-oem-installation-part-2/
https://balakumarnair.wordpress.com/2011/02/24/oracle-11gr1-enterprise-manager-grid-control-oem-installation-part-3/
Managing 11gR1 Grid Control Commands, Log files & Directory Structure
=======================================================================
https://balakumarnair.wordpress.com/category/oracle-11gr2/
Live Scenarios: All Concepts
==============
http://dbaworkshop.blogspot.com.au/p/recovery-scenarios_5.html
http://dbaworkshop.blogspot.it/2013/03/How-to-duplicate-a-production-database-on-a-different-server-mantaining-the-same-SID-and-directory-structures-with-duplicate-RMAN-command.html
==========================================================
How to duplicate a production database on a different server mantaining
the same SID and directory structures with 'duplicate' RMAN command
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,17 @@
SELECT c.table_schema,
c.table_name as table,
c.ordinal_position as order,
c.column_name as column,
-- c.data_type as type,
CASE WHEN c.data_type IN ('character', 'varchar') THEN c.data_type || '(' || c.character_maximum_length || ')'
WHEN c.data_type IN ('numeric') THEN c.data_type || '(' || c.numeric_precision || ',' || c.numeric_scale || ')'
ELSE c.data_type
END,
-- c.character_maximum_length as max_len,
c.is_nullable as null,
col_description(t.oid, c.ordinal_position)
FROM information_schema.columns c
JOIN pg_class t ON (t.relname = c.table_name)
WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
ORDER BY 1, 2, 3;
@@ -0,0 +1,7 @@
SELECT table_schema,
table_name,
constraint_name as constraint,
constraint_type as type
FROM information_schema.table_constraints
WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
ORDER BY 1, 2;
@@ -0,0 +1,6 @@
SELECT table_schema as schema,
table_name as table
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema NOT IN ('pg_catalog', 'information_schema')
ORDER BY 1, 2;
+81
View File
@@ -0,0 +1,81 @@
These are generic SQL queries. In some cases you need to replace variable holders -> <VARIABLE>
with the actual value you need.
ALL_COLUMNS.sql -> Lists all tables, their columns and data type
ALL_CONSTRAINTS.sql -> lists all tables and their associated constraints
ALL_TABLES.sql -> lists all tables
bad_idx.sql -> lists all indexes flagged as invalid
blocked_transaction.sql -> shows all blocked queries and transaction causing block
cache_hit_ratio.sql -> shows cache hit ratio for all databases
cancel_all_queries.sql -> cancels all tranactions for specified <user_name>
check_fks.sql -> shows fk status for all tables > 9mb in size or greater than 1000 writes
column_name_type_difference.sql -> shows all tables and columns that have same column name but different data type
columns_of_type_x.sql -> shows all tables that have columns of type <TYPE>
connection_counts.sql -> shows connection totals and totals for users, database and user/database
current_locks.sql -> shows current_locks
current_queries_blocked.sql -> shows blocked transactions and blocking query
current_queries.sql -> shows all current_queries
database_info.sql -> shows information from pg_database
database_sizes.sql -> shows size of all databases and percentage of total size
distinct_data_types.sql -> shows all data types in use in cluster
enum_maint.sql -> generic query to show all enums and commented delete / add code
enums.sql -> generic query to show all enums
filenames_and_tables.sql -> shows physical filenames for all tables
gen_create_indexes.sql -> generates sql statements to recreate all indexes
gen_drop_indexes.sql -> generates sql statements to drop all indexes
gen_get_seq_max.sql -> generates sql to get the max value of all sequences
gen_revoke_all.sql -> generates sql to revoke all priviliges from all tables for user <some_user>
gen_table_compare_counts.sql -> generates sql to compare reltuples to actual row count for all tables
get_slony_schemas.sql -> shows all slony schemas
get_trans_min_cnt.sql -> shows trandaction count per minute in cluster
groups_users.sql -> shows all groups and assigned users
inactive_tables.sql -> shows all tables that have 0 fetch's & 0 read's
index_bloat.sql -> shows size of index vs. table
index_bloat2.sql > a more specific version of index bloat WHERE realbloat > 50 and wastedbytes > 50000000 (adjust to your requirements)
index_comments.sql -> shows comments for all indexes
index_sizes.sql -> show the size of all indexes
index_tablespaces.sql -> shows the tablespace indexes are using
make_alter_index_spc.sql -> generates sql to alter all indexes in public to <new_table_space>
make_alter_table_spc.sql -> generates sql to alter all tables in public to <new_table_space>
most_active_tables.sql -> sorts and lists all tables in descending order by tuples read
parent_and_children.sql -> lists all tables and associated children
pg_runtime.sql -> lists start and run time for cluster
pg_stat_all_indexes.sql -> lists stats and status for all indexes
pg_stat_all_tables.sql -> lists stats and vacuum info for all tables
remove_ctrl.sh -> removes control characters from queries (used if query written in windows)
role_members.sql -> lists all roles and their members
rules.sql -> lists all tables and associated rules
sequence_cols.sql -> lists all tables with sequence columns
show_dead_tuples.sql -> shows table stats and status of dead tuples
table_access.sql -> lists all tables and their acl
table_columns.sql -> lists all columns for specified <table>
table_comments.sql -> lists comments for all tables and columns
table_constraints.sql -> lists all constraints for all tables
table_dependents.sql -> lists all tables, children and related constraint name
table_grants.sql -> lists all tables and their grants
table_in_function.sql -> list all functions that reference <TABLE/COLUMN>
table_in_schema.sql -> lists all tables in <schema_name>
table_in_trigger.sql -> lists all triggers that reference <table>
table_row_counts.sql -> lists all tables with greater than 0 rows
tables_and_comments.sql -> lists only tables and columns with comments
tables_and_filenames.sql -> lists all tables and physical filenames
tables_and_owners.sql -> lists all tables, owners and permits
tables_and_pkey.sql -> lists all tables and primary key name
table_sizes.sql -> lists all tables, owner, physical filename, tuples, size, total size, size in bytes, total_size in bytes and tablespace
table_stats.sql -> lists all tables and indexes, last vacuum, inserted, updated and deleted count
tables_with_column_name.sql -> lists all tables with column name LIKE <COLUMN_NAME>
tables_with_FKs.sql -> lists all tables that have foreign keys and FK name
tables_with_large_index_size.sql -> lists all tables where index size > table size
tables_with_no_FK.sql -> lists all tables that have no foreign key
tables_with_no_pkey.sql -> lists all tables with no primary key
tables_with_no_public_grants.sql -> lists all tables that have no public grants (Only owner has access)
table_triggers.sql -> lists all tables with triggers, trigger name, trigger type and tgenabled value
tcp_settings.sql -> lists the current tcp settings
triggers_and_constraints.sql -> lists tables, their triggers and function called by the trigger
useless_indexes.sql -> lists tables and associated indexes scanned < 200 times and are not unique indexes
useless_indexes2.sql -> lists tables and associated indexes scanned < 200 times and are not unique indexes or primary keys
users.sql -> lists all users/groups and if they are superuser or not
user_table_access_detail.sql -> lists all table privileges for user <CKUSER>
user_table_access.sql -> lists all tables, acl and position in acl for user <USERNAME>
wasted_index_space.sql -> shows space wasted by unused indexes
@@ -0,0 +1,10 @@
SELECT n.nspname,
t.relname as table,
c.conname as pk_name
FROM pg_class t
JOIN pg_constraint c ON ( c.conrelid = t.OID AND c.contype = 'p')
JOIN pg_namespace n ON (n.oid = t.relnamespace)
WHERE relkind = 'r'
AND t.relname NOT LIKE 'pg_%'
AND t.relname NOT LIKE 'sql_%'
ORDER BY n.nspname, t.relname, c.conname;
@@ -0,0 +1,26 @@
SELECT n.nspname as schema,
t.relname as table,
count(c.conname)
FROM pg_class t
JOIN pg_namespace n ON n.oid = t.relnamespace
JOIN pg_constraint c ON ( c.conrelid = t.OID AND c.contype = 'f')
WHERE relkind = 'r'
AND t.relname NOT LIKE 'pg_%'
AND t.relname NOT LIKE 'sql_%'
GROUP BY n.nspname,
t.relname
ORDER BY count, n.nspname, t.relname;
SELECT n.nspname as schema,
t.relname as table,
c.conname as fk_name
FROM pg_class t
JOIN pg_namespace n ON n.oid = t.relnamespace
JOIN pg_constraint c ON ( c.conrelid = t.OID AND c.contype = 'f')
WHERE relkind = 'r'
AND t.relname NOT LIKE 'pg_%'
AND t.relname NOT LIKE 'sql_%'
ORDER BY n.nspname,
t.relname,
c.conname;
@@ -0,0 +1,12 @@
SELECT relname as table
FROM pg_class
WHERE relkind = 'r'
AND relname NOT LIKE 'pg_%'
AND relname NOT LIKE 'sql_%'
AND OID NOT IN
(SELECT conrelid
FROM pg_constraint
WHERE contype = 'f'
AND contype <> 'p'
AND contype <> 'c')
ORDER BY relname;
+16
View File
@@ -0,0 +1,16 @@
SELECT n.nspname,
i.relname,
i.indexrelname,
CASE WHEN idx.indisprimary
THEN 'pkey'
WHEN idx.indisunique
THEN 'uidx'
ELSE 'idx'
END AS type,
'INVALID'
FROM pg_stat_all_indexes i
JOIN pg_class c ON (c.oid = i.relid)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_index idx ON (idx.indexrelid = i.indexrelid )
WHERE idx.indisvalid = FALSE
ORDER BY 1, 2;
@@ -0,0 +1,15 @@
/* Requires PostgreSQL version is 9.2 or Greater */
SELECT
w.query as waiting_query,
w.pid as w_pid,
w.usename as w_user,
l.query as locking_query,
l.pid as l_pid,
l.usename as l_user,
t.schemaname || '.' || t.relname as tablename
FROM pg_stat_activity w
JOIN pg_locks l1 ON (w.pid = l1.pid and not l1.granted)
JOIN pg_locks l2 on (l1.relation = l2.relation and l2.granted)
JOIN pg_stat_activity l ON (l2.pid = l.pid)
JOIN pg_stat_user_tables t ON (l1.relation = t.relid)
WHERE w.waiting;
@@ -0,0 +1,13 @@
SELECT pg_stat_database.datname,
pg_stat_database.blks_read,
pg_stat_database.blks_hit,
round((pg_stat_database.blks_hit::double precision
/ (pg_stat_database.blks_read
+ pg_stat_database.blks_hit
+1)::double precision * 100::double precision)::numeric, 2) AS cachehitratio
FROM pg_stat_database
WHERE pg_stat_database.datname !~ '^(template(0|1)|postgres)$'::text
ORDER BY round((pg_stat_database.blks_hit::double precision
/ (pg_stat_database.blks_read
+ pg_stat_database.blks_hit
+ 1)::double precision * 100::double precision)::numeric, 2) DESC;
@@ -0,0 +1,4 @@
SELECT pg_cancel_backend(procpid),
pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE usename = '<user_name>';
+116
View File
@@ -0,0 +1,116 @@
WITH fk_actions ( code, action ) AS (
VALUES ( 'a', 'error' ),
( 'r', 'restrict' ),
( 'c', 'cascade' ),
( 'n', 'set null' ),
( 'd', 'set default' )
),
fk_list AS (
SELECT pg_constraint.oid as fkoid, conrelid, confrelid as parentid,
conname, relname, nspname,
fk_actions_update.action as update_action,
fk_actions_delete.action as delete_action,
conkey as key_cols
FROM pg_constraint
JOIN pg_class ON conrelid = pg_class.oid
JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid
JOIN fk_actions AS fk_actions_update ON confupdtype = fk_actions_update.code
JOIN fk_actions AS fk_actions_delete ON confdeltype = fk_actions_delete.code
WHERE contype = 'f'
),
fk_attributes AS (
SELECT fkoid, conrelid, attname, attnum
FROM fk_list
JOIN pg_attribute
ON conrelid = attrelid
AND attnum = ANY( key_cols )
ORDER BY fkoid, attnum
),
fk_cols_list AS (
SELECT fkoid, array_agg(attname) as cols_list
FROM fk_attributes
GROUP BY fkoid
),
index_list AS (
SELECT indexrelid as indexid,
pg_class.relname as indexname,
indrelid,
indkey,
indpred is not null as has_predicate,
pg_get_indexdef(indexrelid) as indexdef
FROM pg_index
JOIN pg_class ON indexrelid = pg_class.oid
WHERE indisvalid
),
fk_index_match AS (
SELECT fk_list.*,
indexid,
indexname,
indkey::int[] as indexatts,
has_predicate,
indexdef,
array_length(key_cols, 1) as fk_colcount,
array_length(indkey,1) as index_colcount,
round(pg_relation_size(conrelid)/(1024^2)::numeric) as table_mb,
cols_list
FROM fk_list
JOIN fk_cols_list USING (fkoid)
LEFT OUTER JOIN index_list
ON conrelid = indrelid
AND (indkey::int2[])[0:(array_length(key_cols,1) -1)] @> key_cols
),
fk_perfect_match AS (
SELECT fkoid
FROM fk_index_match
WHERE (index_colcount - 1) <= fk_colcount
AND NOT has_predicate
AND indexdef LIKE '%USING btree%'
),
fk_index_check AS (
SELECT 'no index' as issue, *, 1 as issue_sort
FROM fk_index_match
WHERE indexid IS NULL
UNION ALL
SELECT 'questionable index' as issue, *, 2
FROM fk_index_match
WHERE indexid IS NOT NULL
AND fkoid NOT IN (
SELECT fkoid
FROM fk_perfect_match)
),
parent_table_stats AS (
SELECT fkoid, tabstats.relname as parent_name,
(n_tup_ins + n_tup_upd + n_tup_del + n_tup_hot_upd) as parent_writes,
round(pg_relation_size(parentid)/(1024^2)::numeric) as parent_mb
FROM pg_stat_user_tables AS tabstats
JOIN fk_list
ON relid = parentid
),
fk_table_stats AS (
SELECT fkoid,
(n_tup_ins + n_tup_upd + n_tup_del + n_tup_hot_upd) as writes,
seq_scan as table_scans
FROM pg_stat_user_tables AS tabstats
JOIN fk_list
ON relid = conrelid
)
SELECT nspname as schema_name,
relname as table_name,
conname as fk_name,
issue,
table_mb,
writes,
table_scans,
parent_name,
parent_mb,
parent_writes,
cols_list,
indexdef
FROM fk_index_check
JOIN parent_table_stats USING (fkoid)
JOIN fk_table_stats USING (fkoid)
/*WHERE table_mb > 9
AND ( writes > 1000
OR parent_writes > 1000
OR parent_mb > 10 )
*/ORDER BY issue_sort, table_mb DESC, table_name, fk_name;
@@ -0,0 +1,26 @@
SELECT sa.nspname as schemaa,
ca.relname as tablea,
a.attname as columna, ta.typname,
sb.nspname as schemab,
cb.relname as tableb,
a.attname as columnb, tb.typname
FROM pg_attribute a
JOIN pg_type ta ON (ta.oid = a.atttypid)
JOIN pg_class ca ON (ca.oid = a.attrelid)
JOIN pg_catalog.pg_namespace sa ON (ca.relnamespace = sa.oid),
pg_attribute b
JOIN pg_type tb ON (tb.oid = b.atttypid)
JOIN pg_class cb ON (cb.oid = b.attrelid)
JOIN pg_catalog.pg_namespace sb ON (cb.relnamespace = sb.oid)
WHERE a.attname = b.attname
AND ta.typname <> tb.typname
AND ca.relname NOT LIKE 'pg_%'
AND ca.relname NOT LIKE 'information%'
AND ca.relname NOT LIKE 'sql_%'
AND ca.relkind = 'r'
AND cb.relname NOT LIKE 'pg_%'
AND cb.relname NOT LIKE 'information%'
AND cb.relname NOT LIKE 'sql_%'
AND cb.relkind = 'r'
AND 'rollback' NOT IN (sa.nspname, sb.nspname)
AND 'id' NOT IN (a.attname, b.attname);
@@ -0,0 +1,26 @@
--SELECT DISTINCT (c.data_type),
-- COALESCE(character_maximum_length::text, 'N/A'),
-- c.numeric_precision,
-- c.numeric_scale
-- FROM information_schema.columns c;
SELECT c.table_schema as schema,
c.table_name as table,
c.column_name as column,
c.data_type as type,
case when c.data_type LIKE '%char%'
then COALESCE(character_maximum_length::text, 'N/A')
when c.data_type LIKE '%numeric%'
then '(' || c.numeric_precision::text || ', ' || c.numeric_scale::text || ')'
when c.data_type LIKE '%int%'
then c.numeric_precision::text
else COALESCE(character_maximum_length::text, 'N/A')
end as size
FROM information_schema.columns c
WHERE c.table_schema NOT LIKE 'pg_%'
AND c.table_schema NOT LIKE 'information%'
AND c.table_name NOT LIKE 'sql_%'
AND c.data_type LIKE '%<TYPE>%'
AND c.is_updatable = 'YES'
ORDER BY c.table_name, c.column_name;
@@ -0,0 +1,22 @@
SELECT COUNT(*)
FROM pg_stat_activity;
SELECT usename,
count(*)
FROM pg_stat_activity
GROUP BY 1
ORDER BY 1;
SELECT datname,
usename,
count(*)
FROM pg_stat_activity
GROUP BY 1, 2
ORDER BY 1, 2;
SELECT usename,
datname,
count(*)
FROM pg_stat_activity
GROUP BY 1, 2
ORDER BY 1, 2;
@@ -0,0 +1,18 @@
SELECT database,
relation,
n.nspname,
c.relname,
pid,
a.usename,
locktype,
mode,
granted,
tuple
FROM pg_locks l
JOIN pg_class c ON (c.oid = l.relation)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_stat_activity a ON (a.procpid = l.pid)
ORDER BY database,
relation,
pid;
@@ -0,0 +1,53 @@
SELECT a.datname,
a.procpid as pid,
CASE WHEN a.client_addr IS NULL
THEN 'local'
ELSE a.client_addr::text
END as client_addr,
a.usename as user,
a.waiting,
l.procpid as blocking_pid,
l.usename as blicking_user,
a.current_query,
a.query_start,
current_timestamp - a.query_start as duration
FROM pg_stat_activity a
LEFT JOIN pg_locks l1 ON (a.procpid = l1.pid )
LEFT JOIN pg_locks l2 on (l1.relation = l2.relation )
LEFT JOIN pg_stat_activity l ON (l2.pid = l.procpid)
LEFT JOIN pg_stat_user_tables t ON (l1.relation = t.relid)
WHERE pg_backend_pid() <> a.procpid
ORDER BY a.datname,
a.query_start;
SELECT
w.current_query as waiting_query,
w.procpid as w_pid,
w.usename as w_user,
l.current_query as locking_query,
l.procpid as l_pid,
l.usename as l_user,
t.schemaname || '.' || t.relname as tablename
FROM pg_stat_activity w
JOIN pg_locks l1 ON (w.procpid = l1.pid and not l1.granted)
JOIN pg_locks l2 on (l1.relation = l2.relation and l2.granted)
JOIN pg_stat_activity l ON (l2.pid = l.procpid)
JOIN pg_stat_user_tables t ON (l1.relation = t.relid)
WHERE w.waiting;
SELECT datname,
procpid as pid,
client_addr,
usename as user,
current_query,
CASE WHEN waiting = TRUE
THEN 'BLOCKED'
ELSE 'no'
END as waiting,
query_start,
current_timestamp - query_start as duration
FROM pg_stat_activity
WHERE pg_backend_pid() <> procpid
ORDER BY datname,
query_start;
@@ -0,0 +1,38 @@
/* Use for PostgreSQL 9.2 or greater */
SELECT c.datname,
c.pid as pid,
c.client_addr,
c.usename as user,
c.query,
CASE WHEN c.waiting = TRUE
THEN 'BLOCKED'
ELSE 'no'
END as waiting,
l.pid as blocked_by,
current_timestamp - c.query_start as duration
FROM pg_stat_activity c
LEFT JOIN pg_locks l1 ON (c.pid = l1.pid and not l1.granted)
LEFT JOIN pg_locks l2 on (l1.relation = l2.relation and l2.granted)
LEFT JOIN pg_stat_activity l ON (l2.pid = l.pid)
LEFT JOIN pg_stat_user_tables t ON (l1.relation = t.relid)
WHERE pg_backend_pid() <> c.pid
ORDER BY datname,
query_start;
/* Use for PostgreSQL 9.1 or less */
/*
SELECT
w.current_query as waiting_query,
w.procpid as w_pid,
w.usename as w_user,
l.current_query as locking_query,
l.procpid as l_pid,
l.usename as l_user,
t.schemaname || '.' || t.relname as tablename
FROM pg_stat_activity w
JOIN pg_locks l1 ON (w.procpid = l1.pid and not l1.granted)
JOIN pg_locks l2 on (l1.relation = l2.relation and l2.granted)
JOIN pg_stat_activity l ON (l2.pid = l.procpid)
JOIN pg_stat_user_tables t ON (l1.relation = t.relid)
WHERE w.waiting;
*/
@@ -0,0 +1,13 @@
SELECT db.datname,
au.rolname as datdba,
pg_encoding_to_char(db.encoding) as encoding,
db.datallowconn,
db.datconnlimit,
db.datfrozenxid,
tb.spcname as tblspc,
-- db.datconfig,
db.datacl
FROM pg_database db
JOIN pg_authid au ON au.oid = db.datdba
JOIN pg_tablespace tb ON tb.oid = db.dattablespace
ORDER BY 1;
@@ -0,0 +1,9 @@
SELECT datname,
pg_size_pretty(pg_database_size(datname))as size_pretty,
pg_database_size(datname) as size,
(SELECT pg_size_pretty (SUM( pg_database_size(datname))::bigint)
FROM pg_database) AS total,
((pg_database_size(datname) / (SELECT SUM( pg_database_size(datname))
FROM pg_database) ) * 100)::numeric(6,3) AS pct
FROM pg_database
ORDER BY datname;
@@ -0,0 +1,11 @@
SELECT DISTINCT t.typname
FROM pg_class c
JOIN pg_attribute a ON ( a.attrelid = c.oid )
JOIN pg_type t ON (t.oid = a.atttypid)
JOIN pg_catalog.pg_namespace s ON (c.relnamespace = s.oid)
WHERE c.relname NOT LIKE 'pg_%'
AND c.relname NOT LIKE 'information%'
AND c.relname NOT LIKE 'sql_%'
AND c.relkind = 'r'
ORDER BY t.typname;
@@ -0,0 +1,18 @@
SELECT t.typname,
e.enumlabel,
e.enumsortorder,
e.enumtypid
FROM pg_type t
JOIN pg_enum e ON e.enumtypid = t.oid
WHERE t.typtype = 'e'
ORDER BY 1, enumsortorder;
--DELETE FROM pg_enum
--WHERE enumtypid = 9999999
-- AND enumsortorder = 4;
--DELETE FROM pg_enum
--WHERE enumtypid = 9999999
-- AND enumlabel = 'medium';
--ALTER TYPE some_enum ADD VALUE 'medium' AFTER 'small';
+11
View File
@@ -0,0 +1,11 @@
SELECT n.nspname as schema,
t.typname as enum,
e.enumsortorder as order,
e.enumlabel as value,
t.oid as oid
FROM pg_type t
JOIN pg_namespace n ON ( n.oid = t.typnamespace )
JOIN pg_enum e ON ( e.enumtypid = t.oid )
WHERE typtype = 'e'
ORDER BY 1, 2, 3;
@@ -0,0 +1,14 @@
SELECT (SELECT oid
FROM pg_database
WHERE datname = current_database()) AS database,
c.relfilenode as filename,
n.nspname as schema,
c.relname as table
FROM pg_class c
JOIN pg_namespace n ON ( n.oid = c.relnamespace )
WHERE relname NOT LIKE 'pg_%' AND
relname NOT LIKE 'information%' AND
relname NOT LIKE 'sql_%' AND
relkind = 'r'
ORDER BY relfilenode;
@@ -0,0 +1,11 @@
SELECT pg_get_indexdef(idx.indexrelid) || ';'
FROM pg_stat_all_indexes i
JOIN pg_class c ON (c.oid = i.relid)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_index idx ON (idx.indexrelid = i.indexrelid )
WHERE NOT idx.indisprimary
AND NOT idx.indisunique
AND i.relname NOT LIKE 'pg_%'
AND i.idx_scan = 0
ORDER BY n.nspname,
i.relname;
@@ -0,0 +1,8 @@
SELECT 'DROP INDEX IF EXISTS "' || n.nspname || '"' || '.' || '"' || i.indexrelname || '"' ||';'
FROM pg_stat_all_indexes i
JOIN pg_class c ON (c.oid = i.relid)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_index idx ON (idx.indexrelid = i.indexrelid )
WHERE NOT idx.indisprimary
AND i.relname NOT LIKE 'pg_%'
ORDER BY i.indexrelname;
@@ -0,0 +1,4 @@
SELECT 'SELECT ''' || relname || ''' ,
(SELECT max_value FROM ' || relname || ');'
FROM pg_class
WHERE relkind = 'S';
@@ -0,0 +1,7 @@
SELECT 'REVOKE ALL PRIVILEGES FROM TABLE public."' || relname || '" FROM <some_user>;'
FROM pg_class
WHERE relname NOT LIKE 'pg_%' AND
relname NOT LIKE 'information%' AND
relname NOT LIKE 'sql_%' AND
relkind = 'r'
ORDER BY relname;
@@ -0,0 +1,10 @@
SELECT 'SELECT ''' ||
c.relname || ''' as table, ' ||
c.reltuples::int4 || ' as rows, ' ||
'(SELECT COUNT(*) FROM ' || s.nspname || '."' || c.relname || '") as cnt;'
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace s ON (c.relnamespace = s.oid)
WHERE nspname = 'public'
AND relkind = 'r'
ORDER BY c.reltuples::int4 DESC;
@@ -0,0 +1,4 @@
SELECT nspname AS "Schema Name"
FROM pg_namespace nsp
JOIN pg_proc pro ON pronamespace=nsp.oid AND proname = 'slonyversion'
ORDER BY nspname;
@@ -0,0 +1,27 @@
BEGIN;
DROP TABLE IF EXISTS tmp_trans_stats;
CREATE TEMP TABLE tmp_trans_stats AS
SELECT 'start_cnt'::varchar(10) AS taken,
SUM(xact_commit + xact_rollback) AS cnt
FROM pg_stat_database;
COMMIT;
SELECT pg_sleep(60);
INSERT INTO tmp_trans_stats
SELECT 'end_cnt'::varchar(10) AS taken,
SUM(xact_commit + xact_rollback) AS cnt
FROM pg_stat_database;
SELECT (
(SELECT cnt
FROM tmp_trans_stats
WHERE taken = 'end_cnt')
- (SELECT cnt
FROM tmp_trans_stats
WHERE taken = 'start_cnt')
) as tot_trans;
@@ -0,0 +1,12 @@
SELECT g.rolname as group,
u.rolname as user,
r.admin_option as admin,
g.rolsuper as g_super,
u.rolsuper as u_super
FROM pg_auth_members r
JOIN pg_authid g ON (r.roleid = g.oid)
JOIN pg_authid u ON (r.member = u.oid)
WHERE u.rolsuper = TRUE
OR g.rolsuper = TRUE
ORDER BY 1, 2;
@@ -0,0 +1,9 @@
SELECT schemaname as schema,
relname as table,
idx_tup_fetch + seq_tup_read as TotalReads
FROM pg_stat_all_tables
WHERE idx_tup_fetch + seq_tup_read = 0
AND schemaname NOT IN ('pg_catalog', 'pg_toast' )
order by schemaname,
relname;
@@ -0,0 +1,15 @@
SELECT N.nspname,
T.relname AS "table",
C.relname AS idx_name,
round(100 * pg_relation_size(indexrelid) / pg_relation_size(indrelid) ) / 100 AS "index_ratio %",
pg_size_pretty(pg_relation_size(indexrelid) ) AS index_size,
pg_size_pretty(pg_relation_size(indrelid) ) AS table_size_size
FROM pg_index I
LEFT JOIN pg_class C ON (c.oid = I.indexrelid)
LEFT JOIN pg_class T ON (T.oid = I.indrelid)
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
AND c.relkind = 'i'
AND pg_relation_size(indrelid) > 0
ORDER BY 4 desc, 1;
@@ -0,0 +1,123 @@
WITH btree_index_atts AS (
SELECT nspname,
relname,
reltuples,
relpages,
indrelid,
relam,
regexp_split_to_table(indkey::text, ' ')::smallint AS attnum,
indexrelid as index_oid
FROM pg_index
JOIN pg_class ON pg_class.oid=pg_index.indexrelid
JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
JOIN pg_am ON pg_class.relam = pg_am.oid
WHERE pg_am.amname = 'btree'
),
index_item_sizes AS (
SELECT i.nspname,
i.relname,
i.reltuples,
i.relpages,
i.relam,
s.starelid,
a.attrelid AS table_oid,
index_oid,
current_setting('block_size')::numeric AS bs,
/* MAXALIGN: 4 on 32bits, 8 on 64bits (and mingw32 ?) */
CASE WHEN version() ~ 'mingw32' OR version() ~ '64-bit'
THEN 8
ELSE 4
END AS maxalign,
24 AS pagehdr,
/* per tuple header: add index_attribute_bm if some cols are null-able */
CASE WHEN max(coalesce(s.stanullfrac,0)) = 0
THEN 2
ELSE 6
END AS index_tuple_hdr,
/* data len: we remove null values save space using it fractionnal part from stats */
sum( (1-coalesce(s.stanullfrac, 0)) * coalesce(s.stawidth, 2048) ) AS nulldatawidth
FROM pg_attribute AS a
JOIN pg_statistic AS s ON s.starelid=a.attrelid AND s.staattnum = a.attnum
JOIN btree_index_atts AS i ON i.indrelid = a.attrelid AND a.attnum = i.attnum
WHERE a.attnum > 0
GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9
),
index_aligned AS (
SELECT maxalign,
bs,
nspname,
relname AS index_name,
reltuples,
relpages,
relam,
table_oid,
index_oid,
( 2 + maxalign -
/* Add padding to the index tuple header to align on MAXALIGN */
CASE WHEN index_tuple_hdr%maxalign = 0
THEN maxalign
ELSE index_tuple_hdr%maxalign
END
+ nulldatawidth + maxalign -
/* Add padding to the data to align on MAXALIGN */
CASE WHEN nulldatawidth::integer%maxalign = 0
THEN maxalign
ELSE nulldatawidth::integer%maxalign
END
)::numeric AS nulldatahdrwidth,
pagehdr
FROM index_item_sizes AS s1
),
otta_calc AS
(
SELECT bs,
nspname,
table_oid,
index_oid,
index_name,
relpages,
coalesce( ceil((reltuples*(4+nulldatahdrwidth))/(bs-pagehdr::float)) +
CASE WHEN am.amname IN ('hash','btree')
THEN 1
ELSE 0
END ,
0 -- btree and hash have a metadata reserved block
) AS otta
FROM index_aligned AS s2
LEFT JOIN pg_am am ON s2.relam = am.oid
),
raw_bloat AS
(
SELECT current_database() as dbname,
nspname, c.relname AS table_name,
index_name,
bs*(sub.relpages)::bigint AS totalbytes,
CASE WHEN sub.relpages <= otta
THEN 0
ELSE bs*(sub.relpages-otta)::bigint
END AS wastedbytes,
CASE WHEN sub.relpages <= otta
THEN 0
ELSE bs*(sub.relpages-otta)::bigint * 100 / (bs*(sub.relpages)::bigint)
END AS realbloat,
pg_relation_size(sub.table_oid) as table_bytes,
stat.idx_scan as index_scans
FROM otta_calc AS sub
JOIN pg_class AS c ON c.oid=sub.table_oid
JOIN pg_stat_user_indexes AS stat ON sub.index_oid = stat.indexrelid
)
SELECT dbname as database_name,
nspname as schema_name,
table_name,
index_name,
round(realbloat, 1) as bloat_pct,
wastedbytes as bloat_bytes,
pg_size_pretty(wastedbytes::bigint) as bloat_size,
totalbytes as index_bytes,
pg_size_pretty(totalbytes::bigint) as index_size,
table_bytes,
pg_size_pretty(table_bytes) as table_size,
index_scans
FROM raw_bloat
WHERE ( realbloat > 50 and wastedbytes > 50000000 )
ORDER BY wastedbytes DESC;
@@ -0,0 +1,14 @@
SELECT n.nspname as schema,
c.relname,
d.description as comment
FROM pg_class c
LEFT JOIN pg_description d ON (d.objoid = c.oid)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE n.nspname NOT LIKE 'information%'
AND relname NOT LIKE 'pg_%'
AND relname NOT LIKE 'information%'
AND relname NOT LIKE 'sql_%'
-- AND relname LIKE '%IDX%'
AND relkind = 'i'
AND d.description IS NOT NULL
ORDER BY 2;
@@ -0,0 +1,21 @@
SELECT n.nspname as schema,
c.relname as index,
a.rolname as owner,
c.relfilenode as filename,
CASE WHEN indisprimary
THEN 'pkey'
WHEN indisunique
THEN 'uidx'
ELSE'idx'
END as type,
pg_size_pretty(pg_total_relation_size(n.nspname|| '.' || c.relname)) as total_size,
pg_total_relation_size(n.nspname|| '.' || c.relname) as total_size_bytes
FROM pg_index i
JOIN pg_class c ON (c.oid = i.indexrelid)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_authid a ON ( a.oid = c.relowner )
WHERE relname NOT LIKE 'pg_%' AND
relname NOT LIKE 'information%' AND
relname NOT LIKE 'sql_%' AND
relkind IN ('i')
ORDER BY 7 DESC, 1, 2;
@@ -0,0 +1,20 @@
SELECT n.nspname as schema,
c.relname as table,
c.reltablespace,
CASE WHEN c.reltablespace > 0 THEN (SELECT t.spcname
FROM pg_tablespace
WHERE oid = c.reltablespace)
ELSE '' END
FROM pg_class c
JOIN pg_authid a ON ( a.OID = c.relowner )
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_tablespace t ON ( CASE WHEN c.reltablespace > 0 THEN t.oid = c.reltablespace
ELSE NULL END)
WHERE c.relname NOT LIKE 'pg_%'
AND n.nspname NOT LIKE 'information%'
AND n.nspname NOT LIKE 'sql_%'
AND c.relkind = 'i'
-- AND n.nspname = '<target_schema>'
-- AND c.relname = '<table_name>'
ORDER BY n.nspname, c.relname;
@@ -0,0 +1,8 @@
SELECT 'ALTER INDEX ' || i.indexrelname
|| ' SET TABLESPACE <new_table_space>;'
FROM pg_stat_all_indexes i
JOIN pg_class c ON (c.oid = i.relid)
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_index idx ON (idx.indexrelid = i.indexrelid )
WHERE n.nspname = 'public'
ORDER BY 1;
@@ -0,0 +1,9 @@
SELECT 'ALTER TABLE ' || c.relname || ' SET TABLESPACE <new_table_space>;'
FROM pg_class c
JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE relname NOT LIKE 'pg_%'
AND relname NOT LIKE 'information%'
AND relname NOT LIKE 'sql_%'
AND n.nspname = 'public'
AND relkind = 'r'
ORDER BY relname;
@@ -0,0 +1,8 @@
SELECT schemaname,
relname,
idx_tup_fetch + seq_tup_read as TotalReads
FROM pg_stat_all_tables
WHERE idx_tup_fetch + seq_tup_read != 0
AND schemaname NOT IN ( 'pg_catalog', 'pg_toast' )
order by TotalReads desc
LIMIT 10;
@@ -0,0 +1,16 @@
SELECT DISTINCT n1.nspname || '.' || p.relname AS parent, n2.nspname || '.' || c.relname AS child
-- , cstr.conname
FROM pg_class c
JOIN pg_constraint cstr ON (cstr.conrelid = c.oid AND c.relkind = 'r' AND cstr.contype = 'f')
JOIN pg_namespace n2 ON (n2.oid = c.relnamespace)
JOIN pg_class p ON (p.oid = cstr.confrelid)
JOIN pg_namespace n1 ON (n1.oid = p.relnamespace)
WHERE p.relkind = 'r'
-- AND n1.nspname = '<schema_name>'
-- AND p.relname = '<paren_table>'
AND p.relname NOT LIKE 'pg_%'
AND p.relname NOT LIKE 'sql_%'
AND p.oid IN (SELECT confrelid
FROM pg_constraint)
ORDER BY parent, child;

Some files were not shown because too many files have changed in this diff Show More