DBA Sheet v5.8
DBA Sheet v5.8
Hardware type
OS
OS version
OS 32 bit or 64bit
who command alternative
server reboot time
Tracing
Tracing system calls
How to Trace Unix System Calls (Doc ID 110888.1)
RAM SIZE
Disks
sort by file size
List Disks
Disk size
Disk Cloning between two servers
Create a dummy disk in solaris = 1GB
copying the disks
Disk Hardware errors
Device statistics
freespace in zpool
Os used disks
CPU
Number of CPU's
CPU Usage
TOP CPU Users
Top 10 CPU consuming process
CPU & Memory used by a PID
top CPU Usage
SAR
CPU:
Memory:
Disk:
Network:
ZIP
Zipping a folder in solaris
Compress old files
compressing the folder
Reading files under .gz without uncompress
FIND/Replace
Display above & below 2 lines on grep
Finding a file
Find
MTU value
vncserver
SCP @ background
rsync the files between servers
scp faster file transfer method (ssh pwd required)
file copy to remote server without pwd
identify who occupied the port
Check the physical status of a NIC card
Others
iostat
Error log
^M Error
Tree command in solaris'
History
History command
who logged in
C program
c program to execute a shell script
oslevel -r
cat /etc/release
cat /etc/redhat-release
uname -m
x86_64 ==> 64-bit kernel
i686 ==> 32-bit kernel
pinky
who -b
du -sh * | sort -h
iostat -IEn (or) echo|format
fdisk -l | egrep 'Disk.*bytes' | awk '{ sub(/,/,""); sum +=$3; print $2" "$3" "$4 } END { print "—————–"; print "total: " sum " GB
http://serverfault.com/questions/4906/using-dd-for-disk-cloning
dd if=/dev/zero of=test.img bs=1024k count=1000
dd if=test.img of=test.img.bkp bs=1024000k
root@server # iostat -IEn|grep c0t600507680181050F20000000000009F2d0
c0t600507680181050F20000000000009F2d0 Soft Errors: 0 Hard Errors: 770 Transport Errors: 698
root@server #
iostat -xnp
zpool list
zpool status
cat a | grep 5 -C 2
find /opt/tivoli/tsm/client -exec grep -l "servername" {} \;
Ping all public and private nodename or IP of all nodes with corresponding MTU:
/usr/sbin/ping -s nodename mtu 2
Example in three node environment
/usr/sbin/ping -s node1-pub 1500 2
/usr/sbin/ping -s node2-pub 1500 2
/usr/sbin/ping -s node3-pub 1500 2
/usr/sbin/ping -s node1-priv 9000 2
/usr/sbin/ping -s node2-priv 9000 2
/usr/sbin/ping -s node3-priv 9000 2
Enable
------
gconftool-2 -s -t bool /desktop/gnome/remote_access/enabled true
gconftool-2 -s -t bool /desktop/gnome/remote_access/prompt_enabled false
Diable
-------
gconftool-2 -s -t bool /desktop/gnome/remote_access/enabled false
cd /___location
tar -cf - expdpmyfile.dmp | gzip -1 | nc -l 9999
# TARGET:
cd /thelocation/u/need
nc Sourceserver 9999 | gzip -d | tar xf - -C .
netstat -anlp | grep 1587
/sbin/ip link show
prstat -n 5 -s cpu
iostat -x 1 3
ksh
HISTTIMEFORMAT="%d/%m/%y %T "
history
last | grep root | more
int main(void)
{
system(SHELLSCRIPT);
return 0;
}
$ cc a.c
$ ./a.out
AIX
Solaris
linux
solaris,AIX
Linux
Tru 64
http://www.c0t0d0s0.org/archives/4778-Less-known-Solaris-features-Getting-rid-of-Zombies.html
Solaris
HP/UX
AIX
Linux
DEC-UNIX
To free pagecache:
Solaris
# echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
svmon
# echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
Linux
http://serverfault.com/questions/4906/using-dd-for-disk-cloning
solaris
psrinfo | wc -l
Linux
Solaris
AIX
HP/UX
Real CPU in Solaris
http://yong321.freeshell.org/oranotes/MoveOraInventory.txt
solaris
works only in linux
fc -l -99
history -200
solaris
int main() {
system("/work/oracle/s/mygrid.sh");
return 0;
}
$ cc b.c
$ ./a.out
https://stackoverflow.com/questions/13341832/display-two-files-side-by-side
diff --old-group-format=$'\e[0;31m%<\e[0m' \
--new-group-format=$'\e[0;31m%>\e[0m' \
--unchanged-group-format=$'\e[0;32m%=\e[0m' \
c.txt d.txt
Solaris: truss -d -E -p 1454
Linux : strace -ttT -p 5164
HP-UX : tusc
wn-Solaris-features-Getting-rid-of-Zombies.html
prstat -a
-disk-cloning
getdev
cfgadm -la
prtconf
echo Cores = $(( $(lscpu | awk '/Socket/{ print $2 }') * $(lscpu | awk '/Core/{ print $4 }') ))
http://www.dba-oracle.com/t_tuning_cpu_usage_vmstat.htm
21 -exec rm -f {} ;
splay-two-files-side-by-side
prstat -Z
Issue
Tracing
Tracing Oracle process OS level
Tracing SQLPLUS at OS level
Others
Killable processes
alias
SCRIPTS
Os level scripting
Shell script to execute multiple database - 12c
Profile for OS
Server maintenance
Solution
$ df -kh /u01
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VGExaDb-LVDbOra1
99G 82G 12G 88% /u01
$ df -h -i /u01
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/VGExaDb-LVDbOra1
13M 13M 0 100% /u01
free -m
use this comman an see the cache memory .. It should be less… if it is more than 5Gb ask unix admin to lear the memory
prtconf | grep Mem
id -p
prctl -n project.max-shm-memory -i project 100
ps -eaf | grep _pmon_ | grep -v grep | grep -v + | grep -v "^#" | awk '{print $NF}' | cut -c 10-
echo 'select count(*) from tab;' | sqlplus / as sysdba
ARCn: Redo log archivers
CJQn: Job scheduler coordinator
Dnnn: Dispatchers
DIA0: Diagnosibility process 0
ACMS: Atomic controlfile
DIAG: Diagnosibility to memory server
coordinator
CKPT: Checkpoint
FDBA: Flashback data archiver process
DBRM:
Jnnn: JobResource manager
scheduler process
processes
DBWn:
PING: Database
Interconnectwriter processes
latency measurement
ps -ef | grep ora_ | grep orcl2 | awk '{print $2}' | while read PID
LGWR:
Qnnn:
do Redo log
Queue writerprocesses
cleanup
LMDn:
QMNC: Global
kill -STOPQueue enqueue
$PIDcoordinatorservice daemons
LMON:
RECO: Global enqueue
done Distributed recovery service monitor
process
MMAN:
Snnn: Memory manager
ps -ef |Shared servers | grep -v grep | awk '{print $2}' | xargs kill -9
grep <keyword>
PMON:
SMCO: Process monitor
Space management coordinator
PSPn:
Wnnn: Process spawners processes
Space management
RMSn: RAC management server
RVWR: Recovery writer
SMON: System monitor process
VKTM: Virtual keeper of time process
MMNL: Manageability Monitor Process 2
MMON: Manageability Monitor Process
alias s="sqlplus / as sysdba"
SELECT
STAT_NAME,
DECODE(STAT_NAME,'PHYSICAL_MEMORY_BYTES',(ROUND(VALUE/1024/1024/1024,2))
|| ' GB','FREE_MEMORY_BYTES',(ROUND(VALUE /1024/1024/1024,2))
|| ' GB',VALUE ) VALUE
FROM
v$osstat
WHERE
stat_name IN ( 'FREE_MEMORY_BYTES', 'LOAD', 'NUM_CPUS', 'NUM_CPU_CORES',
'NUM_CPU_SOCKETS', 'PHYSICAL_MEMORY_BYTES' );
sort -u $TNS_ADMIN/tnsnames.ora | grep -v "^ " | grep -v "^#" | grep -v "^(" | grep -v "^)" | sed "s/ =//g" | grep -v "^$"
for i in `ps -ef|grep pmon | awk '{print $8}'|grep -v "grep"| grep -v "ASM"| cut -d"_" -f3`
do
export ORACLE_SID=$i
sqlplus -s /nolog <<EOF
set head off echo off
conn / as sysdba
SELECT comp_name, version, status FROM dba_registry where status='INVALID';
exit
EOF
done
#!/bin/ksh
rm -rf log.txt
for i in `cat a.txt`
do
echo ' ------'$i'----- ' >> /tmp/log.txt
sqlplus -L -S << EOF >> /tmp/log.txt
/ @$i
set feedback off
set lines 750 pages 0
col value for a20
select (select name from v\$database) dbname, (select NAME from v\$pdbs where con_id=(select con_id from v\$pdbs where
rownum < 2)) con,i.host_name,p.inst_id,p.name,p.value from gv\$parameter p, gv\$instance i where p.name='global_names' an
p.inst_id=i.inst_id order by p.inst_id;
exit;
EOF
done
echo off
cls
for /f "tokens=1-2 delims= " %%b in (1.txt) do (
echo.***********************************************
echo.Connect to %%b
rem echo. Password: %%c
echo.***********************************************
rem echo.sqlplus -L sys/pwd@%%b @C:\dbname.sql
sqlplus -L "sys/pwd@%%b as sysdba" @C:\dbname.sql
)
echo.
echo.DONE
echo.Press any key to exit.
pause >nul
for i in `ps -ef |grep pmon|grep -v MGMTDB|grep -v ASM|grep -v grep|cut -d"_" -f3`
do
export ORACLE_SID=$i
export ORACLE_HOME=`ps -ef |grep pmon|grep $i|awk {'print "pwdx " $2 '}|sh|awk {'print $2 '}|sed 's/....$//'`
#!/bin/ksh
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
# ------------------------------------------------------------------------
sqlpluskornshell
# A simple -s "/ as sysdba"
script to <<EOF
force all running instances to re-register
set lines 300
# with the remote_listener (workaround for bug 13066936)
col VALUE for a65
# ------------------------------------------------------------------------
export ORACLE_HOME=/opt/oracle/product/11.1.0/db7
select
for INST name,
in `ps -aefdb_unique_name,
| grep 'ora_pmon' open_mode,database_role
| egrep -v '(grep|sed)' | sed from v\$database;
's/^.*ora_pmon_//'`
PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.:/usr/local/bin:${ORACLE_HOME}:${ORACLE_HOME}/bin
do show parameter log_archive_config
{ORACLE_HOME}/OPatch:/oracle/dba/bin
echoEOF . Reregistering $INST with remote_listener
done
export ORAENV_ASK=NO
export PATH
. oraenv
export $INST
HISTFILE=$HOME/.histdir/$(tty|sed 's-/-_-g')
sqlplus
export -SL "/ as sysdba" <<-EOF >/dev/null
DBA_INIT_INI=/oracle/dba/funcs/dba_init.ini
col remote_val new_value remote_val
select value
# NMON remote_val
variable from v\$parameter
to stop oslevel checking where name='remote_listener';
alter system set
export NMONAIX=5.2.0.0 remote_listener='';
alter system register;
alterEDITOR=vi
export system set remote_listener='&remote_val';
alterFPATH=/oracle/dba/funcs
export system register;
EOF
export TNS_ADMIN=/var/opt/oracle
done
export ORACLE_BASE=/opt/oracle
export ORACLE_ASK=YES
export ORACLE_OWNER=oracle
export NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI'
nins
. .kshrc
export ORATAB="/var/opt/oracle/oratab"
export ORA_CRS_HOME=`cat /etc/oratab|grep -i asm|awk -F: '{print $2}'`
tnsping gpo_core_u |
awk '{FS="[()]+";for(i=1;i<=NF;i++) if($i ~ /(HOST|PORT|SERVICE_NAME)/) print $i}'
Presnap
fi
if [[ $(ps -ef | grep ./mgr | $GREP -vE 'grep|async' | wc -l) -ne 0 ]];
then
$ECHO ' \033[1;33m Goldengate = Running \033[0;0m '
else
echo "Goldengate = Not Running"
fi
echo ' '
echo ' '
EOF
https://weidongzhou.wordpress.com/2014/10/26/out-of-space-error-while-still-have-space/
for linux
Solaris
more dbhealthoutput.txt
postsnap
if [[ $(ps -ef | grep ./mgr | $GREP -vE 'grep|async' | wc -l) -ne 0 ]];
then
$ECHO ' \033[1;33m Goldengate = Running \033[0;0m '
else
echo "Goldengate = Not Running"
fi
echo ' '
echo ' '
EOF
export
PATH=$O
RACLE_H
OME/bin:
$ORACL
E_HOME/
OPatch:
$PATH
sqlplus -s
"/ as
sysdba"
<<EOF
set
lines 300
col
VALUE
for a65
select
name,
db_uniqu
e_name,
open_mo
de,databa
se_role
from v\
$databas
e;
show
parameter
log_archiv
e_config
EOF
done
Identify the Exadata Box type
cell versions
offloading saved
Scripts and Tips for Monitoring CPU Resource Manager (Doc ID 1338988.1)
HP => High Performance
HC => High Capcity
http://oradwstories.blogspot.com/2015/02/detecting-change-in-
2015/02/detecting-change-in-execution-plan-of.html
Nice url
Disk Details
% used
ASM backup
Adding a disk
Copy an ASM file from a local ASM instance to a remote ASM instance
Blocker in ASM
Disk Size
Troubelshooting
Resizing disks
Masternode in CRS
Checking Disks
ASM LIB
unix kernal
asm module / Package
asm disks
discovery
config files
log
spool locking_information
cp +DATA/orcl/datafile/tbsjfv.256.123456789
select to_char(sysdate,
\sys@mydb 'DD-MON-YYYY HH24:MI:SS' ) current_time from dual
. +ASM2 : +D2/jfv/tbsjfv.dbf
/
prompt ########################
$DD if=/dev/zero skip=25 bs=4k count=2560 of=$OCRLOC
prompt # Blocking Information #
prompt ########################
select
ALTERb.inst_id||'/'||b.sid blocker,
DISKGROUP DATA_DBNAME ADD DISK
-- s.module,
'/dev/rdsk/c6t600507680180854860000000000000B2d0s0' SIZE 102400 M REBALANCE
w.inst_id||'/'||w.sid
POWER 6; waiter,
b.type,
b.id1,
b.id2,
b.lmode,
w.request
from gv$lock b,
( select inst_id, sid, type, id1, id2, lmode, request
from gv$lock where request > 0 ) w
-- gv$session s
where b.lmode > 0
and ( b.id1 = w.id1 and b.id2 = w.id2 and b.type = w.type )
--and ( b.sid = s.sid and b.inst_id = s.inst_id )
order by b.inst_id, b.sid
/
ps -eaf | grep ASM | grep beq | awk '{print "kill -9 " $2}'
export ORACLE_HOME=/tmp/OraInstall2014-01-30_01-59-24AM/ext/bin
export LD_LIBRARY_PATH=/tmp/OraInstall2014-01-30_01-59-24AM/ext/bin/../lib
cd /tmp/OraInstall2014-01-30_01-59-24AM/ext/bin
./kfod.bin verbose=true, disks=all status=true op=disks
http://oraclehandson.wordpress.com/2010/08/06/cloning-oracle-asm-databases-with-kfed/
http://externaltable.blogspot.com/2013_12_01_archive.html
https://twiki.cern.ch/twiki/bin/view/PDBService/ASM_utilities
od -c -N 128 /dev/rdsk/c6t60050768018E02799800000000000FA2d0s0
https://taliphakanozturken.wordpress.com/2013/03/31/mounting-asm-diskgroup-fails-with-ora-15063-error-and-resolving-with-k
#!/bin/bash
for asmlibdisk in `ls /dev/oracleasm/disks/*`
do
echo "ASMLIB disk name: $asmlibdisk"
asmdisk=`kfed read $asmlibdisk | grep dskname | tr -s ' '| cut -f2 -d' '`
echo "ASM disk name: $asmdisk"
majorminor=`ls -l $asmlibdisk | tr -s ' ' | cut -f5,6 -d' '`
device=`ls -l /dev | tr -s ' ' | grep "$majorminor" | cut -f10 -d' '`
echo "Device path: /dev/$device"
done
uname -r
lsmod | grep -i oracle
rpm -qa | grep oracleasm
/etc/init.d/oracleasm scandisks
/etc/init.d/oracleasm listdisks
cat /etc/sysconfig/oracleasm
/usr/sbin/oracleasm init
cat <<EOF
"ORACLE_HOME" is not set
EOF
exit 1
fi
export PATH=${ORACLE_HOME}/bin:${PATH}
col path for a35
#
colGet last applied
Diskgroup log number
for a15
$ORACLE_HOME/bin/sqlplus
col DiskName for a20 -s "/ as sysdba" <<END
col disk# for 999
set pages 0 feed
col total_mb off linesize 100 heading on
for 999,999,999
set pagesizefor
col free_mb 100999,999,999
column
computeinst sum format a10 heading
of total_mb 'Inst'
on DiskGroup
column
computefile_type format a20
sum of free_mb on heading
DiskGroup 'File type'
column
break onmg format 99,999,999
DiskGroup skip 1 on report -
break on inst skip 1
compute
set pagessum 255 of mg on inst
whenever sqlerror exit 1
select a.name DiskGroup, b.disk_number Disk#, b.name DiskName, b.total_mb,
select inst, file_type,sum(mg)
b.free_mb, b.path, b.header_statusmg from (
select substr(full_alias_path,2,instr(full_alias_path,'/',2,1)-2)
from v$asm_disk b, v$asm_diskgroup a as INST,
file_type,
where a.group_number (+) =b.group_number
round((szbytes)/1048576)
order by b.group_number, as MG from ( b.name
b.disk_number,
select
/ lower(concat('', sys_connect_by_path(aname, '/'))) full_alias_path, Good query
system_created, alias_directory, file_type, szbytes
from ( select b.name gname, a.parent_index pindex, a.name aname,
a.reference_index rindex , a.system_created, a.alias_directory,
c.type file_type, c.bytes szbytes
from v\$asm_alias a, v\$asm_diskgroup b, v\$asm_file c
where a.group_number = b.group_number
and a.group_number = c.group_number(+)
and a.file_number = c.file_number(+)
and a.file_incarnation = c.incarnation(+)
and b.name = UPPER('${DG}')
)
start with (mod(pindex, power(2, 24))) = 0
and rindex in
( select a.reference_index
from v\$asm_alias a, v\$asm_diskgroup b
where a.group_number = b.group_number
and (mod(a.parent_index, power(2, 24))) = 0
-- and a.name = 'SINGLEDBNAME'
)
connect by prior rindex = pindex)
where szbytes is not null)
group by inst, file_type
/
exit;
END
exit 0
recreating asm disk sql's are stored in mymdscript in the current directory…
ith-ora-15063-error-and-resolving-with-kfed/
https://emilianofusaglia.net/2016/04/08/troubleshooting-not-mounting-acfs-file-system/
http://surachartopun.com/2009/09/asm-dvm-acfs-by-command-lines.html
http://www.idevelopment.info/data/Oracle/DBA_tips/Automatic_Storage_Management/AS
M_50.shtml
https://ronnyegner.wordpress.com/?s=etc%2Finit.d%2Foracleasm
RAC Enabled in ORACLE_HOME or not
Diag Collections
Tracing cluvfy
crs resource script
crs resource creation script
If root.sh fails
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk rac_off --Disabling RAC binaries
make -f ins_rdbms.mk ioracle --Linking to Oracle binaries
root@rac1 ~]# kill -STOP 3595; sleep 27; kill -CONT 3814
ps -ef | grep <keyword> | grep -v grep | awk '{print $2}' | xargs kill -9
traceroute -r -F 192.168.0.210
export SRVM_TRACE=true
export SRVM_TRACE=""
rm -rf /tmp/cvutrace
mkdir /tmp/cvutrace
export CV_TRACELOC=/tmp/cvutrace
export SRVM_TRACE=true
export SRVM_TRACE_LEVEL=1
<STAGE_AREA>/runcluvfy.sh stage -pre crsinst -n <node1>,<node2>
-verbose
for res in `/opt/crs/12.1.0/grid/bin/crs_stat -p | grep "^NAME=" | cut -d =
-f 2` ; do
/opt/crs/12.1.0/grid/bin/crs_stat -p $res >/opt/oracle/resources/$res.cap
done
http://dbaregistry.blogspot.com/search/label/How%20to%20export%20and%20import%20crs%20resources
for i in `olsnodes`
do
/usr/bin/ssh -o UserKnownHostsFile=/dev/null -o
StrictHostKeyChecking=no -q $i "chmod 777 /tmp/chek.sh" > /dev/null
/usr/bin/ssh -o UserKnownHostsFile=/dev/null -o
StrictHostKeyChecking=no -q $i "/tmp/chek.sh" > /tmp/tmp.log_$i
done
paste /tmp/tmp.log* | sed -e 's/\t/ \t/g' | column -t -s$'\t'
rm -rf /tmp/tmp.log*
crsctl status res |grep -v "^$"|awk -F "=" 'BEGIN {print " "}
{printf("%s",NR%4 ? $2"|" : $2"\n")}'|sed -e 's/ *, /,/g' -e 's/, /,/g'|\
awk -F "|" 'BEGIN { printf "%-40s%-35s%-20s%-50s\n","Resource
Name","Resource Type","Target ","State" }{ split ($3,trg,",") split
($4,st,",")}{for (i in trg) {printf "%-40s%-35s%-20s%-50s\n",
$1,$2,trg[i],st[i]}}'
for i in `olsnodes` ; do /usr/bin/ssh -q $i "ps -aef | grep pmon |awk '{print $8}' | egrep -i -v 'grep' | cut -d "_" -f3" | sort > /tmp/tmp
for i in `olsnodes`
do
echo $i > /tmp/tmp.log_$i
/usr/bin/ssh -q $i " echo "================" ; ps -aef | grep pmon |
awk '{print $8}' | egrep -i -v 'grep' | cut -d "_" -f3" | sort >>
/tmp/tmp.log_$i
done
/opt/grid/12.1.0.2/bin/acfsload start
As oracle,
WITH sys_time AS (
SELECT inst_id, SUM(CASE stat_name WHEN 'DB time'
THEN VALUE END) db_time,
SUM(CASE WHEN stat_name IN ('DB CPU', 'background cpu
time')
THEN VALUE END) cpu_time
FROM gv$sys_time_model
GROUP BY inst_id )
SELECT instance_name,
ROUND(db_time/1000000,2) db_time_secs,
ROUND(db_time*100/SUM(db_time) over(),2) db_time_pct,
ROUND(cpu_time/1000000,2) cpu_time_secs,
ROUND(cpu_time*100/SUM(cpu_time) over(),2) cpu_time_pct
FROM sys_time
JOIN gv$instance USING (inst_id);
http://www.pythian.com/blog/changing-hostnames-in-oracle-rac/
http://www.pythian.com/blog/slimming-down-oracle-rac-12cs-resource-footprint/
(Doc ID 986822.1)
http://dbaregistry.blogspot.com/search/label/How%20to%20export%20and%20import%20crs%20resources
0export%20and%20import%20crs%20resources
n |awk '{print $8}' | egrep -i -v 'grep' | cut -d "_" -f3" | sort > /tmp/tmp.log_$i ; done ; paste /tmp/tmp.log* | column -t
crsctl status resource -t|grep -v ora.mgmtdb|grep -v grep|grep ora.*.db|
cut -f2 -d.|
while read line; do echo -e "\033[0;31mDatabase Name: \
033[0;0m"$line
echo -e "\033[0;31mServices: \033[0;0m"`srvctl config database -d
$line|grep Services|awk '{print $2}'`;
echo -e "\033[0;31mServers: \033[0;0m"`srvctl status database -d
$line|awk '{printf "%s.",$7}'`;
done
https://emilianofusaglia.net/2016/04/08/troubleshooting-not-mounting-acfs-file-system/
http://mahioracledba.blogspot.com/2014/01/rootsh-failed-when-installing-11gr2.html
Gaps
dgmgrl logging
dgmgrl
Error: ORA-16664: unable to receive the result from a
database
DGMGRL all errors & troubleshoot
dgmgrl log ___location
dataguard switchover validation
log_archive_dest_2
Dataguard switchover :
Standby_Side
delete force noprompt ARCHIVELOG from sequence 17101 until sequence 20340 thread=1;
delete force noprompt ARCHIVELOG from sequence 16151 until sequence 19560 thread=2;
On Primary database the value of controlfile_type in V$database is “CURRENT” and standby is “STANDBY”
run
{
set archivelog destination to '/ora_backup/rman/arch/';
restore archivelog from logseq=8619 until logseq=8632 thread=2;
}
for i in `ps -ef|grep pmon | awk '{print $8}'|grep -v "grep"| grep -v "ASM"| cut -d"_" -f3`
do
export ORACLE_SID=$i
dgmgrl -silent / "show configuration verbose" ; echo '------------------------------------'
done
for i in `ps -ef|grep pmon | awk '{print $8}'|grep -v "grep"| grep -v "ASM"| cut -d"_" -f3`
do
export ORACLE_SID=$i
sqlplus -s /nolog <<EOF
set head off echo off feedback off
conn / as sysdba
set lines 160
select instance_name,logins,(select database_role from v\$database) database from v\$instance;
select PROCESS,status from gv\$managed_standby where process like '%MRP%';
col STBY_BEHIND_BY for a20
select (select sysdate from dual)"TIMESTAMP",s.thread#,s.MAX_SEQ#, a.MAX_APP_SEQ#, (s.MAX_SEQ#-
a.MAX_APP_SEQ#) "Difference" from
( select thread#,max(sequence#) "MAX_SEQ#" from v\$archived_log group by thread# ) s,
(select thread#,max(sequence#) "MAX_APP_SEQ#" from v\$archived_log where applied='YES' group by
thread#) a where a.thread#=s.thread#;
set serveroutput on
exec dbms_output.put_line('------------------------------');
exit
EOF
done
primary
-----------
dgmgrl /
connect sys/pwd
CREATE CONFIGURATION 'DR' AS PRIMARY DATABASE IS 'india' CONNECT IDENTIFIER IS 'india';
ADD DATABASE 'america' AS CONNECT IDENTIFIER IS 'america' maintained as physical;
Enable configuration
show configuration ;
show database verbose india
show database verbose america
sid +ASM
cd $ORACLE_HOME/network/admin
cp listener.ora listener.ora.11142017
(SID_DESC=
(SID_NAME= america2)
(GLOBAL_DBNAME= america_dgmgrl)
(ORACLE_HOME=/ORACLE_HOME)
(ENVS="TNS_ADMIN=/ASM_HOME/network/admin")
)
else it will throw error while swithover. it will start only one instance during switover if it is not added.
please add this entry and reload the listener
dgmgrl /
connect sys/pwd
switchover to america;
connect sys/pwd
switchover to india;
RMAN>
echo set on
run {
allocate channel c1 device type disk;
allocate auxiliary channel a1 device type disk;
allocate auxiliary channel a2 device type disk;
duplicate database for standby from active database using backupset nofilenamecheck;
}
http://sanzdbaworld.blogspot.com/2012/09/how-query-dataguard-status-physical.html
onprimary
--------------
select a.thread#, (select max (sequence#) from v$archived_log where
archived='YES' and thread#=a.thread#) archived,
max(a.sequence#) applied, (select max(sequence#) from v$archived_log where
archived='YES' and thread#=a.thread#)-max(a.sequence#) gap
from v$archived_log a where a.applied='YES' group by a.thread# order by
thread#;
run{
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog all completed before 'sysdate - 1/24';
}
http://www.ritzyblogs.com/OraTalk/PostID/105/How-to-setup-DGMGRL-broker-with-example
if you want to increase the transport speed, increase the value in primary
database also .
https://www.toadworld.com/platforms/oracle/w/wiki/11334.let-s-optimize-data-
guard-configuration-I
http://emrebaransel.blogspot.com/2008/11/dataguard-performance.html
for i in `ps -ef|grep pmon | awk '{print $9}'|grep -v "grep"| grep -v "ASM"| cut -d"_"
-f3`
do
export ORACLE_SID=$i
dgmgrl -silent / "show configuration verbose" ; echo '------------------------------------'
done
NO' order by sequence#;
Sessions
v$sql_monitor
Sql details
SQL History
Identify
Explain Plan
explain plan for manual session
Process
Killing Sessions
kill a sid
Killing old session ( 1 day old) (or) 4 hours
Extra
parallelism Hints
sql patch
Sql Profiles
Sql Baselines
Sql_doctor script
break on report
compute SUM of tot on report
set linesize
compute SUM750ofpages 9999
active9999on report
set lines
column box1000
formatpages a30
compute
column SUM
sid of inactive on report
column
col usernamespidformat
format
for
9999
a50 a10
column
column serial
usernamefor 999999
format a30
select
column status format a15
column program format a30
DECODE(username,NULL,'INTERNAL',USERNAME)
column
column username
os_user format
format a20a10
Username,
column sql_text format a80
col LOGON_TIME
count(*) TOT, for a20
column module format a30
col COUNT(DECODE(status,'ACTIVE',STATUS))
program for a30
select
ACTIVE, b.inst_id,b.sid,b.serial#,a.spid,
col SQL_EXEC_STARTbox,to_char
substr(b.machine,1,30) for a20 (b.logon_time, 'dd-
COUNT(DECODE(status,'INACTIVE',STATUS))
mon-yyyy
INACTIVE hh24:mi:ss') logon_time,
SELECT * FROM
substr(b.username,1,30) username,
from gv$session
(SELECT status,inst_id,sid,SESSION_SERIAL#
substr(b.osuser,1,20)
where os_user,
status in ('ACTIVE','INACTIVE')
as Serial,username,sql_id,SQL_PLAN_HASH_VALUE,
substr(b.program,1,30) program,status,b.last_call_et
group by username;
AS MODULE,program,
last_call_et_secs,b.sql_id set lines 1000 pages 9999
from TO_CHAR(sql_exec_start,'dd-mon-yyyy
gv$session b,gv$process a column
set pages sid50000
formatlines999932767
hh24:mi:ss')
where b.paddr AS=sql_exec_start,
a.addr column
col OPNAME serial for
for 999999
a10
ROUND(elapsed_time/1000000)
and a.inst_id = b.inst_id AS <-- For cluster
column
col SID formstatus format
9999 a15
"Elapsed (s)",
and type='USER'
ROUND(cpu_time /1000000) AS col SERIAL form 9999999a20 for standalone -->
column username format
order
set by logon_time;
linesize 750 pages 9999 column
col PROGRAMsql_text for format
a10 a80
"CPU (s)",
column box format a30 col USERNAME
col program for a33 for a10
substr(sql_text,1,30) sql_text
column spid format a10 col
col SQL_EXEC_START
SQL_TEXT for a40 for a20
FROM gv$sql_monitor where
column
column username
text_line formatformata254a20 col START_TIME for a10
status='EXECUTING' and module not like '%emagent overall -->
column
set program format a30 SELECT
col * FROM
LAST_UPDATE_TIME for a10
%' lines 750 pages 9999 set pagesize
<-- ONLY 0 echo off timing
EXECUTING off linesize 1000
column
set long os_user
20000 format a20 20000 col (SELECT
TARGET status,inst_id,sid,SESSION_SERIAL#
for a25
ORDER BYlongchunksize
sql_exec_start desc trimspool on trim on long 2000000 longchunksize
col LOGON_TIME for a20
select as
col MESSAGE for a25
2000000
);
dbms_sqltune.report_sql_monitor_list() text_line Serial,username,sql_id,SQL_PLAN_HASH_VALUE,p
alter
selectsession set nls_date_format = 'DD-MM-YYYY
select
from dual; b.inst_id,b.sid,b.serial#,a.spid, rogram,
HH24:MI:SS';
DBMS_SQLTUNE.REPORT_SQL_MONITOR(
substr(b.machine,1,30) box,to_char (b.logon_time, 'dd- SELECT TO_CHAR(sql_exec_start,'dd-mon-yyyy
inst_id,sid, serial#, sql_id, opname,
sql_id=>'&sql_id',
mon-yyyy
select hh24:mi:ss') logon_time, hh24:mi:ss')
username, AS sql_exec_start,
target,
report_level=>'ALL', sofar, totalwork,
substr(b.username,1,20)
dbms_sqltune.report_sql_monitor() username,text_line COLUMN username FORMAT A20
ROUND(elapsed_time/1000000)
start_time,last_update_time,round(time_remaining/60
type=>'TEXT')
substr(b.osuser,1,20)
from dual; os_user, COLUMN
AS
,2)
from dual; sid(s)",
"Elapsed
"REMAIN FORMAT
MINS", 9999
round(elapsed_seconds/60,2)
substr(b.program,1,30) program,status,b.last_call_et
SELECT COLUMN
"ELAPSED
SELECT serial#
ROUND(cpu_time
MINS", FORMAT
ROUND(elapsed_time 9999 /1000000) ASAS
/1000000)
gv$session gv$sql_monitor
AS last_call_et_secs,b.sql_id
a.sid,RPAD(a.opname,30),a.sofar,a.totalwork,a.ELAPS COLUMN
"CPU (s)", event FORMAT A40
round((time_remaining+elapsed_seconds)/60,2)
"Elapsed (s)",
from gv$session b,gv$process a
ED_SECONDS,ROUND(((a.sofar)*100)/a.totalwork,3) "TOTAL substr(sql_text,1,30)
MINS",
ROUND(cpu_time sql_text
/1000000,3) AS "CPU
where b.paddr
"%_COMPLETED",
SELECT * = a.addr SELECTFROM NVL(s.username,
gv$sql_monitor '(oracle)')
ROUND(SOFAR/TOTALWORK*100,2)
(s)", where moduleAS username,
not like
col
and WAIT_CLASS
a.inst_id = b.inst_id
RPAD(a.username,10)
FROM for a10 s.sid,
'%emagent%'
"%_COMPLETE", and
ROUND(queuing_time sid=&sid
message /1000000,3) AS
SELECT
and sw.inst_id,NVL(s.username,
type='USER' and b.sid=&sid '(oracle)') AS
username,a.SQL_HASH_VALUE,B.STATUS
(SELECT status, FROM s.serial#,
ORDER
"Queuing (s)",BY sql_exec_start desc
gv$session_longops
username,
order by
FROM--username,logon_time;
gV$SESSION_LONGOPS a, gv$session b WHERE se.event,
); OPNAME NOT LIKE 'RMAN%'
ROUND(user_io_wait_time AND AS
/1000000,3)
WHERE s.sid,a.sid=b.sid
sql_id, "I/O se.total_waits,
OPNAMEwait (s)",NOT LIKE '%aggregate%' AND
s.serial#,
and a.sid=&sid
sql_exec_id, se.total_timeouts,
TOTALWORK != 0 AND sofar<>totalwork AND AS
ROUND(application_wait_time/1000000,3)
--AND sw.event,
b.status='ACTIVE'
TO_CHAR(sql_exec_start,'dd-mon-yyyy se.time_waited,
time_remaining
"Appli wait (s)", > 0
ANDsw.wait_class,
a.sofar<>
hh24:mi:ss') ASa.totalwork
sql_exec_start, se.average_wait,
/ ROUND(concurrency_wait_time/1000000,3) AS
/ sw.wait_time,
ROUND(elapsed_time/1000000) AS se.max_wait,
"Concurrency wait (s)",
"Elapsedsw.seconds_in_wait,
Currently (s)",
waiting ? se.time_waited_micro
ROUND(cluster_wait_time
Overall Waits /1000000,3) AS
sw.state
ROUND(cpu_time /1000000) AS FROM
"Cluster v$session_event
wait (s)", se,
FROM
"CPU (s)", gv$session_wait sw, v$session s
ROUND(physical_read_bytes /(1024*1024)) AS
gv$session
buffer_gets, s WHERE
"Phys reads s.sid = se.sid
(MB)",
WHERE s.sid = sw.sid and s.inst_id=sw.inst_id
ROUND(physical_read_bytes and
/(1024*1024)) AS AND s.sid = &Session_ID
ROUND(physical_write_bytes /(1024*1024)) AS
s.sid=&sid
"Phys reads (MB)", ORDER
"Phys writes BY se.time_waited
(MB)", DESC
ORDER BY sw.seconds_in_wait DESC;
ROUND(physical_write_bytes/(1024*1024)) AS / buffer_gets AS "Buffer gets",
Elapsed/CPU/Read/Write
"Phys writes (MB)" MB Each Layer time spend
ROUND(plsql_exec_time/1000000,3) AS
FROM gv$sql_monitor where sid=&sid and "Plsql exec (s)",
inst_id=&inst_id ROUND(java_exec_time /1000000,3) AS
ORDER BY elapsed_time DESC "Java exec (s)"
) FROM gv$sql_monitor
WHERE rownum<=20; WHERE sid=&sid and inst_id=&inst_id;
v$sqlarea/v$sql ASH
/ 1e6, 3), '999,990.000') et_secs_per_exec, TO_CHAR(ROUND(h.clwait_total /
SECS,b.rows_processed,a.status,substr(b.sql_text,1,5
TO_CHAR(ROUND(h.cpu_time / h.executions / column my_blkr format
sql_exec_id,
h.executions_total / 1e6,9993), '999,990.000')
0) sql_text
1e6, 3), '999,990.000') cpu_secs_per_exec, select to_char(a.sample_time,
TO_CHAR(sql_exec_start,'dd-mon-yyyy
cl_secs_per_exec,
select sql_id, 'HH24:MI:SS')
fromTO_CHAR(ROUND(h.USER_IO_WAIT_TIME
gv$session a,gv$sqlarea b / MY_TIME,a.session_id
hh24:mi:ss') AS MY_SID,a.session_serial#
sql_exec_start,
TO_CHAR(ROUND(h.apwait_total
starting_time, /
where a.sql_hash_value
h.executions = b.hash_value
/ 1e6, 3), '999,990.000') MY_SER, ROUND(elapsed_time/1000000)
h.executions_total
end_time, / 1e6, 3), '999,990.000')
and a.sql_address = b.address
io_secs_per_exec, AS DECODE(a.session_state,
"Elapsed
ap_secs_per_exec,
(EXTRACT(HOUR (s)", FROM run_time) 'WAITING'
* 3600,a.event,
and TO_CHAR(ROUND(h.CLUSTER_WAIT_TIME
a.module not like '%emagent%' / a.session_state)
ROUND(cpu_time MY_STATE,a.xid,
TO_CHAR(ROUND(h.ccwait_total /1000000)
+ EXTRACT(MINUTE FROM a.sql_id,
/ run_time) AS
and a.module/ 1e6,
h.executions not like
3), '%oraagent.bin%'
'999,990.000') "CPU a.blocking_session
(s)",
h.executions_total
* 60 / 1e6, MY_BLKR
3), '999,990.000')
and sql_text not like '%b.PARSING_SCHEMA_NAME
cl_secs_per_exec, from gv$active_session_history
buffer_gets,
cc_secs_per_exec, + EXTRACT(SECOND a, dba_users
FROM u
%' pagesize
set 0 echo off timing off linesize 1000
TO_CHAR(ROUND(h.APPLICATION_WAIT_TIME where u.user_id = a.user_id
ROUND(physical_read_bytes
TO_CHAR(ROUND(h.plsexec_time_total
run_time))/60 run_time_MIN, /(1024*1024)) / AS
and a.username
trimspool
/ h.executions on trim is
/ 1e6,onnot3),null
long 2000000 longchunksize
'999,990.000') and
"Phys a.sql_id = '&sql_id'
reads (MB)",
h.executions_total
READ_IO_BYTES, / 1e6, 3), '999,990.000')
order by a.status;
2000000
ap_secs_per_exec, and a.sample_time
pl_secs_per_exec,
PGA_ALLOCATED > SYSTIMESTAMP-(2/1440);
ROUND(physical_write_bytes/(1024*1024))
PGA_ALLOCATED_BYTES, AS
select TO_CHAR(ROUND(h.CLUSTER_WAIT_TIME
Sql_monitor report / "Phys writes (MB)"
TO_CHAR(ROUND(h.javexec_time_total
Elapsed/CPU/Read/Write
TEMP_ALLOCATED MB /
DBMS_SQLTUNE.REPORT_SQL_MONITOR(
h.executions / 1e6, 3), '999,990.000') col index_name
h.executions_total for/ a50
FROM gv$sql_monitor 1e6, 3),where sql_id='&sql_id'
'999,990.000')
TEMP_ALLOCATED_BYTES
SELECT owner, index_name,
sql_id=>'&sql_id',
cc_secs_per_exec, and inst_id=&inst_id
ja_secs_per_exec
from (
report_level=>'ALL',
TO_CHAR(ROUND(h.PLSQL_EXEC_TIME / table_name,last_analyzed,
FROMORDER BY elapsed_time
dba_hist_sqlstat h, sample_size,
DESC num_rows,
select
partitioned, global_stats
type=>'TEXT')
h.executions / 1e6, 3), '999,990.000') )sql_id,
dba_hist_snapshot s
from dual;
pl_secs_per_exec, FROM WHERE
WHERE dba_indexes
rownum<=20;
h.sql_id = '&sql_id'
WHERE max(sample_time
index_name IN- (sql_exec_start) run_time,
All inTO_CHAR(ROUND(h.JAVA_EXEC_TIME
one / AWR AND h.executions_total
data
max(sample_time) >0
end_time,
h.executions / 1e6, 3), '999,990.000') select
AND distinct
s.snap_idrtrim(substr(plan_table_output,
= h.snap_id
sql_exec_start
instr(plan_table_output, starting_time,
ja_secs_per_exec AND s.dbid = h.dbid '|', 1, 3)+2,
sum(DELTA_READ_IO_BYTES)
set lines gv$sqlarea_plan_hash
FROM 300 set pages 300 h (instr(plan_table_output,
AND s.instance_number '|',=1,h.instance_number
4)-
col table_name for=a40 READ_IO_BYTES,
instr(plan_table_output, '|', 1, 3)-2)), ' ')
WHERE h.sql_id '&&sql_id' ORDER BY
sum(DELTA_PGA) PGA_ALLOCATED,
colANDowner for a30 > 0
h.executions froms.begin_interval_time,
(
set long 20000
sum(DELTA_TEMP) TEMP_ALLOCATED
select distinct
order by source owner,
; table_name, STALE_STATS, SELECT plan_table_output
set s.end_interval_time;
lines
from 750 pages 9999
last_analyzed, stattype_locked FROM
select( sql_text from dba_hist_sqltext where sql_id =
sql_id sql_text
colfrom dba_tab_statistics
exact_matching_signature for TABLE(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id'
'&SQL_ID';
where (owner, table_name) in
99999999999999999999999999 , null,select sql_id,
'BASIC'))
(select distinct owner, table_name UNIONsample_time,
ALL
col sql_text for a50 set long 20000
sql_exec_start,
from dba_tables
select sql_id, exact_matching_signature, SQL_TEXT SELECT
set lines * FROM
750 pages 9999
where ( table_name) DELTA_READ_IO_BYTES,
TABLE(dbms_xplan.display_awr('&sql_id', null,
from v$sqlarea where UPPER(sql_text) like '%DUMMY selectsql_exec_id,
sql_text from gv$sqlarea where sql_id = null,
in ( select object_name 'ALL'))
%' order by UPPER(sql_text); '&SQL_ID';
col sql_textfrom for a60gv$sql_plan ) greatest(PGA_ALLOCATED -
where upper(sql_id) first_value(PGA_ALLOCATED) over (partition by
SELECT rows_processed "Total=Rows
upper('&sql_id')
Processed", and where plan_table_output like '%INDEX%'
sql_id,sql_exec_id order by sample_time rows 1
object_name is not null))
ROUND((SYSDATE - TO_DATE(first_load_time, )
--and STALE_STATS='YES' preceding),0)
ORDER BY owner, DELTA_PGA,
table_name, index_name
'yyyy-mm-dd hh24:mi:ss')) * 24 * 60, 1) "Total Time greatest(TEMP_SPACE_ALLOCATED -
/(Min)", /
select first_value(TEMP_SPACE_ALLOCATED) over
TRUNC(rows_processed /((SYSDATE - (partition by sql_id,sql_exec_id order by sample_time
SQL_ID,PLAN_HASH_VALUE,ELAPSED_TIME,PHYS
TO_DATE(first_load_time, 'yyyy-mm-dd hh24:mi:ss')) *
ICAL_READ_BYTES,PHYSICAL_WRITE_BYTES,DIS rows
select1sql_text,rows_processed
preceding),0) DELTA_TEMP from v$sql
24 * 60)) "Rows/Min",
K_READS,DIRECT_WRITES,BUFFER_GETS,ROWS
TRUNC(rows_processed /((SYSDATE - wherefrom USERS_EXECUTING>0;
_PROCESSED from v$sqlstats where sql_id='&sql_id'; dba_hist_active_sess_history
TO_DATE(first_load_time, 'yyyy-mm-dd hh24:mi:ss')) * where
24 * 60 * 60)) "Rows/Sec" , SUBSTR(sql_text, 1, 60) sample_time >= trunc(sysdate)
sql_text --and sample_time < to_date ('2013/04/16
FROM
select gv$sqlarea
sess_io.inst_id, 03:10:00','YYYY/MM/DD HH24:MI:SS')
WHERE SQL_ID='&SQL_ID'
sess_io.sid, and sql_exec_start is not null
AND open_versions
sesion.sql_id,
select instance_number >0 selectand sess_io.inst_id,
IS_SQLID_CURRENT='Y'
AND rows_processed
sess_io.block_gets, > 0;
inst_id,SESSION_ID,USER_ID,PROGRAM,sql_id,SQL sess_io.sid,
)
sess_io.consistent_gets,
_CHILD_NUMBER,sql_plan_hash_value,to_char groupsess_io.block_gets,
by sql_id,SQL_EXEC_ID,sql_exec_start
sess_io.physical_reads,
(sql_exec_start, 'dd-Mon-yyyy hh24:mi:ss') ordersess_io.consistent_gets,
by sql_id
sess_io.block_changes,
sql_exec_start from ) sess_io.physical_reads,
sess_io.consistent_changes where
dba_hist_active_sess_history wheresess_io.block_changes,
sql_id = '&sql_id'
from gv$sess_io sess_io, gv$session sesion
sql_id='&sql_id'; ordersess_io.consistent_changes
by sql_id, run_time_MIN desc;
where sesion.sid = sess_io.sid and from gv$sess_io sess_io, gv$session sesion
sess_io.inst_id
select = sesion.inst_id
sesion.sid,sql_text and
from v$sqltext sqltext, where sesion.sid = sess_io.sid and
sesion.sql_id='&sql_id'
v$session sesion where sesion.sql_hash_value = sess_io.inst_id = sesion.inst_id
and sesion.username
sqltext.hash_value andissesion.sql_address
not null ; = and sesion.username
select a.sid,b.sql_fulltextisfrom not null ;
V$Session a,
sqltext.address and sesion.username is not null V$SQLAREA b where a.sql_id=b.sql_id and
order by sqltext.piece; a.status='ACTIVE';
SELECT WAIT_CLASS,
TOTAL_WAITS,
round(100 * (TOTAL_WAITS / SUM_WAITS),2)
PCT_TOTWAITS,
ROUND((TIME_WAITED / 100),2)
TOT_TIME_WAITED,
SET lines 750
round(100 pages 10000 / SUM_TIME),2)
* (TIME_WAITED
COLUMN
PCT_TIMEwait_class format a30
COLUMN
FROM event format a60
COLUMN total_waits format 999999
(select WAIT_CLASS,
Wait Ratio COLUMN
TOTAL_WAITS,total_us%format
Wait Percentage (Only999999999
wait events-NO CPU)
COLUMN
TIME_WAITED pct_time format 99.99
SELECT METRIC_NAME, VALUE COLUMN avg_us format 999999.99
FROM V$SYSTEM_WAIT_CLASS
FROM V$SYSMETRIC SET
WHERE echoWAIT_CLASS
on != 'Idle'),
WHERE METRIC_NAME IN ('Database CPU Time (select sum(TOTAL_WAITS) SUM_WAITS,
set lines 750 pages 9999
Ratio', SELECT wait_class,SUM_TIME
sum(TIME_WAITED) event, total_waits AS waits,
col OBJECT_NAME
'Database Wait Time forRatio')
a35 AND from V$SYSTEM_WAIT_CLASS / 1000) AS
ROUND (time_waited_micro
select * from
INTSIZE_CSEC = ( total_ms,
where WAIT_CLASS != 'Idle')
SELECT
(select max(INTSIZE_CSEC) from V$SYSMETRIC); ORDER ROUND (time_waited_micro
BY PCT_TIME DESC; * 100 / SUM
A.inst_id, (time_waited_micro) OVER (),
A.CURRENT_OBJ#, 2
D.OBJECT_NAME, ) AS pct_time,
A.SQL_ID,
select ROUND ((time_waited_micro / total_waits) /
D.OBJECT_TYPE,
event, 1000, 2) AS avg_ms
A.EVENT,
time_waited "time_waited(s)", FROM v$system_event
SUM(A.WAIT_TIME
case when time_waited + A.TIME_WAITED)
= 0 then WHERE wait_class <> 'Idle'
TOTAL_WAIT_TIME
0 ORDER BY time_waited_micro DESC;
FROMelse
gV$ACTIVE_SESSION_HISTORY
SELECT round(time_waited*100
NVL(a.event, 'ON CPU') ASA,event,
/ sum(time_waited) SELECT NVL(a.event, 'ON CPU') AS event,
DBA_OBJECTS
Over(), 2)
COUNT(*) ASDtotal_wait_time COUNT(*) AS total_wait_time
WHERE
FROMend "percentage"
v$active_session_history a FROM v$active_session_history a
A.CURRENT_OBJ#
from
WHERE a.sample_time= D.OBJECT_ID
> SYSDATE - 5/(24*60) -- 5 WHERE a.sample_time > SYSDATE - 60/2880 -- 30
GROUP
mins( BY mins
A.inst_id,
GROUP select
BYevent, sum(time_waited) time_waited
a.event GROUP BY a.event
A.CURRENT_OBJ#,
ORDER fromBY v$active_session_history
total_wait_time DESC; ORDER BY total_wait_time DESC;
D.OBJECT_NAME,
where sql_id = '&SQL_ID'
A.SQL_ID,
group by event
D.OBJECT_TYPE,
) <-- shared pool (current)
A.EVENT
order by
ORDER BY
time_waited desc; From AWR -->
TOTAL_WAIT_TIME DESC
)
where rownum<=20
/
SELECT * FROM
" @?/rdbms/admin/utlxplp.sql
TABLE(DBMS_XPLAN.DISPLAY('','','ALLSTATS
(or)
LAST +OUTLINE +PEEKED_BINDS +PROJECTION
SELECT * FROM
+ALIAS +PREDICATE +COST +BYTES'));
TABLE(DBMS_XPLAN.DISPLAY('','','+COST +BYTES
-PREDICATE'));
SELECT * FROM
TABLE(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id',
&childnumber,'ALLSTATS LAST +PEEKED_BINDS
+PROJECTION +ALIAS +OUTLINE +PREDICATE
+COST +BYTES'));
(OR)
select * from
table(dbms_xplan.display_cursor('&sql_id',&childnumb <-- shared pool (current)
er,'ADVANCED'));
From AWR -->
select s.sid, s.serial#, s.username,
select spid,p.pid, s.sid, s.serial#, p.program from
to_char(s.logon_time,'DD-MON
v$session HH24:MI:SS')
s, v$process p where paddr=addr and
logon_time,
p.pid=30849 order by p.pid;
p.pid oraclepid, p.spid "ServerPID", s.process
"ClientPID",
select spid "host-pid",p.pid,
s.program clientprogram,s.sid, s.serial#,
s.module, p.program,
s.machine,
s.machine
s.osuser, from gv$session s, gv$process p where
paddr=addr and s.sid=&sid
s.status, s.last_call_et order by p.pid; <-- Killing a session ( Good Query )
from gv$session s, gv$process p
where p.spid=nvl('&unix_process',' ')
and s.paddr=p.addr
order
selectby s.sid
sys_context ( 'USERENV' , 'SID' ) OwnSID from
dual;
select sys_context('USERENV','SESSION_USER')
current_user,sys_context('USERENV','SESSION_SCH
EMA') current_schema from dual; select distinct sid OwnSID from v$mystat;
select 'alter system kill session ' || '''' || sid || ',' || serial#
||',@'|| inst_id || '''' || ' immediate;' from gv$session
where sid='&sid';
(SELECT ROUND (VALUE / 1024 / 1024, 2)
FROM v$sesstat
WHERE STATISTIC# = 83 AND v$sesstat.SID
= v$session.sid)
AS "Physical read bytes, in MB",
(SELECT ROUND (VALUE / 1024 / 1024, 2)
FROM v$sesstat
WHERE STATISTIC# = 96 AND v$sesstat.SID
= v$session.sid)
AS "Physical write bytes, in MB",
(SELECT ROUND (VALUE / 1024 / 1024, 2)
FROM v$sesstat
WHERE STATISTIC# = 185 AND v$sesstat.SID
= v$session.sid)
AS "Redo size, in MB",
(SELECT ROUND (VALUE / 1024 / 1024, 2)
FROM v$sesstat
WHERE
select ' alter systemSTATISTIC#
kill session = 590 AND v$sesstat.SID
'''||sid||''','''|| select ' alter system kill session '''||sid||','||serial#||',@'||
= v$session.sid)
serial#||''',''@'||inst_id||''' immediate; ' inst_id||''' immediate; ' -- 4 hours
AS "Received
from gv$session where from client, ininMB",
username from gv$session where username in
(SELECT ROUND (VALUE
('SCHEMA1','SCHEMA2') and logon_time / 1024 / 1024, 2) -1
< sysdate ('SCHEMA1','SCHEMA2','SCHEMA3') and
FROM v$sesstat
and status='INACTIVE'; status='INACTIVE' and last_call_et > 4*60*60;
WHERE STATISTIC# = 589 AND v$sesstat.SID
= v$session.sid)
AS "Sent to client, in MB",
SID,
SERIAL#,
v$session.STATUS,
PROGRAM,
USER#, Then kill the old sessions using kill -9 spid
USERNAME, kill -9 `ps -ef|grep LOCAL=NO|grep oratst1|awk '{print
ps -efCOMMAND,
| grep "oracleinstname (LOCAL=NO)" $2}'`
OWNERID,
OSUSER,
PROCESS,
SELECTMACHINE,
a.sid, a.username, b.xidusn rollback_seg_no,
OBJECT_NAME
b.used_urec undo_records, b.used_ublk undo_blocks
FROMFROM v$session
gv$session a, gv$transaction b
WHERE LEFT OUTER
a.saddr JOIN
= b.ses_addr;
DBA_OBJECTS
ON v$session.ROW_WAIT_OBJ# =
dba_objects.object_ID
WHERE v$session.LOGON_TIME BETWEEN
TRUNC
SELECT(SYSDATE) AND SYSDATE
A.SNAP_ID,A.INSTANCE_NUMBER
AND v$session.sid = &sid;
"ID",B.BEGIN_INTERVAL_TIME,B.END_INTERVAL_T
IME,A.RESOURCE_NAME,
CURRENT_UTILIZATION
SELECT o.sid,
"CURRENT",MAX_UTILIZATION
o.sql_text, "MAX"
FROM WRH$_RESOURCE_LIMIT
o.address, A,
WRM$_SNAPSHOT
o.hash_value, B
WHERE A.RESOURCE_NAME LIKE '%session%'
o.user_name,
ANDs.schemaname,
A.SNAP_ID=B.SNAP_ID
ANDo.sql_id
A.INSTANCE_NUMBER=
B.INSTANCE_NUMBER
FROM v$open_cursor o, v$session s
AND
WHERE((A.INSTANCE_NUMBER=1
o.saddr = s.saddr AND o.sid = s.sid AND
AND
(O.SIDB.BEGIN_INTERVAL_TIME
= &sid) > (SELECT
STARTUP_TIME FROM GV$INSTANCE WHERE
INSTANCE_NUMBER=1)) OR
(A.INSTANCE_NUMBER=2 AND
B.BEGIN_INTERVAL_TIME >
(SELECT STARTUP_TIME FROM GV$INSTANCE
WHERE INSTANCE_NUMBER=2)))
order by A.INSTANCE_NUMBER,A.SNAP_ID;
AND status = 'ACTIVE'
GROUP BY
CASE WHEN state != 'WAITING' THEN
'WORKING'
ELSE 'WAITING'
END,
CASE WHEN state != 'WAITING' THEN 'On CPU /
SELECT SQL_ID, SQL_FULLTEXT, PLAN_HASH_VALUE, PARSING_SCHEMA_NAME, ELAPSED_TIME FROM V$SQL W
runqueue'
ELSE event
END
-- Purge explain plan from shared pool, must be done
ORDER BY
on each RAC node
1 DESC, 2 DESC
select inst_id, sql_id, address, hash_value,
/
plan_hash_value, sql_text from gv$sqlarea where
sql_text like 'SELECT COUNT(*) FROM V$SESSION
A WHERE A.AUDSID IN%';
select * from gv$sqlarea where sql_text like
'%XLA_AE_LINES_GT%';
select inst_id, sql_id, address, hash_value,
plan_hash_value, sql_text from gv$sqlarea where
sql_id = 'amd3xmgb8cnuz';
-- On each INST_ID, do these:
alter session set events '5614566 trace name context
forever';
exec
sys.dbms_shared_pool.purge('00000006999BD648,
1622326877','c');
alter session force parallel query;
declare
v_sql CLOB;
begin
select sql_text into v_sql from dba_hist_sqltext where
sql_id='5273fz2cqkk80';
sys.dbms_sqldiag_internal.i_create_patch(
sql_text => v_sql,
hint_text => 'DYNAMIC_SAMPLING(4)',
name => '5273fz2cqkk80_patch');
end;
/ https://avdeo.com/2012/12/14/oracle-sql-patch-i/
check ENABLE/DISABLE/DROP
EXEC
DBMS_SQLTUNE.ALTER_SQL_PROFILE('coe_527
3fz2cqkk80_3455548535','STATUS','DISABLED');
exec
dbms_sqltune.drop_sql_profile('coe_5273fz2cqkk80_
select NAME,SIGNATURE ,STATUS,FORCE_MATCHING
3455548535');
check Drop
so.name
select * from plan_name,
table(dbms_xplan.display_awr('&sql_id',
NULL, null,so.signature,
'ALLSTATS LAST'));
so.category,
PROMPT so.obj_type,
================================
PROMPT so.plan_id,
Sql Profiles
PROMPT sod.comp_data
================================
from
sqlobj$9999 so, set serveroutput on
set lines 1000 pages
sqlobj$data sod DECLARE
col name for a30
select SQL_HANDLE,
where PLAN_NAME, ENABLED, i NATURAL;
col task_exec_name for a16
ACCEPTED, FIXED
col category forso.namea10 ,sql_text from
= '&m_plan_name' BEGIN
dba_sql_plan_baselines;
and
col created for a30 sod.signature = so.signature i :=
SELECT chr(9)||chr(9)||''''||
and
col sql_text for a150 sod.category = so.category dbms_spm.drop_sql_plan_baseline('SQL_b3d69637a
regexp_replace(extractvalue(value(d),
col signature andfor 9999999999999999999999999
sod.obj_type = so.obj_type a86a8ca');
'/hint'),'''','''''')||''','
select * from and sod.plan_id = so.plan_id dbms_output.put_line(i);
from
table(dbms_xplan.display_sql_plan_baseline(plan_na
order by
select sql.sql_id,sql.child_number as child , prof.name, END;
xmltable('/*/outline_data/hint'
me=>'SQL_PLAN_b7pnq6yp8da6a29d0d9b7')); /passing (
prof.category, signature, obj_type, plan_id
All in) oneprf,
script
prof.created,prof.task_exec_name,prof.FORCE_MATC Taking
select SQL HINTS from memory
table (
HING,prof.status,prof.SIGNATURE xmltype(other_xml) as xmlval
from select from
dba_sql_profiles xmlsequence(
prof, v$sql_plan
gv$sql sql To see the hints from sql_profile
where
extract(xmltype(prf.comp_data),'/outline_data/hint')
where sql.sql_id in ('&sql_id') select
sql_idhint
like from (
nvl('&sql_id',sql_id)
Resolution
-- normally,
) is to fix the execution plan in 11g
and sql.child_number=child_number select s.sql_id, sd.obj_type,
and child_number = &child_no
by
-- andrunningfrom row_number()
and other_xmlover (partition
is not null by sd.signature,
dual
sql.force_matching_signature=prof.SIGNATURE sd.category
) order by sd.signature) row_num,
variable
order) by x hntnumber extractValue(value(t),
) '/hint') hint
begin
;created; from
d; sqlobj$data sd, v$sql s,
:x := table(xmlsequence(extract(xmltype(sd.comp_data),
dbms_spm.load_plans_from_cursor_cache( '/outline_data/hint'))) t
sql_id=>'&sql_id', where sd.obj_type = 1
plan_hash_value=>&plan_hash,
PROMPT ================ and s.exact_matching_signature = sd.signature
fixed=>'YES');
PROMPT Sql Baselines and s.sql_id = '&sql_id')
end;
PROMPT ================ order by row_num
/ /
undef sid
undef sql_id
undef inst_id
spool off;
"
Name ..... ......................................: '||
set pages 500 s.SCHEMANAME,
set
set lines
linesize1000750pages 9999 'Program ...............................................:
column
column box format9999
sid format a30 '||s.program,
column
column serial for 999999
spid format a10 'Module .................................................:
column
column status
username format a15 a30
format '|| s.module,
column
column username
program format formata30
a10 'Action .................................................: '||
column
column sql_text
os_user format
format a80
a20 s.action,
column module format a30 'Terminal ...............................................:
col program
select for a30
b.sid,b.serial#,a.spid, substr(b.machine,1,30) '||s.terminal,
col SQL_EXEC_START
box,b.logon_time for a20
logon_date , to_char 'Client
(b.logon_time, 'hh24:mi:ss') logon_time, Machine .........................................: '||
SELECT * FROM
substr(b.username,1,30) username, s.machine,
(SELECT status,inst_id,sid,SESSION_SERIAL#
substr(b.osuser,1,20) os_user, 'LAST_CALL_ET ......................................
as
substr(b.program,1,30) program,status,b.last_call_et .....: '||s.last_call_et,
Serial,username,sql_id,SQL_PLAN_HASH_VALUE,
AS last_call_et_secs,b.sql_id 'S.LAST_CALL_ET/3600 ..........................
MODULE,program,
from v$session b,v$process a ..........: '||s.last_call_et/3600
whereTO_CHAR(sql_exec_start,'dd-mon-yyyy from v$session s, v$process p
hh24:mi:ss')
b.paddr = a.addrAS sql_exec_start, where p.addr=s.paddr and
ROUND(elapsed_time/1000000)
and type='USER' s.sid=nvl('&sid',s.sid) and
AS "Elapsed
order by b.sid;(s)", p.spid=nvl('&spid',p.spid) and
ROUND(cpu_time /1000000) nvl(s.process,-1) =
AS "CPU (s)", nvl('&ClientPid',nvl(s.process,-1));
substr(sql_text,1,30) sql_text
FROM gv$sql_monitor where module not like
'%emagent%'
ORDER BY sql_exec_start desc
COLUMN) sid FORMAT 99999
COLUMN
WHERE serial# FORMAT 9999999
rownum<=20;
COLUMN machine FORMAT A30
COLUMN progress_pct FORMAT 99999999.00
COLUMN elapsed FORMAT A10 ALTER SESSION SET
COLUMN
Missing remaining
statements FORMAT A10 -->
in SQL Monitoring "_SQLMON_MAX_PLAN"=4020;
SELECT SID, SERIAL#,
ALTER SESSION SET OPNAME,
SELECT s.sid, TARGET, SOFAR, TOTALWORK,
"_SQLMON_MAX_PLANLINES"=4000;
s.serial#, UNITS,
s.machine, TO_CHAR(START_TIME,'DD/MON/YYY
ROUND(sl.elapsed_seconds/60) || ':' || Y HH24:MI:SS') START_TIME,
MOD(sl.elapsed_seconds,60)
col PLAN FOR a150 elapsed, TO_CHAR(LAST_UPDATE_TIME,'DD/M
SELECT ROUND(sl.time_remaining/60) || ':' || ON/YYYY HH24:MI:SS')
MOD(sl.time_remaining,60)
RPAD('(' || p.plan_line_IDremaining, || ' ' || LAST_UPDATE_TIME,
ROUND(sl.sofar/sl.totalwork*100,
NVL(p.plan_parent_id,'0') || ')',8) || '|' || 2) TIME_REMAINING,
progress_pct
RPAD(LPAD (' ', 2*p.plan_DEPTH) || ELAPSED_SECONDS, MESSAGE,
FROM gv$session
p.plan_operation || ' 's,|| p.plan_options,60,'.') || USERNAME
gv$session_longops sl
NVL2(p.plan_object_owner||p.plan_object_name, FROM V$SESSION_LONGOPS
WHERE s.sid = sl.sid '.' || p.plan_object_name || WHERE TIME_REMAINING != 0;
'(' || p.plan_object_owner||
AND
') ', '') || s.serial# = sl.serial#; /
Time NVL2(p.plan_COST,'Cost:'
model || p.plan_COST,'') || ' ' Stats
|| select vsn.name, vst.value
select stat_name, value
NVL2(p.plan_bytes||p.plan_CARDINALITY,'(' || from v$sesstat vst, v$statname vsn
from V$SESS_TIME_MODEL
p.plan_bytes || ' bytes, ' || p.plan_CARDINALITY || ' where vsn.statistic# = vst.statistic#
where sid = &sid
rows)','') || ' ' || and vst.value != 0
order by value desc;
NVL2(p.plan_partition_start || and vst.sid = &sid
p.plan_partition_stop,' PStart:' || order by vst.value;
Explain Plan waiting steps
p.plan_partition_start || ' PStop:' ||
p.plan_partition_stop,'') ||
NVL2(p.plan_time, p.plan_time || '(s)','') AS PLAN
FROM gv$sql_plan_monitor p
WHERE sid=&sid
ORDER BY p.plan_line_id, p.plan_parent_id; https://blog.yannickjaquier.com/oracle/real-time-sql-monitoring.html
select * from
table(dbms_xplan.display_awr('&sql_id', null, null,
'ALLSTATS LAST'));
https://hoopercharles.wordpress.com/2010/03/01/dbms_xplan-format-pa
q'[END_OUTLINE_DATA]');
:signature :=
DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql
_txt);
:signaturef :=
DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql
_txt, TRUE);
output :=
SYS.DBMS_SQLTUNE_INTERNAL.I_CREATE_SQ
L_PROFILE(
SQL_TEXT => sql_txt,
PROFILE_XML =>
DBMS_SMB_INTERNAL.VARR_TO_HINTS_XML(h
),
name =>
'coe_5273fz2cqkk80_3455548535',
description => 'coe 5273fz2cqkk80
3455548535 '||:signature||' '||:signaturef||'',
CATEGORY => 'DEFAULT',
CREATOR => 'SYS',
VALIDATE
set lines => TRUE,
1000 pages 9999
TYPE =>
col name for a30 'PATCH',
FORCE_MATCH for
col task_exec_name => a16
TRUE,
IS_PATCH
col category for=> TRUE);
a10
DBMS_LOB.FREETEMPORARY(sql_txt);
col created for a30
coldbms_output.put_line(output);
sql_text for a150
colEND;
signature for 9999999999999999999999999
/ <= My own sql Patch
select sql.sql_id,sql.child_number as child ,
prof.name,
sql Profilesprof.category,
for a sql_id prof.created,
prof.task_exec_name,prof.FORCE_MATCHING,
prof.status, prof.SIGNATURE,prof.SQL_TEXT
from
dba_sql_profiles prof,
gv$sql sql
where sql.sql_id in ('&sql_id')
order by
created;
load from cursor Enable/disable
DECLARE
l_plans_altered PLS_INTEGER;
BEGIN
l_plans_altered :=
DBMS_SPM.alter_sql_plan_baseline(
sql_handle =>
'SQL_b3d69637aa86a8ca',
plan_name =>
'SQL_PLAN_b7pnq6yp8da6a29d0d9b7',
attribute_name => 'FIXED',
attribute_value
select => 'YES');
hint as outline_hints
variable chr(9)||chr(9)||''''||
SELECT sqlid number; from (select p.name, p.signature,
execute :sqlid
regexp_replace(extractvalue(value(d), DBMS_OUTPUT.put_line('Plans
p.category, row_number() Altered:
:=DBMS_SPM.LOAD_PLANS_FROM_CURSOR_C
'/hint'),'''','''''')||''',' ' || l_plans_altered);
over (partition by sd.signature,
ACHE(sql_id=>'5qbbnv0abm2vx',
from END;
sd.category order by sd.signature)
PLAN_HASH_VALUE=>
xmltable('/*/outline_data/hint' 4197102931, /row_num,
SQL_HANDLE
passing ( => 'SQL_d3318f33dfac7bc2'); extractValue(value(t), '/hint') hint
Taking
select SQL HINTS from AWR Taking SQL HINTSsd,
from sqlobj$data from PROFILES p,
dba_sql_profiles
xmltype(other_xml) as xmlval
from table(xmlsequence(extract(xmltype(sd.co
-- v$sql_plan mp_data),
dba_hist_sql_plan '/outline_data/hint')))
where t
sql_id like nvl('&sql_id',sql_id) where sd.obj_type = 1
and other_xml is not null and p.signature = sd.signature
) and p.category = sd.category
) and p.name like ('&profile_name'))
d; order by row_num;
http://intermediatesql.com/oracle/what-are-sql-profiles-and-why-do-we-need-them/
http://www.alfredokriegdba.com/2015/02/
bad-sql-plan-from-shared-pool/
, px_servers_allocated path
'px_servers_allocated'
, duration path
'stats/stat[@name="duration"]'
, elapsed_time path
'stats/stat[@name="elapsed_time"]'
, cpu_time path
'stats/stat[@name="cpu_time"]'
, user_io_wait_time path
'stats/stat[@name="user_io_wait_time"]'
, application_wait_time path
'stats/stat[@name="application_wait_tim
e"]'
, concurrency_wait_time path https://ma
'stats/stat[@name="concurrency_wait_ti uro-
me"]' pagano.c
, cluster_wait_time path SELECT om/2015/
'stats/stat[@name="cluster_wait_time"]' report_id, 05/04/hist
, plsql_exec_time path key1 orical-sql-
'stats/stat[@name="plsql_exec_time"]' sql_id, monitor-
, other_wait_time path key2 reports-
'stats/stat[@name="other_wait_time"]' sql_exec in-12c/
http://allappsdba.blogspot.com/2012/04/queries-to-get-session-information.html
, buffer_gets path _id, key3
'stats/stat[@name="buffer_gets"]' sql_exec http://ww
, read_reqs path _start w.toadwo
'stats/stat[@name="read_reqs"]' FROM rld.com/pl
, read_bytes path dba_hist_ atforms/o
'stats/stat[@name="read_bytes"]' reports racle/w/wi
) x1 WHERE ki/11372.r
where x1.elapsed_time/1000000 > 200 compone eal-time-
and t.COMPONENT_NAME = nt_name sql-
'sqlmonitor' = monitorin
order by 5 'sqlmonito g-12c-
column
/ username format a20 r'; part-ii
Select s.username, s.Sid, s.serial#,
S.Sql_Id, round((Sysdate-
Sql_Exec_Start)*24*60*60/60,0)
MINUTES, Sql_Text
From V$Session S, V$Sqltext T
Where S.Sql_Id = T.Sql_Id
And Sql_Exec_Start Is Not Null And
Piece = 0
And (Sysdate-Sql_Exec_Start)*24*60 >
1
order by MINUTES desc
;
group by
sql_id,
sql_plan_hash_value,
event,sql_exec_id,
sql_exec_start,
current_obj#,
sql_plan_line_id,
sql_plan_operation,
sql_plan_options
)
order by count_1 desc;
https://blog.yannickjaquier.com/oracle/real-time-sql-monitoring.html
http://www.tek-tips.com/viewthread.cfm?qid=1572803
PSED_TIME DESC
SELECT * FROM
TABLE(DBMS_XPLAN.DISPLAY_CUR
SOR('5qbbnv0abm2vx',&childnumber,'A
LLSTATS LAST +PEEKED_BINDS
SELECT
+PROJECTION +ALIAS +OUTLINE
regexp_replace(extractvalue(value(d),
+PREDICATE
'/hint'),'''','''''') plan_hint +BYTES'));
+COST
from
xmltable('/*/outline_data/hint'
4197102931 passing (
Taking SQL HINTS selectfrom PLAN_TABLE
xmltype(other_xml)
as xmlval
from plan_table
where other_xml is not
null
and plan_id = (select
max(plan_id) from plan_table)
and rownum=1
)
) d; https://jonathanlewis.wordpress.com/2017/06/12/dbms_sqldiag/
Capacity Planning
SGA Allocation
1 lakh records table with 5 column
Generate DB Load
Tuning
Clearing Invalidation
SHARED_POOL_RESERVED_SIZE
Keeping Large Objects in SGA
I/O tuning
SORTING
dispatcher processes
INDEX
Using Oracle Blocks Efficiently
Explain Plan
SQL Trace
Locking the Memory
See hot data files (from a single block read time judge)
system statistics
Metric values by %
AWR Snapshot list
top 100 sql queries based on CPU, elapsed time for the past 7
days in Oracle
oracle_which_sql_caused_wait_event
Performance tuning
Reading tkprof output
tools
STATISTICS
Table statistics
Index statistics
schema Statistics
Database statistics
Stale statistics
sql_profile details
Top 10 statements
Top 10 sql by elapsed time
Optimizer
optimizer override
Advisors
advisor recommendation for a taskid
Automatic sql tuning advisor recommendation summary
Table Fragmentation
Here is a technique I use when troubleshooting runaway query. It is based on data from v$sql_plan_statistics already mention
tremendous value and potentially a good alternative to 10046 traces. The biggest obstacle to a wide adoption is the horr
“statistics_level=all” mode. But it is OK to do that at session level, even in production system. So, the execution of the query
statistics_level=all and recreate run environment. Here is the full sequence of a
This recipe looks rather tedious, and it really is, unless the tool is used that does all that things. The point is, once I was free
only runaway queries (which are rare anyway) but simply expensive queries with a lot of gets/execution. I should add tha
complicated cases or when in doubts. Most often, problems are simple and a quick look at the execution p
EXAMPLE:
---------
So 45 % should be = 216 MB
SGA = 160 MB
PGA = 16 MB
PRAGMA EXCEPTION_INIT(table_nonexistent, -942);
BEGIN
BEGIN
execute immediate 'drop table sh.sales_copy';
EXCEPTION
WHEN table_nonexistent THEN
NULL;
END;
Table size May be 100 MB
execute immediate 'create table sh.sales_copy as select * from sh.sales';
FOR i IN 1..25 LOOP
execute immediate 'select * from sh.sales_copy';
execute immediate 'delete from sh.sales_copy';
execute immediate 'commit';
execute immediate 'insert into sh.sales_copy select * from sh.sales';
execute immediate 'commit';
END LOOP;
END;
/
select metric_name,
COLUMN QUERY_PLANround(value,2)
FORMAT from
A60 v$sysmetric
where
SELECT metric_name
LPAD ('in',('Database
2 * LEVEL)CPU Time Ratio', 'Database Wait Time Ratio')
and intsize_csec
|| operation= (select max(INTSIZE_CSEC) FROM V$SYSMETRIC);
|| ' '
|| options
|| ' '
|| object_name query_plan
FROM plan_table
CONNECT BY PRIOR id = parent_id
START WITH id = 1
ORDER BY id;
3
SETwhere table_name
LINESIZE 100 = 'BIG1';
COLUMN trace_file FORMAT A60
TABLE_NAME size
------------------------------
SELECT s.sid, ------------------------------------------
BIG1s.serial#,
85536kb
pa.value || '/' || LOWER(SYS_CONTEXT('userenv','instance_name')) ||
SQL> select|| table_name,round((num_rows*avg_row_len/1024),2)||'kb'
'_ora_' p.spid || '.trc' AS trace_file "size"
2 from user_tables
FROM v$session s,
3 where table_name
v$process p, = 'BIG1';
v$parameter pa
TABLE_NAME
WHERE pa.name size= 'user_dump_dest'
------------------------------
AND s.paddr = p.addr------------------------------------------
BIG1
AND 68986.97kb
s.audsid = SYS_CONTEXT('USERENV', 'SESSIONID');
SQL> select status from user_indexes
2 where table_name = 'BIG1';
no rows selected
You set the size of the shared pool with the SHARED_POOL_SIZE initialization
parameter.
It defaults to 8,388,608 bytes (8 MB).
SELECT SUM(250 * users_opening) FROM v$sqlarea;
Keep the ratio of the sum of GETMISSES to the sum of GETS less than 15%:
Using V$DB_CACHE_ADVICE
--------------------------
SELECT
size_for_estimate,buffers_for_estimate,estd_physical_read_factor,estd_physical
_reads
FROM V$DB_CACHE_ADVICE
WHERE name = 'DEFAULT'
AND block_size = ( SELECT value FROM V$PARAMETER
WHERE name = 'db_block_size')
AND advice_status = 'ON';
During peak running times, use the following query to calculate how many
blocks are used by each object:
SQL> SELECT owner#, name, count(*) blocks
FROM v$cache
GROUP BY owner#, name;
TABLE_NAME BLOCKS
---------- ----------
COUNTRIES 14
SELECT name,
1 - (physical_reads / (db_block_gets +
consistent_gets)) "HIT_RATIO"
FROM sys.v$buffer_pool_statistics
WHERE db_block_gets + consistent_gets > 0;
LOG_BUFFER
LOG_CHECKPOINT_INTERVAL
LOG_CHECKPOINT_TIMEOUT
The LGWR process starts a new ARCn process whenever the current number
of ARCn
processes is insufficient to handle the workload. If you anticipate a heavy
workload
for archiving, such as during bulk loading of data, specify multiple archiver
processes
with the LOG_ARCHIVE_MAX_PROCESSES initialization parameter.
• SHARED_POOL_SIZE:
– 8 KB per loaded class
– 50 MB for loading large JAR files
• Configure Oracle Shared Server
• JAVA_POOL_SIZE
– 20 MB default
– 50 MB for medium-sized Java application
SQL> SELECT class, count FROM v$waitstat WHERE class LIKE '%undo%';
or
SQL> SELECT sum(value) FROM v$sysstat WHERE name IN ('db block gets',
'consistent gets');
or
SQL> SELECT sum(waits)* 100 /sum(gets) "Ratio",
sum(waits) "Waits", sum(gets) "Gets"
FROM v$rollstat;
V$LOCK
V$LOCKED_OBJECT
DBA_WAITERS
DBA_BLOCKERS
SQL> SELECT owner, object_id, object_name, object_type,
v$lock.type
FROM dba_objects, v$lock
WHERE object_id = v$lock.id1 and object_name = table_name;
Recovering Space
-------------------
Below the high-water mark:
• Use the Export and Import utilities to:
– Export the table
– Drop or truncate the table
– Import the table
Or, use the Alter Table Employees Move;
command to move the table
• Above the high-water mark, use the Alter Table
Employees Deallocate Unused; command.
SELECT t.file_name,
t.tablespace_name,
round (s.singleblkrdtim / s.singleblkrds, 2) AS CS,
s.READTIM,
s.WRITETIM
FROM v$filestat s, dba_data_files t
WHERE s.file# = t.file_id and rownum <= 10 order by cs desc ;
select * from
(
select session_id, session_serial#, count(*)
from v$active_session_history
where session_state= 'ON CPU' and
sample_time > sysdate - interval '5' minute
group by session_id, session_serial#
order by count(*) desc
)
where rownum <= 10;
select * from
(
select session_id, session_serial#,count(*)
from v$active_session_history
where session_state='WAITING' and
sample_time > sysdate - interval '5' minute
group by session_id, session_serial#
order by count(*) desc
)
where rownum <= 10;
SELECT sid, serial# , username, event,blocking_session, seconds_in_wait, sql_id FROM v$session WHERE state = 'WAITING
SELECT wait_class_id, wait_class#, wait_class, total_waits, time_waited FROM v$session_wait_class WHERE sid=161;
SELECT metric_name, AVG(value), metric_unit FROM v$sysmetric WHERE metric_unit LIKE '\%%' ESCAPE '\' GROUP BY m
SELECT snap_id, snap_level, instance_number,
to_char(begin_interval_time, 'yyyy/mm/dd hh24:mi:ss')
begin_interval_time,
to_char(end_interval_time, 'yyyy/mm/dd hh24:mi:ss') end_interval_time,
to_char(flush_elapsed) flush_elapsed,
to_char(startup_time, 'yyyy/mm/dd hh24:mi:ss') startup_time,
error_count
FROM DBA_HIST_SNAPSHOT
WHERE dbid = :dbid
order by 1
select *
from
(select
sql_text,
sql_id,
elapsed_time,
cpu_time,
user_io_wait_time
from
sys.v_$sqlarea
order by 5 desc)
where rownum < 6;
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
END;
/
SELECT *
FROM
select * from status,
(SELECT
(select--username,
s.sql_id, RANK() OVER (ORDER BY
(max(s.CPU_TIME_TOTAL/s.executions_total))
sql_id, DESC) cpu_rank,
RANK() OVER
sql_exec_id,(ORDER BY
(max(s.ELAPSED_TIME_TOTAL/s.EXECUTIONS_TOTAL))
TO_CHAR(sql_exec_start,'dd-mon-yyyy hh24:mi:ss') AS DESC)
sql_exec_start,
elapsed_rank
ROUND(elapsed_time/1000000) AS "Elapsed (s)",
from ROUND(cpu_time /1000000) AS "CPU (s)",
dba_hist_sqlstat
buffer_gets, s,
dba_hist_snapshot sn
ROUND(physical_read_bytes /(1024*1024)) AS "Phys reads (MB)",
whereROUND(physical_write_bytes/(1024*1024)) AS "Phys writes (MB)"
sn.begin_interval_time
FROM v$sql_monitorbetween to_date('06-aug-2014 0001','dd-mon-yyyy
hh24mi')
ORDER BY elapsed_time DESC
and )
to_date('13-aug-2014
WHERE rownum<=20; 0600','dd-mon-yyyy hh24mi')
and
sn.snap_id=s.snap_id and s.executions_total >0
group by
s.sql_id
) where cpu_rank <=100 and elapsed_rank<=100;
select
SQL_ID
, PLAN_HASH_VALUE
column "File Total" format 99,999,990
, sum(EXECUTIONS_DELTA) EXECUTIONS
, sum(ROWS_PROCESSED_DELTA) CROWS
set line 132
, trunc(sum(CPU_TIME_DELTA)/1000000/60) CPU_MINS
set pagesize 33
, trunc(sum(ELAPSED_TIME_DELTA)/1000000/60) ELA_MINS
from DBA_HIST_SQLSTAT
ttitle
where " ***** Database:
SQL_ID in ( "db", DataFile's Disk Activity (As of:" tdate " ) *****"
'&sqlid')
select
group by substr(df.file#,1,2) "ID",
SQL_ID , PLAN_HASH_VALUE
rpad(substr(name,1,52),52,'.')
order by SQL_ID, CPU_MINS;"File Name",
rpad(substr(phyrds,1,10),10,'.') "Phy Reads",
rpad(substr(phywrts,1,10),10,'.') "Phy Writes",
http://uralural.blogspot.com/2007/07/oracle-cbo-chooses-wrong-index-although.html
rpad(substr(phyblkrd,1,10),10,'.') "Blk Reads",
rpad(substr(phyblkwrt,1,10),10,'.') "Blk Writes",
rpad(substr(readtim,1,9),9,'.') "Read Time",
rpad(substr(writetim,1,10),10,'.') "Write Time",
(sum(phyrds+phywrts+phyblkrd+phyblkwrt+readtim)) "File Total"
from v$filestat fs, v$datafile df
where fs.file# = df.file#
group by df.file#, df.name, phyrds, phywrts, phyblkrd,
phyblkwrt, readtim, writetim
order by sum(phyrds+phywrts+phyblkrd+phyblkwrt+readtim) desc, df.name;
ttitle off
'SQL*Net break/reset to client',
'SQL*Net more data from client',
'SQL*Net message to client',
'dispatcher timer',
'Null event',
'parallel query dequeue wait',
'parallel query idle wait - Slaves',
'pipe get',
'PL/SQL lock timer',
'slave wait',
'virtual circuit status',
'WMON goes to sleep'
)
AND a.event NOT LIKE 'DFS%'
AND a.event NOT LIKE 'KXFX%'
AND a.sid = b.sid)
order by 6 desc, 1 asc
select
event,
sql_id,
snap_id,
dbid,
instance_number,
sample_time,
session_id,
session_serial#,
user_id,
blocking_session,
program,
(
select
sql_text
from
dba_hist_sqltext
where
sql_id = dba_hist_active_sess_history.sql_id
) sql_text
from
dba_hist_active_sess_history
where
program = 'some.exe'
and
sample_time between
to_timestamp('START_TIME', 'YYYY-MM-DD HH24:MI:SS.FF3') and
to_timestamp('END_TIME', 'YYYY-MM-DD HH24:MI:SS.FF3')
and
event = 'some wait event';
http://gavinsoorma.com/2012/11/ash-and-awr-performance-tuning-scripts/
http://hourim.wordpress.com/2012/09/14/tuning-by-tkprof-a-case-study/
https://sites.google.com/site/embtdbo/wait-event-documentation
http://www.oraclerealworld.com/best-oracle-performance-tools/
select distinct
p.name sql_profile_name,
s.sql_id
from
dba_sql_profiles p,
DBA_HIST_SQLSTAT s
where
p.name=s.sql_profile;
http://nadvi.blogspot.com/2011/10/gather-optimizer-statistics-11g_26.html
exec DBMS_STATS.GATHER_TABLE_STATS (ownname => '&OWNER' , tabname => '&TABLE_NAME',cascade => true, es
exec dbms_stats.gather_index_stats ( ownname => '&OWNER', indname => '&INDEX_NAME',estimate_percent => dbms_sta
exec DBMS_STATS.GATHER_SCHEMA_STATS (ownname => '&OWNER' , estimate_percent => dbms_stats.auto_sample_
EXEC DBMS_STATS.GATHER_DATABASE_STATS(ESTIMATE_PERCENT => DBMS_STATS.AUTO_SAMPLE_SIZE, MET
select
table_name,STATUS,NUM_ROWS,SAMPLE_SIZE,to_char(LAST_ANALYZED,'
DD-MON-YYYY hh24:mi:ss') from dba_tables
where table_name in ('&tab1','&tab2','&tab3') and owner='&schema';
select 'execute DBMS_STATS.GATHER_SCHEMA_STATS('''||username||''') ;'
from dba_users where username <> 'SYS';
exec dbms_stats.gather_schema_stats ('SYS');
exec dbms_stats.gather_database_stats (gather_sys=>TRUE);
exec dbms_stats.gather_dictionary_stats;
exec dbms_stats.gather_fixed_objects_stats;
select n.object_name as
T,o.ROWCNT,o.BLKCNT,to_char(o.SAVTIME,'hh/dd/mm HH:MI:SS') as time
from dba_objects n,WRI$_OPTSTAT_TAB_HISTORY o where
o.obj#=n.object_id and n.object_name='ARS_SV_USERS';
exec dbms_stats.gather_table_stats('DBUSER01','TABLE01',
estimate_percent=>33, cascade => TRUE, method_opt => 'FOR ALL INDEXED
COLUMNS SIZE 10');
begin
dbms_stats.gather_schema_stats(
ownname => 'SCOTT',
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size auto',
degree => 7
);
end;
/
begin
dbms_stats.set_table_stats('TESTER'
, 'TEST1'
, numrows=>10000
, numblks=>174
, avgrlen=>110);
end;
/
SELECT * FROM
(SELECT SUBSTR(SQL_TEXT,1,40) SQL,
DISK_READS, EXECUTIONS, DISK_READS/EXECUTIONS "READS/EXEC",
HASH_VALUE,ADDRESS
FROM V$SQLAREA
WHERE DISK_READS > 1000
ORDER BY DISK_READS DESC)
WHERE ROWNUM <= 10;
SELECT * FROM
(SELECT SUBSTR(SQL_TEXT,1,40) SQL,
EXECUTIONS, ROWS_PROCESSED, ROWS_PROCESSED/EXECUTIONS
"ROWS/EXEC",
HASH_VALUE,ADDRESS
FROM V$SQLAREA
WHERE EXECUTIONS > 100
ORDER BY EXECUTIONS DESC)
WHERE ROWNUM <= 10;
SELECT * FROM
(SELECT SUBSTR(SQL_TEXT,1,40) SQL,
PARSE_CALLS, EXECUTIONS, HASH_VALUE,ADDRESS
FROM V$SQLAREA
WHERE PARSE_CALLS > 1000
ORDER BY PARSE_CALLS DESC)
WHERE ROWNUM <= 10;
SELECT * FROM
(SELECT SUBSTR(SQL_TEXT,1,40) SQL,
SHARABLE_MEM, EXECUTIONS, HASH_VALUE,ADDRESS
FROM V$SQLAREA
WHERE SHARABLE_MEM > 1048576
ORDER BY SHARABLE_MEM DESC)
WHERE ROWNUM <= 10;
SELECT * FROM
(SELECT SUBSTR(SQL_TEXT,1,40) SQL,
VERSION_COUNT, EXECUTIONS, HASH_VALUE,ADDRESS
FROM V$SQLAREA
WHERE VERSION_COUNT > 20
ORDER BY VERSION_COUNT DESC)
WHERE ROWNUM <= 10;
http://orababy.blogspot.com/2013/08/active-session-history-queries.html
with AASSTAT as (
select
decode(n.wait_class,'User I/O','User I/O',
'Commit','Commit',
'Wait') CLASS,
sum(round(m.time_waited/m.INTSIZE_CSEC,3)) AAS
from v$waitclassmetric m,
v$system_wait_class n
where m.wait_class_id=n.wait_class_id
and n.wait_class != 'Idle'
SELECT group by decode(n.wait_class,'User I/O','User I/O', 'Commit','Commit',
sysmetric_history.sample_time,
'Wait')
cpu/60 AS cpu,
union
bcpu/60 AS bcpu,
DECLARE select 'CPU_ORA_CONSUMED'
DECODE(SIGN((cpu+bcpu)/60-cpu_ora_consumed), CLASS,
-1, 0, ((cpu+bcpu)/60-
l_sql_tune_task_id
cpu_ora_consumed)) VARCHAR2(100);
round(value/100,3)
AS cpu_ora_wait, AAS
BEGIN from v$sysmetric
scheduler/60 AS scheduler,
l_sql_tune_task_id
uio/60 AS where := DBMS_SQLTUNE.create_tuning_task
uio,metric_name='CPU Usage Per Sec' (
sio/60 AS and sql_id => '4pgqpkv31u4nn',
group_id=2
sio,
union
concurrency/60 scope => DBMS_SQLTUNE.scope_comprehensive,
AS concurrency,
application/60 time_limit
select 'CPU_OS'
AS => 2100,
application, CLASS ,
AS COMMIT, => '4pgqpkv31u4nn_tuning_task',
task_name
COMMIT/60round((prcnt.busy*parameter.cpu_count)/100,3) AAS
from
configuration/60 description => 'Tuning task for statement d4pgqpkv31u4nn.');
AS configuration,
DBMS_OUTPUT.put_line('l_sql_tune_task_id:
( select value
administrative/60 busy from v$sysmetric where
AS administrative, ' || l_sql_tune_task_id);
metric_name='Host CPU
END;
Utilization
network/60 (%)'ASand group_id=2 ) prcnt,
network,
/ queueing/60 ( selectASvalue cpu_count from v$parameter where name='cpu_count' )
queueing,
parameter
clust/60 AS clust,
EXEC DBMS_SQLTUNE.execute_tuning_task(task_name
union
other/60 AS other =>
'4pgqpkv31u4nn_tuning_task');
FROM select
(SELECT 'CPU_ORA_DEMAND' CLASS,
select task_name,
nvl(round(status
TRUNC(sample_time,'MI') fromAS dba_advisor_log
sample_time, where
sum(decode(session_state,'ON CPU',1,0))/60,2),0) AAS
task_name='4pgqpkv31u4nn_tuning_task';
from v$active_session_history ash
DECODE(session_state,'ON
where SAMPLE_TIME > sysdate - (60/(24*60*60)) CPU'), wait_class)
CPU',DECODE(session_type,'BACKGROUND','BCPU','ON
SETwait_class
)AS SERVEROUTPUT ON
SET
select
FROMLONG 100000;
v$active_session_history
setWHERE
longchunksize 1000;
( decode(sign(CPU_OS-CPU_ORA_CONSUMED),
sample_time>sysdate-INTERVAL '1' HOUR -1, 0, (CPU_OS -
SET PAGESIZE
CPU_ORA_CONSUMED 1000 )) +
AND sample_time<=TRUNC(SYSDATE,'MI')) ash
SET LINESIZE
CPU_ORA_CONSUMED
PIVOT (COUNT(*)200 FOR wait_class + IN ('ON CPU' AS cpu,'BCPU' AS
SELECT DBMS_SQLTUNE.report_tuning_task('4pgqpkv31u4nn_tuning_task')
decode(sign(CPU_ORA_DEMAND-CPU_ORA_CONSUMED),
bcpu,'Scheduler' AS scheduler,'User I/O' AS uio,'System I/O' AS sio,-1, 0,
AS'Concurrency'
recommendations
(CPU_ORA_DEMAND FROM dual;
- CPU_ORA_CONSUMED
AS concurrency,'Application' ))) CPU_TOTAL, AS
AS application,'Commit'
SET PAGESIZE 24
decode(sign(CPU_OS-CPU_ORA_CONSUMED),
COMMIT,'Configuration' AS configuration, -1, 0, (CPU_OS -
CPU_ORA_CONSUMED )) CPU_OS,
'Administrative' AS administrative,'Network' AS network,'Queueing' AS
CPU_ORA_CONSUMED
queueing,'Cluster' AS clust,'Other'CPU_ORA,
AS other)) ash,
decode(sign(CPU_ORA_DEMAND-CPU_ORA_CONSUMED), -1, 0,
(SELECT
(CPU_ORA_DEMAND
TRUNC(begin_time,'MI') - CPU_ORA_CONSUMED
AS sample_time, )) CPU_ORA_WAIT,
COMMIT, AS cpu_ora_consumed
VALUE/100
READIO,
FROM v$sysmetric_history
WAIT GROUP_ID=2
WHERE
fromAND( metric_name='CPU Usage Per Sec') sysmetric_history
select
WHERE ash.sample_time (+)=sysmetric_history.sample_time
ORDER sum(decode(CLASS,'CPU_ORA_CONSUMED',AAS,0))
BY sample_time;
CPU_ORA_CONSUMED,
sum(decode(CLASS,'CPU_ORA_DEMAND' ,AAS,0))
CPU_ORA_DEMAND,
sum(decode(CLASS,'CPU_OS' ,AAS,0)) CPU_OS,
sum(decode(CLASS,'Commit' ,AAS,0)) COMMIT,
sum(decode(CLASS,'User I/O' ,AAS,0)) READIO,
sum(decode(CLASS,'Wait' ,AAS,0)) WAIT
from AASSTAT)
/
select ksppinm name,
ksppstvl value
from sys.x$ksppi x,
sys.x$ksppcv y
where (x.indx = y.indx)
and ksppinm = '_optimizer_aggr_groupby_elim';
Optimizer Evolution
• Oracle 8i – histograms
• Oracle 9i – bind variable peeking
• Oracle 10g – Automatic Optimizer Statistics Collection,Dynamic Sampling
• Oracle 11gR1 – Adaptive Cursor Sharing, Extended statistics (correlated
columns)
• Oracle 11gR2 – Cardinality Feedback
• Oracle 12c – Adaptive Query Optimization
declare
v_sql_text CLOB;
BEGIN
select sql_text into v_sql_text from v$sql where sql_id = 'bu18sp8k0wcvv';
sys.dbms_sqldiag_internal.i_create_patch(
sql_text=>v_sql_text,
hint_text=>'full(@SEL$1 test_dba_tables)',
name=>'tst_patch');
END;
/
exec dbms_sqldiag.DROP_SQL_PATCH('tst_patch');
Advisor names
Enabled or not
Job History
Parameters
select
table_name,round((blocks*8),2) "size (kb)" ,
round((num_rows*avg_row_len/1024),2) "actual_data (kb)",
(round((blocks*8),2) - round((num_rows*avg_row_len/1024),2))
"wasted_space (kb)"
from
dba_tables
where owner='&OWNER' and table_name='&TABLE_NAME' and
(round((blocks*8),2) > round((num_rows*avg_row_len/1024),2))
order by 4 desc;
based on data from v$sql_plan_statistics already mentioned in your article. In my opinion, plan statistics have
races. The biggest obstacle to a wide adoption is the horrible slowness caused by high CPU overhead in
even in production system. So, the execution of the query is staged in a separate session where we can set
d recreate run environment. Here is the full sequence of actions:
sed that does all that things. The point is, once I was free from all that routine, I was able to troubleshoot not
nsive queries with a lot of gets/execution. I should add that it makes sense to use this technique in really
n, problems are simple and a quick look at the execution plan is enough to spot the cause.
OS occupies memory of
-----------------------
http://www.oracle.com/technetwork/articles/schumacher-analysis-099313.html
Instead of creating new table u can try
In a test environment, you can measure shareable memory by selecting the number of open
cursors for a test user. You multiply the resulting value by the total number of users:
Ideally, your application should have a library cache as large as the sum of the numbers
above, plus a small allowance for dynamic SQL.
Note: The V$SYSSTAT view displays another statistic, Redo Log Space Requests:
Note: The last two columns contain 0 unless the TIMED_STATISTICS parameter is set to
TRUE.
Use the following query to monitor these values:
Avoiding Sorts
--------------------
Avoid sort operations whenever possible:
• Use NOSORT to create indexes.
• Use UNION ALL instead of UNION.
• Use index access for table joins.
• Create indexes on columns referenced in the
ORDER BY clause.
• Select the columns for analysis.
• Use ESTIMATE rather than COMPUTE for large
objects.
Create indexes on columns that are frequently referenced with ORDER BY statements.
• The number of waits for any class should be less than 1% of the total number of requests.
• If not, create more rollback segments.
You can use the following query to set the UNDO_RETENTION parameter and size the undo
tablespace:
You can increase the overall number of locks available for an instance by increasing the
values of the DML_LOCKS and ENQUEUE_RESOURCES parameters. This may be necessary
in a parallel server configuration.
V$LOCK
V$LOCKED_OBJECT
DBA_WAITERS
DBA_BLOCKERS
To find the table name that corresponds to a particular resource ID 1 of the V$LOCK view:
Query the V$DISPATCHER view to determine the usage for selected dispatcher processes.
You identify contention for dispatchers by checking:
A query to report the dispatcher, session, and process mapping using shared servers:
Maintenance Considerations
--------------------------
In a data warehousing environment, data is usually maintained by way of bulk inserts and
updates. Index maintenance is deferred until the end of each DML operation. For example, if
you insert 1,000 rows, then the inserted rows are placed into a sort buffer, and then the
updates of all 1,000 index entries are batched. (This is why SORT_AREA_SIZE must be set
properly for good performance with inserts and updates on bitmap indexes.) Thus, each
bitmap segment is updated only once per DML operation, even if more than one row in that
segment changes.
n_wait, sql_id FROM v$session WHERE state = 'WAITING' AND wait_class!= 'Idle' ;
x-although.html
NER' , tabname => '&TABLE_NAME',cascade => true, estimate_percent => dbms_stats.auto_sample_size,method_opt=>'FOR ALL COLU
name => '&INDEX_NAME',estimate_percent => dbms_stats.auto_sample_size, degree => 8);
WNER' , estimate_percent => dbms_stats.auto_sample_size ,method_opt=>'FOR ALL COLUMNS SIZE AUTO', degree => 8);
ERCENT => DBMS_STATS.AUTO_SAMPLE_SIZE, METHOD_OPT => 'FOR ALL COLUMNS SIZE AUTO', DEGREE => 8, CASCADE =>
select blocks allocated_blks,
count( distinct substr(t.rowid,1,8)
||substr(t.rowid,15,4)) used
from user_segments e,
&tab_name t
where e.segment_name=upper ('&tab_name')
and e.segment_type='TABLE'
group by e.blocks;
SELECT *
FROM
TABLE(DBMS_XPLAN.display_sql_plan_baseline(plan_name=>'SYS_SQLPROF_015fdc7edac
e0003'));
http://rohitsinhago.blogspot.com/2009/05/tracing-other-sessions.html
SELECT sql_id,child_number,sql_text, elapsed_time
FROM (SELECT sql_id, child_number, sql_text, elapsed_time, cpu_time,
disk_reads,
RANK () OVER (ORDER BY elapsed_time DESC) AS elapsed_rank
FROM gv$sql)
WHERE elapsed_rank <= 10;
exec
dbms_sqltune.alter_sql_profile('SYS_SQLPROF_0236d8f37a490001','STATUS','DISABLED');
exec dbms_sqltune.alter_sql_profile('SQL_PROF_FOR_DELETE','STATUS','ENABLED');
EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE('SYS_SQLPROF_02384d2b5e320000');
https://blog.yannickjaquier.com/oracle/visualizing-active-session-history-ash-to-produce-grid-control-charts.html
https://blogs.oracle.com/optimizer/setting-a-session-parameter-overrides-ofe
https://prasanthkothuri.files.wordpress.com/2015/06/who-changed-my-plan.pdf
https://prasanthkothuri.wordpress.com/2015/06/08/sql-patch-fast-way-to-add-a-hint-without-changing-the-code/
SELECT execution_name,task_id,task_name,TO_CHAR(execution_start,'dd-mon-yyyy
hh24:mi:ss') AS execution_start,TO_CHAR(execution_end,'dd-mon-yyyy hh24:mi:ss') AS
execution_end,
status,error_message FROM DBA_ADVISOR_EXECUTIONS
WHERE task_name='SYS_AUTO_SQL_TUNING_TASK'
ORDER BY execution_id DESC;
ithout-changing-the-code/
SET LINESIZE 80 PAGESIZE 1000 LONG 100000
SELECT
DBMS_SQLTUNE.REPORT_TUNING_TASK('SYS_AUTO_S
QL_TUNING_TASK') FROM DUAL;
Database
Database Size
Table
Table size in MB
Schema size in GB
Tablespace Free
Db block size
What is the minimum size we can reduce for a datafile
select a.data_size+b.temp_size+c.redo_size+d.controlfile_size
"total_size in MB" from ( select sum(bytes)/1024/1024 data_size
from dba_data_files) a,( select nvl(sum(bytes),0)/1024/1024
temp_size from dba_temp_files ) b,( select sum(bytes)/1024/1024
redo_size from sys.v_$log ) c,
( select sum(BLOCK_SIZE*FILE_SIZE_BLKS)/1024/1024
controlfile_size from v$controlfile) d;
select
segment_name table_name,
select segment_name,sum(bytes)/(1024*1024)
sum(bytes)/(1024*1024) table_size_meg "TABLE_SIZE(MB)"
from
from dba_extents where segment_type='TABLE' and
owner=upper('&OWNER')
dba_extents and segment_name
=upper(
where '&SEGMENT_NAME') group by segment_name;
segment_type='TABLE'
and
setowner='GLOGOWNER'
lines 750 pages 9999 group by segment_name order by 2 desc;
SELECT ts.tablespace_name, "File Count",
TRUNC("SIZE(MB)", 2) "Size(MB)",
TRUNC(fr."FREE(MB)", 2) "Free(MB)",
SELECT owner,tablespace_name,Sum(bytes)/1024/1024/1024 AS
TRUNC("SIZE(MB)"
total_size_gb - "FREE(MB)", 2) "Used(MB)",
df."MAX_EXT"
FROM dba_segments "Max Ext(MB)",
(fr."FREE(MB)" / df."SIZE(MB)")
WHERE owner =upper('&1') * 100
group by "% Free"
owner,tablespace_name;
FROM (SELECT tablespace_name,
select owner,sum(bytes/1024/1024) ||'M' from dba_segments group
SUM (bytes) / (1024 * 1024) "FREE(MB)"
by owner order by sum(bytes/1024/1024) desc;
FROM dba_free_space
GROUP BY tablespace_name) fr,
(SELECT tablespace_name, SUM(bytes) / (1024 * 1024) "SIZE(MB)",
COUNT(*)
"File Count", SUM(maxbytes) / (1024 * 1024) "MAX_EXT"
FROM dba_data_files
GROUP BY tablespace_name) df,
(SELECT tablespace_name
FROM dba_tablespaces) ts
SELECT A.tablespace_name
WHERE fr.tablespace_name = tablespace, D.mb_total,
df.tablespace_name (+)
SUM (A.used_blocks * D.block_size)
AND fr.tablespace_name = ts.tablespace_name / 1024(+)
/ 1024 mb_used,
ORDER D.mb_total - SUM (A.used_blocks * D.block_size) / 1024 / 1024
BY ts.tablespace_name;
mb_free
col file_name for a60
FROM
select gv$sort_segment A,
(
TABLESPACE_NAME,FILE_ID,FILE_NAME,BYTES/1024/1024 "size
in SELECT B.name, C.block_size, SUM (C.bytes) / 1024 / 1024
mb_total
MB",AUTOEXTENSIBLE,MAXBYTES/1024/1024,ONLINE_STATUS
FROM v$tablespace
from dba_data_files where B, v$tempfile C
WHERE B.ts#= C.ts#
TABLESPACE_NAME='&TABLESPACE_NAME';
GROUP BY B.name, C.block_size
)D
WHERE A.tablespace_name = D.name
GROUP by A.tablespace_name, D.mb_total;
http://oracletechdba.blogspot.com/2014/08/oracle-to-find-over-sizedfragmented.html
http://stelliosdba.blogspot.com/2012/03/ora-03297-file-contains-used-data.html http://blog.dbi-services.com/resiz
http://blog.dbi-services.com/resize-your-oracle-datafiles-down-to-the-minimum-without-ora-03297/
find services belongs to pdb
Relocate services
COLUMN name FORMAT A30
SELECT name, pdb FROM v$services ORDER BY name;
export CHANGE_ME=abcd_srv
crsctl status resource -t|grep -iw $CHANGE_ME |grep ora.*.svc|cut -f2 -d. |
while read line ; do
echo -e "\033[0;31mDatabase Name: \033[0;0m"$line
echo -e "\033[0;31mNodes: \033[0;0m"`crsctl stat res ora.$line.db -p | grep
"GEN_USR_ORA_INST_NAME@SERVERNAME" | cut -f 2 -d'@'`;
ORACLE_HOME=`crsctl stat res ora.$line.db -p | grep -iw ORACLE_HOME | cut -d'=' -f2` ; export
ORACLE_HOME
echo -e "\033[0;31mPDB: \033[0;0m"`$ORACLE_HOME/bin/srvctl config service -d $line -s
$CHANGE_ME | grep -i "Pluggable database name" | cut -f2 -d:`;
done ; unset CHANGE_ME
collabn1:/home/oracle[RAC1]$ srvctl add service -d RAC -pdb PDB -s svctest -r RAC1 -a RAC2 -P
BASIC
collabn1:/home/oracle[RAC1]$ srvctl start service -d RAC -s svctest
srvctl status service -d <db_name> -s <service>
srvctl relocate service -d RAC12C -s <service> -oldinst <INST1> -newinst <INST2>
export CHANGE_ME=servicenamepls
crsctl status resource -t|grep -i $CHANGE_ME |grep ora.*.svc|cut -f2 -d. |
while read line ; do
echo -e "\033[0;31mDatabase Name: \033[0;0m"$line
echo -e "\033[0;31mNodes: \033[0;0m"`srvctl config database -d $line | grep
"Configured nodes" | cut -f2 -d:`;
echo -e "\033[0;31mPDB: \033[0;0m"`srvctl config service -d $line -s
$CHANGE_ME | grep -i "Pluggable database name" | cut -f2 -d:`;
done ; unset CHANGE_ME
srvctl add service -db RAC12C -service TAFSRV -preferred RAC12C1 -available
RAC12C2 \
-tafpolicy BASIC -policy AUTOMATIC -failovertype SELECT -failovermethod BASIC \
-failoverretry 5 -pdb DEMOPDB -verbose
srvctl start service -d RAC12C -s TAFSRV
<---- input the service name
Rman Tuning
Clone Progress
% completed - Good query
Block Recovery
Oldest backup Available in rman catalog ( this gives result of all datafile
oldest backup)
restore/duplicate throughput
Backup not deleting the archivelog
ORA-19625: error identifying file
ORA-17503: ksfdopn:2 Failed to open file
ORA-15012: ASM file '+BKUP/thread_1_seq_49222.1018.892640727'
does not exist
%FRA Used
Tracing RMAN
https://web.stanford.edu/dept/itss/docs/oracle/10gR2/backup.102/b14191/rcmdupdb006.htm
SELECT INPUT_TYPE,
STATUS,
TO_CHAR(START_TIME,'mm/dd/yy hh24:mi') start_time,
TO_CHAR(END_TIME,'mm/dd/yy hh24:mi') end_time,
INPUT_BYTES_DISPLAY in_size,
round(ELAPSED_SECONDS/3600,3) HRS
FROM V$RMAN_BACKUP_JOB_DETAILS
where sysdate - start_time <= 7;
left outer join
SELECT (select
where s.input_file_scan_only = 'NO'
d.session_recid,
bs.recid group by d.session_recid, d.session_stamp,
bs_key d.session_stamp) x
on sum(case
x.session_recid
, bp.tag = when d.controlfile_included
j.session_recid = 'YES' then
and x.session_stamp d.piecestag
else 0 end)
= j.session_stamp
CF,
,left outer join (select o.session_recid, o.session_stamp, min(inst_id) inst_id
DECODE(backup_type
sum(case
from
, 'L', 'Archived when
GV$RMAN_OUTPUT
Redo d.controlfile_included
Logs' o = 'NO'
, 'D', 'Datafile and
group byFull d.backup_type||d.incremental_level
o.session_recid,
Backup' o.session_stamp) = 'D' then d.pieces else 0
end) DF,
ro on, 'I',
ro.session_recid = j.session_recid
'Incremental Backup' ) and ro.session_stamp = j.session_stamp
backup_type
where sum(case
j.start_time
, bs.incremental_level when d.backup_type||d.incremental_level = 'D0' then d.pieces
> trunc(next_day(sysdate-6,'SUNDAY'))
else
order0by end) I0,
j.start_time
incremental_level
/ , DECODE( sum(case bp.statuswhen d.backup_type||d.incremental_level = 'I1' then d.pieces
else 0 end) I1,
, 'A', 'Available'
sum(case when d.backup_type = 'L' then d.pieces else 0 end) L
, 'D', 'Deleted'
from
, 'X', 'Expired' ) status
V$BACKUP_SET_DETAILS
, DECODE(bs.controlfile_included, 'NO',d '-', bs.controlfile_included)
controlfile_included join V$BACKUP_SET s on s.set_stamp = d.set_stamp and s.set_count =
d.set_count
, NVL(sp.spfile_included, '-') spfile_included
, bs.pieceswhere s.input_file_scan_only = 'NO' pieces
group by d.session_recid,
, TO_CHAR(bs.start_time, 'mm/dd/yyyy d.session_stamp)
HH24:MI:SS') x start_time
on x.session_recid = j.session_recid
, TO_CHAR(bs.completion_time, and x.session_stamp
'mm/dd/yyyy HH24:MI:SS')= j.session_stamp
completion_time
left outer join
, bs.elapsed_seconds (select o.session_recid, o.session_stamp, min(inst_id) inst_id
elapsed_seconds from GV$RMAN_OUTPUT o
, bs.block_size group by o.session_recid, o.session_stamp) block_size
ro on
, bs.keep ro.session_recid = j.session_recid and keep ro.session_stamp = j.session_stamp
order by j.start_time desc;
, NVL(TO_CHAR(bs.keep_until, 'mm/dd/yyyy HH24:MI:SS'),'') keep_until
, bs.keep_options keep_options
, device_type device_type
FROM
select output
v$backup_set bs
from GV$RMAN_OUTPUT
, (select distinct
whereset_stamp
session_recid = &SESSION_RECID
and, session_stamp
set_count = &SESSION_STAMP
order, tagby recid;
, device_type
, status
from v$backup_piece
where status in ('A','D', 'X')) bp
, (select distinct set_stamp, set_count, 'YES' spfile_included
from v$backup_spfile) sp
select output
WHERE
frombs.set_stamp
v$rman_output = bp.set_stamp
where session_recid==bp.set_count
AND bs.set_count (select max(session_recid) from v$rman_status)
order
ANDby recid ;
bs.set_stamp = sp.set_stamp (+)
AND bs.set_count = sp.set_count (+)
ORDER BY
bs.start_time desc;
BEGIN
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
SCHEMA_NAME => 'SCOTT',
OBJECT_NAME => 'DEPT',
OBJECT_TYPE => dbms_repair.table_object,
FLAGS => dbms_repair.skip_flag);
END;
/
SQL> exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS( 'MANA', 'TAXINQUIRY_LOG' );
PL/SQL procedure successfully completed.
Querying scott's tables using the DBA_TABLES view shows that SKIP_CORRUPT is enabled
SQL> insert into MANA.TAXINQUIRY_LOG_REPAIR ( select * from
for table scott.dept.
MANA.TAXINQUIRY_LOG );
68 rows created.
SELECT OWNER, TABLE_NAME, SKIP_CORRUPT FROM DBA_TABLES
SQL> commit;
WHERE OWNER = 'SCOTT';
Commit complete.
SQL> drop table MANA.TAXINQUIRY_LOG;
Table dropped.
SQL> alter table TAXINQUIRY_LOG_REPAIR rename to TAXINQUIRY_LOG;
Table altered.
SQL> alter system flush shared_pool;
System altered.
Note: if any error while creating table (SCRIPT to skip ORA-8103 ORA-1410 ORA-1578 ORA-
600 [kdsgrp1] when reading a TABLE (Doc ID 1527738.1)) this metalink note will help
https://docs.oracle.com/cd/B10501_01/server.920/a96521/repair.htm
RUN
{
SET DBID 3668200963;
UNREGISTER DATABASE DB_NAME NOPROMPT;
}
select 'SET NEWNAME FOR DATAFILE ' || FILE# || ' TO ''' || '/u03/oradata/&1/' ||
substr(name,instr(name,'/',-
1)+1) || ''';' from v$datafile;
SELECT 'SQL "ALTER DATABASE RENAME FILE '''''|| MEMBER ||'''''' ||chr(10)||'to ''''' ||
member || '''''" ;' FROM
V$LOGFILE;
from v105.rc_database a,v105.bs b
where a.db_key=b.db_key
and b.bck_type is not null having max(start_time) < sysdate - 7
group by a.name,dbid,b.bck_type
) group by db,dbid
union
select 'V112 - ' ||DB NAME,dbid,min(backuptype_db) DBBKP,min(backuptype_arch)
ARCBKP
from (
select a.name DB,dbid,
decode(b.bck_type,'D',max(b.completion_time),'I',
max(b.completion_time)) BACKUPTYPE_db,
decode(b.bck_type,'L',
max(b.completion_time)) BACKUPTYPE_arch
from v112.rc_database a,v112.bs b
where a.db_key=b.db_key
and b.bck_type is not null having max(start_time) < sysdate - 7
group by a.name,dbid,b.bck_type
) group by db,dbid
union
select 'isp102 - ' ||DB NAME,dbid,min(backuptype_db) DBBKP,min(backuptype_arch)
ARCBKP
from (
select a.name DB,dbid,
decode(b.bck_type,'D',max(b.completion_time),'I',
max(b.completion_time)) BACKUPTYPE_db,
decode(b.bck_type,'L',
max(b.completion_time)) BACKUPTYPE_arch
from isp102.rc_database a,isp102.bs b
where a.db_key=b.db_key and a.name not in
('RTL0892','RTL0890','RTL0888','RTL0007','RTL0881')
and b.bck_type is not null having max(start_time) < sysdate - 7
group by a.name,dbid,b.bck_type
) group by db,dbid
;
end if;
b0 := b0+c0;
b1 := b1+c1;
b2 := b2+c2;
b3 := b3+c3;
b4 := b4+c4;
b5 := b5+c5;
b6 := b6+c6;
rows := rows+1;
end loop;
end;
/
set feedback on
set verify on
SELECT
'DUPLICATE/RESTORE THROUGHPUT',
round(SUM(v.value/1024/1024),1) mbytes_sofar,
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) mbytes_per_sec,
n.name
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 'DUPLICATE/RESTORE THROUGHPUT',n.name;
SQL> SELECT MEMBER FROM V$LOG G, V$LOGFILE F WHERE G.GROUP# =
F.GROUP#
2 AND G.STATUS = 'CURRENT';
MEMBER
--------------------------------------------------------------------------------
/OraRedo/RedoLogFiles/siamst_log01.dbf
run { a backup control file, start the cancel based recovery. The system may suggest a
Using
allocate channel
non-existing c1 type
archive log --'SBT'
ignore it and specify the log file name {with full path} that you
parms'ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt)';
got in the above step
allocate channel c2DATABASE
SQL> RECOVER type 'SBT' USING BACKUP CONTROLFILE UNTIL CANCEL
parms'ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt)';
ORA-00279: change 21375038 generated at 09/21/2007 20:12:47 needed for thread 1
backup archivelog
ORA-00289: all skip: /export/pspp/oracle/dbs/arch1_4_633901491.dbf
suggestion inaccessible delete input;
release channel
ORA-00280: c1; 21375038 for thread 1 is in sequence #4
change
release channel c2;
}Specify log: {=suggested | filename | AUTO | CANCEL}
/OraRedo/RedoLogFiles/siamst_log01.dbf
Log applied.
Media recovery complete.
Finally open the database in RESETLOGS mode. It is recommended to reset the online
logs after incomplete recovery or recovery with a backup control file
SQL> ALTER DATABASE OPEN RESETLOGS;
Database altered.
SELECT
ROUND((A.SPACE_LIMIT / 1024 / 1024 / 1024), 2) AS FLASH_IN_GB,
ROUND((A.SPACE_USED / 1024 / 1024 / 1024), 2) AS FLASH_USED_IN_GB,
ROUND((A.SPACE_RECLAIMABLE / 1024 / 1024 / 1024), 2) AS
FLASH_RECLAIMABLE_GB,
SUM(B.PERCENT_SPACE_USED) AS PERCENT_OF_SPACE_USED
FROM
V$RECOVERY_FILE_DEST A,
V$FLASH_RECOVERY_AREA_USAGE B
GROUP BY
SPACE_LIMIT,
SPACE_USED ,
SPACE_RECLAIMABLE ;
run
{
set archivelog destination to '/ora_backup/rman/arch/';
restore archivelog from logseq=8619 until logseq=8632 thread=2;
}
run{
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
crosscheck archivelog all;
crosscheck backup;
delete noprompt expired backup;
delete noprompt expired archivelog all;
delete noprompt obsolete;
delete noprompt archivelog all completed before 'sysdate - 1/24';
}
mdupdb006.htm
select sl.sid, sl.opname,
to_char(100*(sofar/totalwork), '990.9')||'%'
pct_done,
sysdate+(TIME_REMAINING/60/60/24)
done_by
from v$session_longops sl, v$session s
where sl.sid = s.sid
and sl.serial# = s.serial#
and sl.sid in (select sid from v$session where
module like 'backup%' or module like 'restore%' or
module like 'rman%')
setand sofar
lines 750!=pages
totalwork
9999
and totalwork heading
col start_time >0 'Started' format a30
/ end_time
col heading 'End' format a30
col time_taken_display heading 'Elapsed|Time'
format a10
http://www.pythian.com/blog/oracle-free-block-corruption-test-case/
https://gruffdba.wordpress.com/2012/11/28/oracle-database-corruption-identify-and-correct/
https://alexzeng.wordpress.com/2008/09/17/how-to-recover-or-delete-corrupted-blocks/
http://www.adp-gmbh.ch/ora/admin/scripts/rman_backup_history.html Just test once before running
SELECT DISTINCT dbi.db_name,
v104.ts,
FROM bp.tag
v112.dbinc dbi,
bdf.completion_time,
v104.df,
FROM v92.dbinc
v112.bdf, dbi,
df.file#,
v104.bp,
v92.bdf
v112.ts, bdf,
fname,
SELECT DISTINCT
v104.node, dbi.db_name,
v92.dfatt
v112.df, df,
bp.tag
bdf.completion_time,
v104.site_dfatt
v92.bp
v112.bp,
FROM bp
v102.dbinc dbi, = ts.dbinc_key
WHERE df.file#,
dbi.dbinc_key
WHERE dbi.dbinc_key
v112.node,
v102.bdf bdf, = df.dbinc_key
AND fname,
ts.dbinc_key = =df.dbinc_key
AND bdf.dbinc_key
v112.site_dfatt
v102.dfatt df.dbinc_key
AND tag df,
AND ts.ts#
WHERE
v102.bp
= df.ts#
bdf.file#
bp = dbi,
df.file#= ts.dbinc_key
dbi.dbinc_key
FROM
AND v121.dbinc
ts.create_scn
AND
WHERE (bdf.incr_level
ts.dbinc_key
dbi.dbinc_key
v121.bdf, ===df.dbinc_key
df.ts_create_scn
0= OR bdf.incr_level IS
df.dbinc_key
NULL)AND
AND dbi.dbinc_key
ts.ts# = df.ts#
bdf.dbinc_key
= df.dbinc_key
= df.dbinc_key
v121.ts,
AND bdf.dbinc_key
AND bdf.bs_key
ts.create_scn
bdf.file#
v121.df, == df.ts_create_scn
= df.file#
df.dbinc_key
= bp.bs_key;
AND
AND node.db_key = dbi.db_key
dbi.dbinc_key = df.dbinc_key
AND (bdf.incr_level
v121.bp,
bdf.file# = df.file# 0 OR bdf.incr_level IS
NULL)AND bdf.dbinc_key
v121.node,
AND (bdf.incr_level
= df.dbinc_key
AND node.db_key ==dbi.db_key
0 OR bdf.incr_level IS
NULL)AND
AND
bdf.bs_key
v121.site_dfatt
bdf.file# =
= bp.bs_key;
df.file#
WHERE
AND dbi.dbinc_key
node.site_key = ts.dbinc_key
= site_dfatt.site_key
AND
AND (bdf.incr_level
ts.dbinc_key = =df.dbinc_key
0 OR bdf.incr_level IS
df.df_key =
NULL)AND ts.ts# = df.ts# site_dfatt.df_key
AND bdf.bs_key = bp.bs_key;
AND node.site_key
ts.create_scn == df.ts_create_scn
site_dfatt.site_key
AND df.df_key = site_dfatt.df_key
AND dbi.dbinc_key = df.dbinc_key
AND
AND bdf.bs_key
bdf.dbinc_key = bp.bs_key;
= df.dbinc_key
AND node.db_key = dbi.db_key
AND bdf.file# = df.file#
AND (bdf.incr_level = 0 OR bdf.incr_level IS
NULL)
AND node.site_key = site_dfatt.site_key
AND df.df_key = site_dfatt.df_key
AND bdf.bs_key = bp.bs_key;
http://technopark02.blogspot.com/2007/09/oracle-fixing-ora-01113-file-x-needs.html
ce_file_name
col compression for 990.00 justify right head "COMPRESS|% ORIG"
col est_complete for a20 head "ESTIMATED COMPLETION"
col recid for 9999999 head "ID"
select recid
, output_device_type
, dbsize_mbytes
, input_bytes/1024/1024 input_mbytes
, output_bytes/1024/1024 output_mbytes
, (output_bytes/input_bytes*100) compression
, (mbytes_processed/dbsize_mbytes*100) complete
, to_char(start_time + (sysdate-start_time)/(mbytes_processed/dbsize_mbytes),'DD-MON-YYYY HH24:MI:SS')
est_complete
from v$rman_status rs
, (select sum(bytes)/1024/1024 dbsize_mbytes from v$datafile)
where status='RUNNING'
and output_device_type is not null
/
CF: Number of controlfile backups included in the backup setDF: Number of datafile full backups included in the backup setI0:
-block-corruption-test-case/
/28/oracle-database-corruption-identify-and-correct/
9/17/how-to-recover-or-delete-corrupted-blocks/
AND bdf.bs_key = bp.bs_key
AND df.create_scn IN
(SELECT MAX (create_scn)
FROM v92.dfatt
WHERE df.file# = file# AND DF.DBINC_KEY = dbinc_key)
AND bdf.create_scn IN
(SELECT MAX (create_scn)
FROM v92.bdf bdf2
WHERE bdf.file# = file# AND bDF.DBINC_KEY = dbinc_key);
we have to do a full backup, Any backup prior to missing archives is no longer valid.... 1:51 PM
before that we have to .... 1:51 PM
backup archivelog all skip inaccessible delete input; 1:52 PM
and 1:52 PM
change archivelog all validate.... 1:52 PM
the first will allow the backup of all the archives and skip the missing 1:52 PM
the second will allow the backups to continue normally going forward by marking the archive backups as validated even
though the are missing. 1:53 PM
The fact that we had hard errors on the disk that were not correctable is odd.
09/oracle-fixing-ora-01113-file-x-needs.html
output_size
,
r.output_bytes_per_sec_dis
play output_rate_per_sec
FROM
(select
command_id
, start_time
, end_time
, time_taken_display
, status
, input_type
, output_device_type
, input_bytes_display
, output_bytes_display
,
output_bytes_per_sec_displ
ay
from
v$rman_backup_job_details
order by start_time
DESC
)r
;
restore point check
drop restorepoint
flashback on /off
FRA Usage
FRA size
select
table_name,row_movement from dba_tables
where
owner='ODB'
and
table_name = 'AC_ACTUAL_FLIGHTS';
Export the table from previous time exp system/***** tables=schema.table_name file=exp_ix_str_store.dmp log=exp_
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
/
userid='/
expdp as sysdba'
dumpfile=WRNAME_exp_dbname_SCOT
T.dmp
nohup expdp parfile=/dbexports/EXP/dbname/schemaexpdp.par &
logfile=WRNAME_exp_w665pr_SCOTT.lo
g
schemas=SCOTT
compression=all
schema backup directory=DATA_PUMP_DIR
col username for a20
col opname for a50
col message for a100
set lines 750 pages 9999
select username,opname,target_desc,sofar,totalwork,message from
V$SESSION_LONGOPS where message not like '%RMAN%' and
username='SYS';
alter system set event='10298 trace name context forever, level 32' scope=spfile;
s/EXP/dbname/schemaexpdp.par &
SYS_EX
PORT_S
CHEMA_
01 will
show the
actual
SELECT b.username, a.sid, b.opname, time
b.target, required
Rowid
round(b.SOFAR*100/b.TOTALWORK,0) || Range
'%' as "%DONE", b.TIME_REMAINING, scan
shows
to_char(b.start_time,'YYYY/MM/DD the
HH24:MI:SS') start_time progress
FROM v$session_longops b, of
v$session a Currently
WHERE a.sid = b.sid ORDER BY running
6; table http://www.dbaref.com/home/oracle-11g-new-features/monitoringdatapu
scope=spfile;
DDL
package ddl
Sequence DDL
Tablespace DDL
Users DDL
Password DDL
Cannot reuse the password
Profile
Roles DDL
DDL of V$ Tables
Parallel DDL option
http://www.orafaq.com/node/807
http://amit7oracledba.blogspot.com/2013/02/dbmsmetadatagetddl-package-how-to-get.html
select
set longto_char(last_ddl_time,'DD-MON-YYYY
2000 HH24:MI:SS') from dba_objects where owner='&user' and
object_name='&table_name';
select (case
when ((select count(*)
SELECT DBMS_METADATA.GET_DDL('&OBJECT_TYPE','&OBJECT_NAME','&OWNER')
from dba_users AAA FROM DUAL;
where username = 'ODB') > 0)
SELECTthenDBMS_METADATA.GET_DDL('PACKAGE_SPEC','&OBJECT_NAME','&OWNER')
dbms_metadata.get_ddl ('USER', 'ODB') AAA FROM DUAL;
else to_clob (' -- Note: User not found!')
end ) Extracted_DDL from dual
set long 1000
UNION ALL
select dbms_metadata.get_ddl('TABLE','EMP','SCHEMA')||'/' from dual;
select (case
when ((select count(*)
from dba_ts_quotas
where username = 'ODB') > 0)
then dbms_metadata.get_granted_ddl( 'TABLESPACE_QUOTA', 'ODB')
selectelse to_clobSEQUENCE
'CREATE (' -- Note: No TS Quotas found!')
'||SEQUENCE_NAME||chr(10)||
SET LONG 1000
end
' INCREMENT) from dual
BY '||INCREMENT_BY||chr(10)||
SELECT DBMS_METADATA.GET_DDL('DB_LINK',db.db_link,db.owner) from dba_db_links db;
UNION
' STARTALL WITH '||LAST_NUMBER||chr(10)||
select (case '||MIN_VALUE||chr(10)||
' MINVALUE
when
' MAXVALUE ((select count(*)
'||MAX_VALUE||chr(10)||
from dba_role_privs
decode(CYCLE_FLAG,'N',' NOCYCLE','CICLE')||chr(10)||
where grantee = 'ODB')
decode(ORDER_FLAG,'N',' > 0)
NOORDER','ORDER')||chr(10)||
then dbms_metadata.get_granted_ddl
' CACHE '||CACHE_SIZE|| ';' ('ROLE_GRANT', 'ODB')
else to_clob (' -- Note: No granted Roles
from DBA_SEQUENCES where SEQUENCE_OWNER='&OWNER_NAME';found!')
end ) from dual
UNION ALL
select (case
selectwhen
'select dbms_metadata.get_ddl(''TABLESPACE'','''||
((select count(*) tablespace_name || ''') from dual;' from
dba_tablespaces;
from dba_sys_privs
where grantee = 'ODB') > 0)
then dbms_metadata.get_granted_ddl ('SYSTEM_GRANT', 'ODB')
selectelse
dbms_metadata.get_ddl('TABLESPACE','&TABLESPACE_NAME')
to_clob (' -- Note: No System Privileges found!') from dual;
end ) from dual
UNION ALL
select (case
when ((select count(*)
from dba_tab_privs
where grantee = 'ODB') > 0)
then dbms_metadata.get_granted_ddl ('OBJECT_GRANT', 'ODB')
else to_clob (' -- Note: No Object Privileges found!')
end ) from dual
/
spool off
set feedback on
WHERE PRIVILEGE = 'SELECT')
CONNECT BY PRIOR grantee = granted_role
UNION
SELECT grantee || ' Through role ' || granted_role ge, 'UPDATE' priv
FROM dba_role_privs
START WITH granted_role IN (SELECT grantee
FROM dba_tab_privs
WHERE PRIVILEGE = 'UPDATE')
DB link : devBY
CONNECT to PRIOR
prod grantee = granted_role
UNION
CREATE DATABASE
SELECT grantee || 'LINK "COMPARE"
Through CONNECTge,
role ' || granted_role TO'INSERT'
DBSNMPprivIDENTIFIED BY mypwd USING
'destonation-db-name';
FROM dba_role_privs
select *WITH
START from granted_role
DBA_TAB_PRIVS@compare
IN (SELECT grantee T1 where not exists (select 1 from dba_tab_privs T2 where
t1.TABLE_NAME=t2.TABLE_NAME
FROM dba_tab_privs and t1.PRIVILEGE=t2.PRIVILEGE and
t1.GRANTEE=t2.GRANTEE WHERE PRIVILEGE ) and t1.grantee='&ROLE_NAME';
= 'INSERT')
CONNECT BY PRIOR grantee = granted_role
UNION
SELECT grantee || ' Through role ' || granted_role ge, 'DELETE' priv
FROM dba_role_privs
START WITH granted_role IN (SELECT grantee
FROM dba_tab_privs
WHERE PRIVILEGE = 'DELETE')
select
CONNECT GRANTEE
BY PRIOR as users from=dba_role_privs
grantee granted_role where GRANTED_ROLE=UPPER('&GRANTED_ROLE');
UNION
SELECT grantee || ' Through role ' || granted_role ge, 'INDEX' priv
FROM dba_role_privs
START WITH granted_role IN (SELECT grantee
FROM dba_tab_privs
WHERE PRIVILEGE = 'INDEX')
CONNECT BY PRIOR grantee = granted_role
UNION
SELECT grantee || ' Through role ' || granted_role ge, 'ALTER' priv
FROM dba_role_privs
START WITH granted_role
select 'GRANT IN (SELECT
'||granted_role||' grantee
to '||grantee||
DECODE(ADMIN_OPTION,FROM dba_tab_privs 'Y', ' WITH ADMIN OPTION;', ';')
from dba_role_privs WHERE PRIVILEGE = 'ALTER')
CONNECT
where grantee BY PRIOR grantee = granted_role
like upper('%&&uname%')
UNION UNION
SELECT
select 'GRANT grantee || ' Through
'||privilege||' role ' || granted_role ge, 'REFERENCES' priv
to '||grantee||
FROM dba_role_privs
DECODE(ADMIN_OPTION, 'Y', ' WITH ADMIN OPTION;', ';')
START WITH granted_role IN (SELECT grantee
from dba_sys_privs
where grantee likeFROM dba_tab_privs
upper('%&&uname%')
UNION WHERE PRIVILEGE = 'REFERENCES')
CONNECT
select 'grantBY ' || PRIOR
PRIVILEGE grantee = granted_role
|| ' on ' || OWNER || '.' ||TABLE_NAME || ' to ' || GRANTEE || ';'
UNION
from dba_tab_privs
SELECT
where grantee grantee || ' Through role ' || granted_role ge, 'EXECUTE' priv
like upper('%&&uname%');
FROM dba_role_privs
START WITH granted_role IN (SELECT grantee
FROM dba_tab_privs
WHERE PRIVILEGE = 'EXECUTE')
CONNECT BY PRIOR grantee = granted_role
UNION
SELECT grantee || ' Direct' ge, PRIVILEGE priv
FROM SYS.dba_tab_privs
WHERE table_name = UPPER ('&TABLE_NAME')
ORDER BY 1, 2;
'$UNAUTHENTICATED',
'CTXSYS',
'DBSNMP',
'DMSYS',
select
'DSSYS',
lpad(' ', 2*level) || c "Privilege, Roles and Users"
'EXFSYS',
from
'MDSYS',
(
'ODM',
/* THE PRIVILEGES */
'ODM_MTR',
LISTING
select INFORMATION ABOUT PRIVILEGES
'OLAPSYS',
-------------------------------------------------------------------------------
null p,
'ORDPLUGINS',
name c
'ORDSYS',
To see which table privileges are granted by you to other users.
from
'OSE$HTTP$ADMIN',
SELECT * FROM USER_TAB_PRIVS_MADE
system_privilege_map
'OUTLN',
To
'PERFSTAT', table privileges are granted to you by other users
see
where which
SELECTname*like
'PUBLIC', FROM USER_TAB_PRIVS_RECD;
upper('%&enter_privliege%')
To/* see
THEwhich
'REPADMIN', ROLES column
TO ROLESlevel privileges
RELATIONS are granted
*/ by you to other users.
SELECT
union
'SYS', * FROM USER_COL_PRIVS_MADE
To see which column level privileges are granted to you by other users
select
'SYSMAN',
SELECT * FROM p,
granted_role
'SYSTEM', USER_COL_PRIVS_RECD;
To see which privileges
grantee
'TRACESVR', c are granted to roles
SELECT
from
'WKPROXY', * FROM USER_ROLE_PRIVS;
dba_role_privs
'WKSYS',
/* THE ROLES TO PRIVILEGE RELATIONS */
'WMSYS',
union
'XDB',
Granted
select Roles:
'APEX_PUBLIC_USER' ,
SELECT * FROM
privilege
'APEX_030200', p, DBA_ROLE_PRIVS
WHEREgrantee
'APPQOSSYS', GRANTEE c = 'USER';
Privileges
'BI'from
, Granted Directly To User:
SELECT *
dba_sys_privs
'DIP' ,
FROM
) DBA_TAB_PRIVS
'FLOWS_XXXXXX' ,
WHERE
start
'HR', with GRANTEE
p is null = 'USER';
Privileges
connect
'IX' , by p = prior c; Role Granted to User:
Granted to
SELECT
'LBACSYS' * ,
FROM
'MDDATA' , DBA_TAB_PRIVS
WHERE GRANTEE
'MGMT_VIEW' , IN (SELECT granted_role
'OE' , FROM DBA_ROLE_PRIVS
'ORACLE_OCM' WHERE , GRANTEE = 'USER');
Granted
'ORDDATA' , System Privileges:
SELECT
'PM' , *
FROM DBA_SYS_PRIVS
'SCOTT' ,
WHERE
'SH' , GRANTEE = 'USER';
'SI_INFORMTN_SCHEMA' ,
SELECT NAME, TO_CHAR (ptime, 'DD-MON-YYYY HH24:MI:SS') AS "LAST TIME CHANGED", ctime
'SPATIAL_CSW_ADMIN_USR' ,
"CREATION TIME", ltime "LOCKED"
'SPATIAL_WFS_ADMIN_USR',
FROM USER$
'MTSSYS',
WHERE ptime IS NOT NULL
'OASPUBLIC',
ORDER BY ptime DESC;
'OLAPSYS',
'OWBSYS',
'OWBSYS_AUDIT',
'WEBSYS',
'WK_PROXY',
'WK_TEST',
'AURORA$JIS$UTILITY$',
'SECURE',
'AURORA$ORB$UNAUTHENTICATED',
'XS$NULL',
'FLOWS_FILES');
select (case
when ((select count(*)
from dba_roles
where role = '&&role') > 0)
then dbms_metadata.get_ddl ('ROLE', '&&role')
else to_clob ('Role does not exist')
end ) Extracted_DDL from dual
UNION ALL
select (case
when ((select count(*)
from dba_role_privs
where grantee = '&&role') > 0)
then dbms_metadata.get_granted_ddl ('ROLE_GRANT', '&&role')
end ) from dual
UNION ALL
select (case
when ((select count(*)
from
selectdba_role_privs
'grant ' || GRANTED_ROLE || ' to ' || ROLE || ';' from
where grantee =where
role_role_privs '&&role') > 0)
role='&ROLE'
then
union dbms_metadata.get_granted_ddl ('DEFAULT_ROLE',
'&&role')
select 'grant ' || PRIVILEGE || ' to ' || ROLE || ';' from role_sys_privs
end
where) from dual
role='&&ROLE'
UNION
union ALL
select
select (case
'grant ' || PRIVILEGE || ' on ' || OWNER || '.' ||
when ((select count(*)
TABLE_NAME || ' to ' || GRANTEE || ';' from dba_tab_privs where
from dba_sys_privs ;
GRANTEE='&&ROLE'
where grantee = '&&role') > 0)
then dbms_metadata.get_granted_ddl ('SYSTEM_GRANT',
'&&role')
end ) from dual
UNION ALL
select (case
when ((select count(*)
from dba_tab_privs
where grantee = '&&role') > 0)
then dbms_metadata.get_granted_ddl ('OBJECT_GRANT',
'&&role')
end ) from dual;
select
select
case *when
from level
DBA_TAB_PRIVS
= 1 then own ||where grantee
'.' || obj || ' (' || like
typ || ')' else
upper('%&enter_username%');
lpad (' ', 2*(level-1)) || obj || nvl2 (typ, ' (' || typ || ')', null)
select
end * from DBA_ROLE_PRIVS where grantee like
upper('%&enter_username%');
from
select
( * from DBA_SYS_PRIVS where grantee like
upper('%&enter_username%');
/* THE OBJECTS */
select * from DBA_COL_PRIVS where grantee like
select
upper('%&enter_username%');
null p1,
null p2,
object_name obj,
owner own,
object_type typ
from
dba_objects
where
owner like upper('%&enter_username%')
/* THE OBJECT TO PRIVILEGE RELATIONS */
union
select
table_name p1,
owner p2,
grantee,
grantee,
privilege
from
dba_tab_privs
/* THE ROLES TO ROLES/USERS RELATIONS */
union
select
granted_role p1,
granted_role p2,
grantee,
grantee,
null
from
dba_role_privs
)
start with p1 is null and p2 is null
connect by p1 = prior obj and p2 = prior own;
granted role permissions
select * from ROLE_ROLE_PRIVS where ROLE IN (select
granted_role from USER_ROLE_PRIVS where USERNAME
USER);
select * from ROLE_TAB_PRIVS where ROLE IN (select
granted_role from USER_ROLE_PRIVS where
USERNAME=USER);
select * from ROLE_SYS_PRIVS where ROLE IN (select
granted_role from USER_ROLE_PRIVS where
USERNAME=USER);
select
select dbms_metadata.get_ddl('USER', u.username) AS ddl dbms_me
from dba_users u tadata.get
where u.username = :v_username _ddl('USE
union all R',
select dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA', 'KPHU00
tq.username) AS ddl 0') || '/'
from dba_ts_quotas tq usercreat
where tq.username = :v_username
1_QUESTION_ID:494205100346718343 e from
and rownum = 1 dual;
union all SELECT
select dbms_metadata.get_granted_ddl('ROLE_GRANT', DBMS_M
rp.grantee) AS ddl ETADAT
from dba_role_privs rp A.GET_G
where rp.grantee = :v_username RANTED
and rownum = 1 _DDL('R
union all OLE_GR
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT', ANT','KP
sp.grantee) AS ddl HU000') ||
from dba_sys_privs sp '/' FROM
where sp.grantee = :v_username DUAL;
and rownum = 1 SELECT
union all DBMS_M
select dbms_metadata.get_granted_ddl('OBJECT_GRANT', ETADAT
tp.grantee) AS ddl A.GET_G
from dba_tab_privs tp RANTED
where tp.grantee = :v_username _DDL('SY
and rownum = 1 STEM_G
union all RANT','K
select dbms_metadata.get_granted_ddl('DEFAULT_ROLE', PHU000')
rp.grantee) AS ddl || '/'
from dba_role_privs rp FROM
where rp.grantee = :v_username DUAL;
and rp.default_role = 'YES' SELECT
and rownum = 1 DBMS_M
union all ETADAT
select to_clob('/* Start profile creation script in case they are A.GET_G
missing') AS ddl RANTED
from dba_users u _DDL('O
where u.username = :v_username BJECT_
and u.profile <> 'DEFAULT' GRANT','
and rownum = 1 KPHU000
union all ') || '/'
select dbms_metadata.get_ddl('PROFILE', u.profile) AS ddl FROM
from dba_users u DUAL;
where u.username = :v_username select
and u.profile <> 'DEFAULT' DBMS_M
union all ETADAT
select to_clob('End profile creation script */') AS ddl A.GET_G
from dba_users u RANTED
where u.username = :v_username _DDL('TA
and u.profile <> 'DEFAULT' BLESPA
and rownum = 1 CE_QUO
/ TA',
'KPHU00
set linesize 80 pagesize 14 feedback on trimspool on verify on 0') '/' from
dual;
try this
Reference Object
To Find Lock & Session - Metalink
select owner, table_name, stattype_locked from dba_tab_statistics where stattype_locked is not null and owner not in ('SYS','S
who is querying via dblink?
Courtesy of Tom Kyte, via Mark Bobak
this script can be used at both ends of the database link
to match up which session on the remote database started
the local transaction
the GTXID will match for those sessions
just run the script on both databases
https://github.com/gwenshap/Oracle-DBA-Scripts/blob/master/locks.sqlhttp://www.oracle-ckpt.com/scripts-for-locks-and-blocki
Finding own sid & serial number
Trace a module:
DB HUNG - OS level
10046 Trace
Tracing RMAN
Oradebug utility
adrci
Diag collection
10132 Trace
Check this
SQL> exec
dbms_monitor.session_trace_enable(session_id=>3,serial_num=>5027,binds=>tr
ue,waits=>true);
PL/SQL procedure successfully completed.
SQL> exec
dbms_monitor.session_trace_disable(session_id=>3,serial_num=>5027);
PL/SQL procedure successfully completed.
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE(
service_name=>'vasont.world', module_name=>'VasontU.exe',
action_name=>DBMS_MONITOR.ALL_ACTIONS,waits=>TRUE,
binds=>TRUE,instance_name=>NULL);
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_DISABLE(
service_name=>'vasont.world',module_name=>'VasontU.exe');
alter system set events 'sql_trace[SQL:8kybysnu4nn34]
plan_stat=all_executions,wait=true,bind=true';
10 rows selected.
Now that we have found the Operating System PID and Oracle PID (values 864
and 13 in this case) of SCOTT's session we can use this to set trace with the
oradebug tool as follows:
So to purge all diagnostic information, including trace files, older than 2 days you
would issue the following.
adrci> purge -age 2880
Oracle
Root
For 11.2 and higher, issue "$GRID_HOME/bin/diagcollection.sh" as root on all
nodes.
For 10.2 and 11.1, issue "$CRS_HOME/bin/diagcollection.pl
-crshome=$CRS_HOME --collect" as root on all nodes.
alter session set events '10132 trace name context forever, level 12';
raw-trace-file-10046-profiler-based-on-external-tables-regexp/
You can also add an identifier to the trace file name for later identification:
ALTER SESSION SET sql_trace = true;
ALTER SESSION SET tracefile_identifier = mysqltrace;
http://www.orafaq.com/wiki/SQL_Trace
https://avdeo.com/tag/sql-tuning/
create or replace trigger trace_trigger_scott
AFTER LOGON ON DATABASE
WHEN (USER='SCOTT')
declare
stmt varchar2(100);
hname varchar2(20);
uname varchar2(20);
begin
select sys_context('USERENV','HOST'),
sys_context('USERENV','SESSION_USER')
into hname,uname from dual;
stmt := 'alter session set tracefile_identifier='||hname||'_'||uname;
EXECUTE IMMEDIATE stmt;
EXECUTE IMMEDIATE 'alter session set sql_trace=true';
end;
/
and disable tracing when the user disconnects:
------------------------------------------------
create or replace trigger trace_trigger_off
BEFORE LOGOFF ON DATABASE
when(user='SCOTT')
begin
execute immediate 'alter session set sql_trace=false';
end;
/
https://jonathanlewis.wordpress.com/2006/11/27/event-10132/
http://www.orafaq.com/wiki/TKProf
best
solaris
linux
connect / as sysdba
oradebug setospid 9834
oradebug unlimit
oradebug event 10046 trace name context forever,level 12
oradebug tracefile_name
--wait for 5 mins and then trace off
oradebug event 10046 trace name context off
ace trace_file_name
for linux
SQL> select spid from v$process p join v$session s on p.addr=s.paddr and
s.sid=sys_context('userenv','sid');
SPID
------------------------
10914
SQL> declare
p_file utl_file.file_type;
begin
p_file := utl_file.fopen ('MYDIR', 'myfile2.txt', 'w');
end;
/
2 3 4 5 6
declare
*
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 4
Systemstate
Recomplinig Invalid objects (nonpdb) --> for pdb refer next column
Compile errors
Dropping all objects under ur schema
How to recompile a pakage?
Disable Trigger
Disable constraint
Disable constraints
Dependency Objects
dependent objects
Dblinks
Rebuild / Fragmentation
Indexes requires rebuild
Rebuild Indexes
Unused indexes
re-organizing table
where status<>'VALID'
and object_type='TYPE BODY'
union
select 'alter materialized view '||owner||'.'||object_name||' compile;'
from dba_objects
where status<>'VALID'
and object_type='UNDEFINED'
select owner, object_type, substr(object_name,1,30) object_name, status
union
from dba_objects
select where
'alter java class status='INVALID' order by resolve;'
'||owner||'."'||object_name||'" object_type;
from dba_objects
where status<>'VALID'
set
andserveroutput on sizeCLASS'
object_type='JAVA 100000;
declare
union
sqlstring
select varchar2(2000);
'alter synonym '||owner||'.'||object_name||' compile;'
rec_count
from integer;
dba_objects
begin
where status<>'VALID'
dbms_utility.compile_schema('SCHEMA1');
and object_type='SYNONYM'
dbms_utility.compile_schema('SCHEMA2');
and owner<>'PUBLIC'
select count(1) into rec_count from sys.all_objects
union
where'alter
select owner in ('SCHEMA1','SCHEMA2')
public synonym '||object_name||' compile;'
and object_type
from dba_objectsin ('FUNCTION','VIEW','PROCEDURE','TRIGGER') and status = 'INVALID';
if (rec_count
where > 0) then
status<>'VALID'
andfor object_type='SYNONYM'
recs in (select owner, object_type, object_name from sys.dba_objects where owner in
('SCHEMA1','SCHEMA2')
and owner='PUBLIC'; and object_type in ('FUNCTION','VIEW','PROCEDURE','TRIGGER') and status
= 'INVALID')
loop
begin
sqlstring := 'ALTER ' || recs.object_type || ' ' || recs.owner || '.' || recs.object_name || ' COMPILE';
execute immediate (sqlstring);
exception
when others then
dbms_output.put_line(recs.object_type || ' ' || recs.owner || '.' || recs.object_name || ' failed to compile :
' || sqlerrm);
end;
end loop;
end if;
end;
/
DECLARE
BEGIN
FOR r1 IN ( SELECT 'DROP ' || object_type || ' ' || owner || '."'|| object_name || '"' || DECODE
( object_type, 'TABLE', ' CASCADE CONSTRAINTS PURGE' ) AS v_sql FROM dba_objects
WHERE owner in ('&SCHEMA') and object_type IN ( 'TABLE', 'VIEW', 'PACKAGE', 'TYPE',
'PROCEDURE', 'FUNCTION', 'TRIGGER', 'SEQUENCE', 'MATERIALIZED VIEW', 'JAVA CLASS' )
ORDER BY object_type,
object_name ) LOOP
EXECUTE IMMEDIATE r1.v_sql;
END LOOP;
END;
/
purge dba_recyclebin;
clear break
clear computes
select
table_name,
to_number(
extractvalue(
xmltype(dbms_xmlgen.getxml(‘select count(*) c from ‘||table_name))
,’/ROWSET/ROW/C’)
)
count
from user_tables order by table_name;
select 'ALTER TRIGGER '||OWNER||'.'||TRIGGER_NAME||' DISABLE '||';' from dba_triggers where table_name in ('&TABLE_
select 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' DISABLE CONSTRAINT '||CONSTRAINT_NAME ||';' from dba_constrai
SELECT TYPE
|| ' '
|| OWNER
|| '.'
set serveroutput on
|| NAME
SELECT
DECLARE
|| ' 'ALTER
references '
l_sql CLOBTABLE := '||OWNER||'.'||
|| REFERENCED_TYPE
TABLE_NAME||' '||var_action||' CONSTRAINT '||CONSTRAINT_NAME AS sql_string,
'CREATE PROCEDURE <OWNER>.drop_db_links_prc
|| ' CONSTRAINT_NAME
'
IS
||FROM
REFERENCED_OWNER
BEGIN
|| '.'ALL_CONSTRAINTS
FOR i IN (SELECT * FROM user_db_links)
||WHERE
REFERENCED_NAME AS DEPENDENCIES
LOOP
FROM dba_dependencies
CONSTRAINT_TYPE='R'
dbms_output.put_line(''toANDdrop OWNER=Target_Schema_Name;
''||i.db_link);
WHERE referenced_name = UPPER(LTRIM(RTRIM( '&ls_REF_name' )))
EXECUTE IMMEDIATE ''DROP DATABASE LINK ''||i.db_link;
OR name = UPPER(LTRIM(RTRIM( '&ls_REF_name' )))
END LOOP;
AND (REFERENCED_OWNER <> 'SYS'
END;';
select name, type, owner
AND REFERENCED_OWNER <> 'SYSTEM'
l_sql1 clob;
from all_dependencies
AND REFERENCED_OWNER <> 'PUBLIC')
BEGIN
where referenced_owner = 'USER_NAME'
AND (OWNER <> 'SYS'
FORand ireferenced_name
in (SELECT DISTINCT owner
= 'OBJECT_NAME';
AND OWNER <> 'SYSTEM'
FROM dba_objects
AND OWNER <> 'PUBLIC' )
WHERE owner IN ('TOMASZ')
ORDER BY 1 ;
AND object_type='DATABASE LINK')
LOOP
l_sql1 := REPLACE(l_sql, '<OWNER>', i.owner);
coldbms_output.put_line(l_sql1);
owner for a30
colEXECUTE
db_link forIMMEDIATE
a50 l_sql1;
col username for a30
coll_sql1
host for:= 'BEGIN
a100 '||i.owner||'.drop_db_links_prc; END;';
Select * from dba_db_links;
EXECUTE IMMEDIATE l_sql1;
SELECT ' alter index ' || owner || '.' || index_name || ' rebuild ; ' FROM dba_indexes where owner not in ('SYS','SYSTEM');
Session altered.
exec dbms_pdb.exec_as_oracle_sc
https://rodgersnotes.wordpress.com/2011/12/27/scripts-to-find-object-dependencies/
owner,tab
le_name,
blocks,nu
m_rows,a
vg_row_l
en,round(
((blocks*8
/1024)),2)
"TOTAL_
SIZE( MB
)",
round((nu
m_rows*a
vg_row_l
en
/1024/102
4),2)
"ACTUAL
_SIZE(M
B)",
round(((bl
ocks*8/10
24)-
(num_row
s*avg_ro
w_len/10
24/1024))
,2)
"FRAGM
ENTED_
SPACE(
Table size (with fragmentation) MB)" from
er not in ('SYS','SYSTEM');
SQL> select table_name,round((blocks*8),2)||'kb' "size" dba_table
from user_tables s where
where table_name = 'BIG1'; owner='&
owner'
TABLE_NAME size and
------------------------------ ------------------------------------------ table_na
BIG1 72952kb me='&tabl
e_name'
Actual data in table: and
round(((bl
len/1024),2)||'SQL> select table_name,round((num_rows*avg_row_len/1024),2)||'kb'
kb' "ACTUAL "size"
DATA" from dba_tables where table_name='&Table_name'; ocks*8/10
from user_tables 24)-
where table_name = 'BIG1'; (num_row
s*avg_ro
TABLE_NAME size w_len/10
------------------------------ ------------------------------------------ 24/1024))
BIG1 30604.2kb ,2) > 1
order by
Note = 72952 - 30604 = 42348 Kb is wasted space in table 8 desc;
ms_pdb.exec_as_oracle_script('alter package SYS.DBMS_METADATA compile body;');
check this
v$parameter for undo
TEMP
shrink tempfile
undo advisor
http://vsbabu.org/oracle/sect07.html
select inst_id,name,value from gv$parameter where name like '%undo%';
select
sql_id,SQL_PLAN_HASH_VALUE,max(TEMP_SPACE_ALLOCATED)/(1024*1024*10
24) gig
from DBA_HIST_ACTIVE_SESS_HISTORY
where
sample_time > sysdate-10 and
TEMP_SPACE_ALLOCATED > (10*1024*1024*1024)
group by sql_id,SQL_PLAN_HASH_VALUE order by sql_id;
ALTER TABLESPACE temp SHRINK TEMPFILE
'+DATA_KRONIA/p1kronia/tempfile/temp.313.868020865' KEEP 500M;
SELECT d.undo_size/(1024*1024) "ACTUAL UNDO SIZE [MByte]",
SUBSTR(e.value,1,25) "UNDO RETENTION [Sec]",
ROUND((d.undo_size / (to_number(f.value) *
g.undo_block_per_sec))) "OPTIMAL UNDO RETENTION [Sec]"
FROM (
SELECT SUM(a.bytes) undo_size
FROM v$datafile a,
v$tablespace b,
dba_tablespaces c
WHERE c.contents = 'UNDO'
AND c.status = 'ONLINE'
AND b.name = c.tablespace_name
AND a.ts# = b.ts#
) d,
v$parameter e,
v$parameter f,
(
SELECT MAX(undoblks/((end_time-begin_time)*3600*24))
undo_block_per_sec
FROM v$undostat
)g
WHERE e.name = 'undo_retention'
AND f.name = 'db_block_size'
/
select username,
t.used_ublk ,t.used_urec
from gv$transaction t,gv$session s
where t.addr=s.taddr and
s.sid='&sid';
https://community.oracle.com/thread/1098943?tstart=0http://www.oracleflash.com/32/Change-or-switch-undo-tablespace-in-O
refer once for CFS1
If TRUE means it will not show any undo errors , So some times job may complete sucessfully.
block_siz
e from
dba_table
spaces
where
select count(status) from dba_undo_extents where tablespac
status = 'EXPIRED'; e_name='
TEMP') d
REDO
System altered.
Database altered.
useful link
List Hostnames
target names
OEM sqls
emctl commands
list targets
start blackout
All blackout commands
Commit ;
http://www.oracledbasupport.co.uk/querying-grid-repository-tables/
SELECT distinct(mgmt$target.host_name)
FROM mgmt$target
, mgmt$target_properties
WHERE ( mgmt$target.target_name =
mgmt$target_properties.target_name )
AND ( mgmt$target.target_type =
mgmt$target_properties.target_type )
AND ( mgmt$target_properties.property_name in
( 'CPUCount','DBVersion' ) )
GROUP BY mgmt$target.host_name
, mgmt$target_properties.property_name
, mgmt$target_properties.property_value
order by mgmt$target.host_name;
http://askdba.org/weblog/2011/01/retrieving-database-sidport-information-from-grid-control-repository/
http://www.oracledbasupport.co.uk/querying-grid-repository-tables/
http://satya-dba.blogspot.com/2010/01/emctl-commands.html
oracle@testhost [oemagent] cd
/u01/app/oracle/agent/agent12c/bin
./emctl stop agent
./emctl clearstate agent
./emctl start agent
./emctl upload agent
emcli set_monitoring_credential
-target_type=rac_database -target_name=db_name
-set_name="DBCredsMonitoring" -cred_type="DBCreds"
-attributes="DBUserName:dbsnmp;DBPassword:m0nit0r;D
BRole:NORMAL"
emcli sync
ly. May be one or 2 difference will be there
agctl ___location
agctl start
agctl status
agctl relocate
gg status
view report
error
no data found
start extract
others
ps -ef | grep ./mgr
locate agctl
/opt/oracle/product/emagent/gg/install/xag/bin/agctl start goldengate ggate_prod --node server2
cd /opt/oracle/product/emagent/gg/install/xag/bin
./agctl status goldengate ggate_<uat/prod/bcp>
cd /opt/oracle/product/emagent/gg/install/xag/bin/
./agctl relocate goldengate ggate_prod --node secondnode
check the table name , add "HANDLECOLLISIONS" & "NOHANDLECOLLISIONS" before and after the MAP
statement in parameterfile and restart the EXTRACT/REPLICAT
Once the LAG is zero , stop the replicat & remove the "HANDLECOLLISIONS" & "NOHANDLECOLLISIONS" from
parameter file. Then start the replicat
Free/Used SGA
I /O Process
amount of session memory used in the shared pool for all sessions
Free memory in Shared pool
troubleshoot Tool
https://coskan.wordpress.com/2007/09/14/what-i-learned-about-shared-pool-management/
http://yong321.freeshell.org/computer/SharedPoolPurging.html
select
PID,SPID,serial#,USERNAME,PROGRAM,PGA_USED_MEM,PGA_ALLOC_MEM,PGA_F
REEABLE_MEM,PGA_MAX_MEM from v$process order by PGA_USED_MEM desc;
http://www.dbas-oracle.com/2013/05/5-Easy-Step-to-Solve-ORA-04031-with-Oracle-
Support-Provided-Tool.html
For 10g:
set pages 999
set lines 130
col component for a25 head "Component"
col status format a10 head "Status"
col initial_size for 999,999,999,999 head "Initial"
col parameter for a25 heading "Parameter"
col final_size for 999,999,999,999 head "Final"
col changed head "Changed At"
Metalink ID 559339.1
SELECT to_char(ssn.sid, '9999') || ' - ' || nvl(ssn.username,
nvl(bgp.name, 'background')) ||
nvl(lower(ssn.machine), ins.host_name) "SESSION",
to_char(prc.spid, '999999999') "PID/THREAD",
to_char((se1.value/1024)/1024, '999G999G990D00') || ' MB' "
CURRENT SIZE",
to_char((se2.value/1024)/1024, '999G999G990D00') || ' MB' "
MAXIMUM SIZE"
FROM v$sesstat se1, v$sesstat se2, v$session ssn,
v$bgprocess bgp, v$process prc,
v$instance ins, v$statname stat1, v$statname stat2
WHERE se1.statistic# = stat1.statistic# and stat1.name =
'session pga memory'
AND se2.statistic# = stat2.statistic# and stat2.name = 'session
pga memory max'
AND se1.sid = ssn.sid
AND se2.sid = ssn.sid
AND se1.sid=&sid
AND ssn.paddr = bgp.paddr (+)
AND ssn.paddr = prc.addr (+); <--For a Single sid
https://bdrouvot.wordpress.com/2013/03/19/link-huge-pga-temp/
The output from this data dictionary query shows that every
connected Oracle session will about 2.5 megabytes of RAM
memory for the Oracle PGA
See all the data file i / o, and if too many files, can be rewritten
for the top 10 select * (order by xx desc) where rownum <= 10
http://www.dba-oracle.com/t_x$ksmlru_x$ksmsp_shared_pool_monitoring.htm
For 11g:
set pages 999
set lines 130
col component for a25 head "Component"
col status format a10 head "Status"
col initial_size for 999,999,999,999 head "Initial"
col parameter for a25 heading "Parameter"
col final_size for 999,999,999,999 head "Final"
col changed head "Changed At"
pdb violations
patch validation
Patch check
componenets status
select
PATCH_ID,PATCH_UID,VERSION,ACTION,ACTION_TIME,STATUS,DESCRIPTION,BUNDLE_SERIES,BUNDLE
_ID,BUNDLE_DATA from dba_registry_sqlpatch;
Database PSUs
CRS PSUs
GI (Grid Infrastructure) PSUs
Enterprise Manager Agent PSUs
col COMP_ID for a25
col COMP_NAME for a60
set lines 700
select COMP_ID,COMP_NAME,VERSION,STATUS from dba_registry;
delete from obj$ where name in (select OBJECT_NAME from dba_objects where status ='INVALID' and owner
='XDB');
commit;
set serveroutput on
execute sys.dbms_regxdb.validatexdb;
select comp_name, version, status from dba_registry where comp_id='XDB';
<-- status should be SUCCESS
opatch lsinventory -bugs_fixed | egrep -i 'PSU|DATABASE PATCH SET UPDATE'
opatch lsinventory -bugs_fixed | grep -i 'TRACKING BUG' | grep -i 'PSU'
opatch lsinventory -bugs_fixed | grep -i 'GRID INFRASTRUCTURE PATCH SET UPDATE'
opatch lsinventory -bugs_fixed | grep -i 'ENTERPRISE MANAGER' | grep -i 'AGENT'
scheduled job run details
DBA JOBS
SCHEDULED JOBS
select
LOG_ID,LOG_DATE,OWNER,JOB_NAME,STATUS,ERROR#,REQ_START_DATE,ACTU
AL_START_DATE,RUN_DURATION,SESSION_ID,CPU_USED,ADDITIONAL_INFO from
DBA_SCHEDULER_JOB_RUN_DETAILS;
select LOG_ID,LOG_DATE,OWNER,
JOB_NAME,STATUS,USER_NAME,CLIENT_ID,GLOBAL_UID,ADDITIONAL_INFO from
DBA_SCHEDULER_JOB_LOG;
Database Characterset
Finding DBNAME as a normal user
How to see oracle Enterprise edition or not
DBV
External table in oracle for excel sheet
Create and drop db link as another user
ERROR at line 1:
ORA-01565: error in identifying file
Creating Big table
'/ora10gsoft/10.2.0/oradata/sambaar/users01.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
ORA-06512: at line 16
one redo log file deleted on os side.(redolog group contains only one member)
Oracle internal
Profile for OS
dissassembling_the_data_block
Restrict the database logins (To put our database in a single user mode )
create snapshot
Tricks
column separator
ipv6 connectivity
DBMS-insufficient privileges
Product/Component
Automated Storage Management
Oracle Data Mining
Database Vault
Oracle OLAP
Oracle Label Security
Oracle Partitioning
Real Application Cluster
Real Application Testing
Product/Component
Oracle Data Mining
Database Vault
Oracle OLAP
Oracle Label Security
Oracle Partitioning
Real Application Testing
set lines 750 pages 9999
column KSPPINM format a50
column KSPPSTVL format a50
select a.ksppinm, b.ksppstvl FROM x$ksppi a, x$ksppcv b WHERE a.indx=b.indx;
SELECT * FROM SYS.X$KSPPI WHERE SUBSTR(KSPPINM,1,1) = '_';
select distinct table_name from V$INDEXED_FIXED_COLUMN where table_name like 'X$%';
select ksppstvl from x$ksppi join x$ksppcv using (indx) where ksppinm='_high_priority_processes';
select message_text from X$DBGALERTEXT where rownum <= 20;
select
s.sid, p.spid, substr(s.username,1,20) username, s.terminal, p.Program
from
v$session s, v$process p
where
s.paddr = p.addr
and
s.sid = (select sid from v$mystat where rownum=1)
;
select
length(addr)*4 || '-bits' word_length
from
v$process
where
ROWNUM =1;
Procedure created.
no rows selected
SQL>
In my case, I comment out one line starting PROGRAM from listener.ora, and after restarting listener. I can connect
successfully.
SID_LIST_KOREA =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME=korea)
(SID_NAME = KOREA)
(ORACLE_HOME = D:\Applications\oracle\product\10.2.0)
# (PROGRAM = extproc)
)
)
ORA-00350:
while (l_cntlog 1 of instance sambaar (thread 1) needs to be archived
< l_rows)
ORA-00312:
loop online log 1 thread 1:
and we check/*+ its opened*/file descriptors
'/ora10gsoft/10.2.0/oradata/sambaar/redo01a.log'
insert APPEND into bigtab for our file:
ls -l /proc/2661/fd |
select rownum+l_cnt,grep test_rm
lrwx------ 1OWNER,
oracle dba 64 Mar 26 14:02
OBJECT_NAME, 66 -> /var/tmp/test_rm.dbf (deleted)
SUBOBJECT_NAME,
SQL> OBJECT_ID, DATA_OBJECT_ID,
SQL> OBJECT_TYPE, CREATED, LAST_DDL_TIME,
here
SQL>it alter
is: TIMESTAMP,
system checkpoint;STATUS, TEMPORARY,
ls -l /proc/2661/fd/66
GENERATED, SECONDARY
lrwx------
System 1 oracle dba 64 Mar 26 14:02 /proc/2661/fd/66 -> /var/tmp/test_rm.dbf (deleted)
altered.
Run this from bigtab
where rownum <= l_rows-l_cnt;
l_cnt := l_cnt + sql%rowcount;
$ cd $ORACLE_HOME/install
commit;
$ ./changePerm.sh
end loop;
In
SQL>
end;some other
alter unix, lsof
database dropmay be needed
logfile group 1;to map the file descriptor with the deleted file name
alter
/ database drop logfile group 1
*
ERROR
alter table atbigtab
line 1:add constraint
first we set a log
ORA-00350: symbolic link so that
1 key(id);
of instance oracle(thread
sambaar can see1)itneeds
as it was before
to be the delete:
archived
bigtab_pk primary
ln -s /proc/2661/fd/66 /var/tmp/test_rm.dbf
ORA-00312: online log 1 thread 1:
'/ora10gsoft/10.2.0/oradata/sambaar/redo01a.log'
here
SQL>data is accessible, but that will be lost if dbwriter closes it file handle (i.e if the database is closed)
SQL> ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 1;
RECOVERaltered.
Database DATABASE UNTIL CANCEL
alter database open resetlogs
SQL> SQL> SQL> SQL> alter database drop logfile group 1;
.export
Template ORACLE_HOME=/opt/oracle/product/11.1.0/db7
___location
Database altered.
PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.:/usr/local/bin:${ORACLE_HOME}:$
-------------------
select
{ORACLE_HOME}/bin:${ORACLE_HOME}/OPatch:/oracle/dba/bin
c:\oracle\product\10.2.0\db_1\assistants\dbca\templates
samp.dbid,
SQL>
OEM Scripts
fu.name,
export PATH
------------
samp.version,
export HISTFILE=$HOME/.histdir/$(tty|sed 's-/-_-g')
\\networkdrive\k$\oracle\product\10.2.0\db_1\sysman\admin\emdrep\sql
detected_usages,
export
Database DBA_INIT_INI=/oracle/dba/funcs/dba_init.ini
Creation
total_samples,
-------------------
decode(to_char(last_usage_date, 'MM/DD/YYYY, HH:MI:SS'),
# NMON variable
C:\WINDOWS\system32\cmd
NULL, to stop oslevel
'FALSE', checking
/c call K:\oracle\product\10.2.0\db_1/bin/dbca.bat -progress_only -createDatabase
export NMONAIX=5.2.0.0
-templateName General_Purpose.dbc
to_char(last_sample_date, -gdbNameHH:MI:SS'),
'MM/DD/YYYY, test -sid test'TRUE',
-sysPassword 05f6050bc031e3dc104db3b733a0228c44
-systemPassword
'FALSE') 05f6050bc031e3dc104db3b733a0228c44 -sysmanPassword 05c5f468c03129e8c2b5ed24021b2f7200
export EDITOR=vi 05c5f468c03129e8c2b5ed24021b2f7200 -emConfiguration LOCAL -datafileJarLocation
-dbsnmpPassword
currently_used,
export FPATH=/oracle/dba/funcs
K:\oracle\product\10.2.0\db_1\assistants\dbca\templates
first_usage_date, -datafileDestination K:\oracle\product\10.2.0\oradata
export TNS_ADMIN=/var/opt/oracle
-responseFile
last_usage_date,NO_VALUE -characterset WE8MSWIN1252 -obfuscatedPasswords true -sampleSchema true
export ORACLE_BASE=/opt/oracle
-recoveryAreaDestination
aux_count, NO_VALUE
export ORACLE_ASK=YES
feature_info,
export ORACLE_OWNER=oracle
last_sample_date,
begin
last_sample_period,
sys.dbms_system.ksdwrt(2,
export 'My own message');
NLS_LANG=AMERICAN_AMERICA.UTF8
sample_interval,
end;
export NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI'
mt.description
/
from
ninswri$_dbu_usage_sample samp,
. .kshrc
wri$_dbu_feature_usage fu,
wri$_dbu_feature_metadata mt
#where
Set up machine independent variables
stty erase '^H' =killfu.dbid
samp.dbid "^U" intr
and"^C" eof "^D"
umask 002
samp.version = fu.version and
export
fu.name JAVA_COMPILER=NONE
= mt.name and
export
fu.name HOST=$(uname -n)
not like '_DBFUS_TEST%' and /* filter out test features */
export PWD=`pwd`
bitand(mt.usg_det_method, 4) != 4 /* filter out disabled features */;
export PS1='$ORACLE_SID@$HOST: $PWD> '
if [ -s "$MAIL" ] # This is at Shell startup. In normal
then echo "$MAILMSG" # operation, the Shell checks
fi # periodically.
Sql> alter system suspend;
Sql> select database_status from v$instance;
Database_status
-----------------
Suspended
http://www.orafaq.com/papers/dissassembling_the_data_block.pdf
SQL> select active_state
Sql> alter system resume;from v$instance;
ACTIVE_ST
Sql> select database_status from v$instance;
---------
NORMAL
Database_status
-----------------
SQL>
Active ALTER SYSTEM QUIESCE RESTRICTED;
Sql>startup restrict;
System altered.
Sql>alter system disable restricted session;
Sql> alter system enable restricted session;
SQL> select active_state from v$instance;
ACTIVE_ST
---------
QUIESCED
SQL> select bq.sid, username, osuser, program, machine from v$blocking_quiesce bq, v$session s where bq.sid = s.sid;
no rows selected
System altered.
EXEC DBMS_WORKLOAD_REPOSITORY.create_snapshot;
(connect as SYSTEM)
SQL> alter user APEX_030200 grant connect through system;
User altered.
SQL> alter user apex_030200 account unlock;
User altered.
SQL> connect system[apex_030200]/systempassword
Connected.
SQL> select user from dual;
APEX_030200
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)
(HOST=[fe80::219:21ff:febb:9aa5]) (PORT=1526))
(CONNECT_DATA=(SERVICE_NAME=D112D1)))
set serveroutput on
set heading off
set feedback off
select sysdate from dual;
exec dbms_output.put_line('------------------------------');
select sysdate from dual;
http://m.blog.itpub.net/17252115/viewspace-1160554/
cd $ORACLE_HOME/rdbms/lib
ar -tv libknlopt.a | grep -c kkxwtp.o
ar -tv libknlopt.a | grep -c kfoff.o
ar -tv libknlopt.a | grep -c ktd.o
ar -tv libknlopt.a | grep -c kxmwsd.o
ar -tv libknlopt.a | grep -c kciwcx.o
ar -tv libknlopt.a | grep -c sllfls.o
ar -tv libknlopt.a | grep -c kprnts.o
ar -tv libknlopt.a | grep -c xsnoolap.o
ar -tv libknlopt.a | grep -c kdzof.o
ar -tv libknlopt.a | grep -c kecnr.o
ar -tv libknlopt.a | grep -c dmndm.o
ar -tv libknlopt.a | grep -c kkpoban.o
ar -tv libknlopt.a | grep -c kcsm.o
ar -tv libknlopt.a | grep -c jox.o
ar -tv libknlopt.a | grep -c kzlilbac.o
ar -tv libknlopt.a | grep -c kzvidv.o
Short Name
ASM
DM
DV
OLAP
OLS
PART
RAC
RAT
Option
dm
dv
olap
lbac
partitioning
rat
SELECT
a.ksppinm Param ,
b.ksppstvl SessionVal ,
c.ksppstvl InstanceVal,
a.ksppdesc Descr
FROM
x$ksppi a ,
x$ksppcv b ,
x$ksppsv c
WHERE
a.indx = b.indx AND
select name, value from sys.V$PARAMETER where name like '\_%' escape '\' and ISDEFAULT='FALSE';
a.indx = c.indx AND
a.ksppinm LIKE '/_adg%' escape '/'
ORDER BY
1
/
Total Pages
Solaris Marked Corrupt-kv: 0
--> /usr/bin/isainfo cd $ORACLE_HOME/bin
Linux --> uname -m file oracl*
Total Pages Influx :0
Automating dbv
http://www.oracle.com/technetwork/articles/saternos-tables-090560.html
http://dbaoracletips.blogspot.com/2011/11/how-to-dropcreate-database-link-from.html
http://www.orafaq.com/wiki/ChangePerm_sh
General All
ar -tv libknlopt.a
kfon.o
dmwdm.o
kzvidv.o
xsyeolap.o
kzlilbac.o
kkpoban.o
kcsm.o
kecwr.o
Database Option ON
org/reference/sys_context.html
OFF
dm_off
dmse_off
dv_off
lbac_off
part_off
rac_off
sdo_off
rat_off
olap_off
asm_off
ctx_off
Pwd verify function extract password
Wallet
--ORA-28365: wallet is not open
Auditing
audited privileges
Mask password in shell script
CREATE statement
disable
enable
http://orafaq.com/node/58
http://www.soonerorlater.hu/index.khtml?article_id=513
http://www.petefinnigan.com/weblog/archives/00001103.htm
set serveroutput on
declare
db_link_password varchar2(500);
begin
db_link_password :=
'06D05F5E36F13A08FD3C5FE489EB89B094701C114FF156A92D84A5724EF5FC2BA4F25BF
BE99146C22075BEF3012D0F9DC6231FBD1A5EFBFA97DCD8FD13737243992EA16AD5A23
B7DC823346DEB4CD69FE6F20B3F15821FEFF9F44430EE40C78CAEE37DF25F25C2BEDE
D1DD2A61C72351E462BF1B844B2599E5125AE0135EAF7';
https://oraganism.wordpress.com/2009/10/06/spoofing-vsession-osuser/
Connect to container and check whether WALLET is OPEN or not ? If it is in OPEN state then
connect to PDB and check the same
--ORA-28365: wallet is not open
select status from v$encryption_wallet;
If the wallet is closed at Contaner DB then OPEN it using below command (run in container):
If the WALLET IS OPENED in container but CLOSED in PDB level, then run below at container
level
http://blog.tanelpoder.com/2009/02/07/when-was-a-table-last-changed/
select INSERTS,UPDATES,DELETES,TABLE_NAME,to_char(TIMESTAMP,'DD-MM-YY
HH24:MI') from dba_tab_modifications where table_owner not like '%SYS%' order by
TIMESTAMP desc;
but for the above statement the table level monitoring should be enabled
http://blog.tanelpoder.com/2009/02/07/when-was-a-table-last-changed/
http://oradb-srv.wlv.ac.uk/E16655_01/server.121/e17608/dvdisabl.htm
SELECT PARAMETER, VALUE FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';
EXEC DVSYS.DBMS_MACADM.DISABLE_DV;
EXEC DVSYS.DBMS_MACADM.ENABLE_DV;
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Oracle Label Security';
EXEC LBACSYS.CONFIGURE_OLS;
EXEC LBACSYS.OLS_ENFORCEMENT.ENABLE_OLS;
https://taliphakanozturken.wordpress.com/2012/06/12/the-backdoor-entry-to-oracle-database/
http://murty4all.blogspot.ch/2013/11/decrypting-oracle-database-db-link_29.html
elseadminister key management set keystore close;https://blog.dbi-services.com/encryption-in-oracle-public-cloud/
Database Vault';
Oracle Label security must be enabled before you can use Database Vault. If it is not enabled, then this q
restart required
If it is not enabled, then this query returns FALSE.
tools
oswatcher gui
getting input
reset the input value
http://blog.tanelpoder.com/2013/03/17/asqlmon-sql-sql-monitoring-like-execution-plan-line-level-drilldown-into-sql-response-tim
Dim UserName
Dim Passwrd
ServerName = InputBox("Please Enter Your Servername:")
Passwrd = InputBox("Please Enter Your RSA TOKEN:")
If ServerName ="" Then
Wscript.Quit
Else
Set shell = WScript.CreateObject("WScript.Shell")
pcmd = "C:\Program Files (x86)\Putty\putty.exe "&Servername & " -pw firstpwd"&Passwrd
Set exec = shell.Exec(pcmd)
Set pout = exec.StdOut
End If
DECLARE
L_n NUMBER;
BEGIN
WHILE (TRUE)
LOOP
L_ n:= dbms_random.random();
END LOOP;
END;
/
start of line
------------------ place ur mouse at the start of the
ctrl + H, select "regular expression " in search mode , first line in ur list.
find with ^ Press Alt + "C"
replace with ' A window gets opened. Enter the
END OF LINE text that u want to add under
----------------- "Text to Insert" and press OK.
ctrl + H, select "regular expression " in search mode , Apply the same procedure for
find with $ adding text at the end of all the
replace with ', lines. https://stackoverflow.com/ques
-level-drilldown-into-sql-response-time/
https://blog.dbi-services.com/oracle-11g-instance-caging-limit-database-cpu-consumption/
Oracle Hacking
Monitoring scripts
RAC
optimizer Magic
http://www.scribd.com/doc/2966777/oracle-cheat-SQLPlus-Commands
http://www.oracle-base.com/articles/10g/SQLTrace10046TrcsessAndTkprof10g.php
http://www.blacksheepnetworks.com/security/resources/www.think-forward.com/sqltips.htm
http://www.colestock.com/blogs/labels/Monitoring.html
http://allr1.blackapplehost.com/
http://goodies.dale-emmons.com/Documentation/books/Oracle/
http://search.4shared.com/q/10/oracle%2011g
http://www.slideshare.net/karlarao/performance-scenario-diagnosing-and-resolving-sudden-slow-down-on-two-node-rac
http://www.morganslibrary.com/reference/rac.html
http://yong321.freeshell.org/oranotes/DbParam_CompTimeConst_Map.txt
http://www.perfvision.com/papers.php
http://beginner-sql-tutorial.com/sql-query-tuning.htm
http://sql-tuning.com/oracle-sql-performance-tuning/
https://gavinsoorma.com/2012/11/ash-and-awr-performance-tuning-scripts/
http://dbaclass.com/article/change-the-execution-plan-without-changing-the-sql-query/
http://guyharrison.squarespace.com/opsgsamples/
http://optimizermagic.blogspot.com/
https://coskan.wordpress.com/2011/02/14/plan-stability-through-upgrade-why-is-my-plan-changed-bugfixes-1/
Super
Scenarios
Database FULL DB
Database FULL DB
Multiple Schema
Database FULL DB
Database FULL DB
scp algorithm
exclude Table
Exclude Common
Remap Schema
Remap Tablespace
Remap Table
TABLE_EXISTS_ACTION
12c
expdp in Background
exclude=table:"IN('TABLE1','TABLE2','TABLE3')" http://www.acehints.com/2012/11
exclude=TABLE:"LIKE 'EXAM%'"
exclude=TABLES:">'F'"
exclude=SEQUENCE,PROCEDURES,INDEXES,TABLES:"IN ('EMP1','DEPT')"
REMAP_SCHEMA=SCHEMA1:DUPSCHEMA2
TABLE_EXISTS_ACTION=SKIP
Same Schema
remap_table=emp:emp_bkup
different schema
REMAP_SCHEMA=SCHEMA1:DUPSCHEMA2
remap_table=emp:emp_bkup
TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
SELECT tablespace_name,
SUM (bytes) / (1024 * 1024) "FREE(MB)"
FROM dba_free_space where
tablespace_name=UPPER('&TABLESPACE_NAME')
GROUP BY tablespace_name;
http://www.acehints.com/2012/11/data-pump-impdp-remaptable-option-to.html
Issue
ADR Different Methods to Create IPS Package (Doc ID )
Quick Steps for ADRCI
ORA-04031: troubleshoot Tool
XDB Component has INVALID
SRDC - How to Collect Standard Information for a SQL Performance Problem
TFA Collector - TFA with Database Support Tools Bundle
ID
411.1
443529.1
559339.1
1552438.1
1594386.1
1513912.1