Files
DBAdmin/inbox/DataBase/Oracle/dba_scripts/current_locks.sh
T
2026-05-18 06:40:19 +00:00

110 lines
1.6 KiB
Bash

#!/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