May 17, 2026, 11:40 PM
This commit is contained in:
@@ -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;
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 | ||||