|
Size: 496
Comment:
|
Size: 11052
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 2: | Line 2: |
| <<TableOfContents()>> | |
| Line 4: | Line 5: |
| ==Script to Report Frequency of Log Switches == {{{ REM LOCATION: Object Management\Redo Logs REM FUNCTION: Provide data on Redo Log Switches REM TESTED ON: 10.2.0.3, 11.1.0.6 REM PLATFORM: non-specific REM REQUIRES: v$thread REM REM This is a part of the Knowledge Xpert for Oracle Administration library. REM Copyright (C) 2008 Quest Software REM All rights reserved. REM REM ******************** Knowledge Xpert for Oracle Administration ******************** COLUMN avg_log_switch_min format 9,999.99 heading "Average|Log|Switch|Times|(Min)" SET lines 132 pages 60 feedback off verify off echo off TTITLE 'Average Log Switch Time Report' PROMPT 'Note that high rates of Redo Log switching can cause performance problems' PROMPT 'If this report indicates average switch times of less than 10 minutes' PROMPT 'you should consider increasing the size of your redo logs.' WITH redo_log_switch_times AS (SELECT sequence#, first_time, LAG (first_time, 1) OVER (ORDER BY first_time) AS LAG, first_time - LAG (first_time, 1) OVER (ORDER BY first_time) lag_time, 1440 * (first_time - LAG (first_time, 1) OVER (ORDER BY first_time) ) lag_time_pct_mins FROM v$log_history ORDER BY sequence#) SELECT AVG (lag_time_pct_mins) avg_log_switch_min FROM redo_log_switch_times; }}} |
|
| Line 22: | Line 59: |
== USER informations == {{{ SELECT u.username, u.default_tablespace, u.temporary_tablespace "TMP TBS", u.profile, r.granted_role, r.admin_option, r.default_role FROM sys.dba_users u, sys.dba_role_privs r WHERE u.username = r.grantee (+) GROUP BY u.username, u.default_tablespace, u.temporary_tablespace, u.profile, r.granted_role, r.admin_option, r.default_role; }}} == Create user sample == {{{ CREATE USER username IDENTIFIED BY password DEFAULT TABLESPACE tablespacename TEMPORARY SPACE temp_tablespacename QUOTA UNLIMITED ON tablespacename; GRANT CONNECT TO username; GRANT RESOURCE TO username; }}} == Active Processes(DBA) == {{{ SET pagesize 55; SET linesize 170; col SQL format a80; col SERVER heading 'SVR' format a3; col EVENT heading 'WAITING' format a30 fold_after; col OSUSER heading 'OSUSER' format a8; col USERNAME heading 'USERNAME' format a8; col PID heading 'OSPID' format 99999; col DISK_READS heading 'DISK I/O' format 99999999; col BUFFER_GETS heading 'BUFFER|GETS' format 99999999; SELECT SUBSTR(V$SESSION.USERNAME,1,8) USERNAME, V$SESSION.OSUSER OSUSER, -- DECODE(V$SESSION.SERVER,'DEDICATED','D','SHARED','S','O') SERVER, V$SQLAREA.DISK_READS DISK_READS, V$SQLAREA.BUFFER_GETS BUFFER_GETS, SUBSTR(V$SESSION.LOCKWAIT,1,10) LOCKWAIT, V$SESSION.PROCESS PID, V$SESSION_WAIT.EVENT EVENT, V$SQLAREA.SQL_TEXT SQL FROM V$SESSION_WAIT, V$SQLAREA, V$SESSION WHERE V$SESSION.SQL_ADDRESS = V$SQLAREA.ADDRESS AND V$SESSION.SQL_HASH_VALUE = V$SQLAREA.HASH_VALUE AND V$SESSION.SID = V$SESSION_WAIT.SID (+) AND V$SESSION.STATUS = 'ACTIVE' AND V$SESSION_WAIT.EVENT != 'client message' ORDER BY V$SESSION.LOCKWAIT ASC, V$SESSION.USERNAME; }}} == Kill Session == * Identify the Session to be Killed {{{ SET LINESIZE 100 COLUMN spid FORMAT A10 COLUMN username FORMAT A10 COLUMN program FORMAT A45 SELECT s.inst_id, s.sid, s.serial#, p.spid, s.username, s.program FROM gv$session s JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id WHERE s.type != 'BACKGROUND'; }}} {{{ SELECT SID, SERIAL# FROM V$SESSION WHERE USERNAME = 'LSHR'; }}} * kill session https://oracle-base.com/articles/misc/killing-oracle-sessions {{{ The basic syntax for killing a session is shown below. SQL> ALTER SYSTEM KILL SESSION 'sid,serial#'; ALTER SYSTEM KILL SESSION '7,15'; In a RAC environment, you optionally specify the INST_ID, shown when querying the GV$SESSION view. This allows you to kill a session on different RAC node. SQL> ALTER SYSTEM KILL SESSION 'sid,serial#,@inst_id'; }}} == Show dead case == SELECT distinct KTUXECFL,count(*) from x$ktuxe group by KTUXECFL; == How to see the oldest flashback available? == Using the following query one can see the flashback data available. {{{ SELECT to_char(sysdate,'YYYY-MM-DD HH24:MI') current_time, to_char(f.oldest_flashback_time, 'YYYY-MM-DD HH24:MI') OLDEST_FLASHBACK_TIME, (sysdate – f.oldest_flashback_time)*24*60 HIST_MIN FROM v$database d, V$FLASHBACK_DATABASE_LOG f; }}} == List Earliest Flashback Database Time and SCN == {{{ -- -- List Earliest Flashback Database Time and SCN. -- SET PAUSE ON SET PAUSE 'Press Return to Continue' SET PAGESIZE 60 SET LINESIZE 300 SET VERIFY OFF COLUMN oldest_flash_scn FOR 999,999,999 ALTER SESSION SET nls_date_format='DD MON YYYY hh24:mi:ss' / SELECT oldest_flashback_scn, oldest_flashback_time FROM v$flashback_database_log / }}} == List Flashback Database Restore Points == Oracle Database » SQL Library » List Flashback Database Restore Points {{{ -- -- List Flashback Database Restore Points -- SET PAUSE ON SET PAUSE 'Press Return to Continue' SET PAGESIZE 60 SET LINESIZE 300 SET VERIFY OFF COLUMN scn FOR 999,999,999,999,999 COLUMN Incar FOR 99 COLUMN name FOR A25 COLUMN storage_size FOR 999,999,999,999 COLUMN guarantee_flashback_database FOR A3 SELECT database_incarnation# as Incar, scn, name, time, storage_size, guarantee_flashback_database FROM v$restore_point ORDER BY 4 / }}} == Datapump Export Script == {{{ #!/bin/ksh -x # # Title: datapump_backup.ksh # Purpose: Used to take full datapump exports # Called by: n/a # # Notes: None # # Author: Mark ramsay # Date: 05 April 2012 # # Notes: Requires an oracle directory to be present called data_pump_dir which points to # /u01/app/oracle/admin/${ORACLE_SID}/dpdump # Parameter \$1 should be set to the Oracle SID # *BE CAREFUL* - The script will remove an dump files from the data_pump_dir # that match the find command. # export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 export PATH=$PATH:$ORACLE_HOME/bin SDS_date=`date +%d%b%Y` export ORACLE_SID=$1 export ORAENV_ASK=NO . oraenv expdp \"/ as sysdba\" DUMPFILE=${ORACLE_SID}_full_backup_${SDS_date}.dmp DIRECTORY=data_pump_dir Full=y cd /u01/app/oracle/admin/${ORACLE_SID}/dpdump find . -name "${ORACLE_SID}_full_backup_*.dmp" -mtime +14 -follow -exec rm {} \; }}} == Using the redo log sizing advisor == The following SQL will give advice on the optimal size of the redo logs, but manual inspection of redo log switch frequency is always the best approach: {{{ SELECT (SELECT ROUND (AVG (BYTES) / 1024 / 1024, 2) FROM V$LOG) AS "Redo size (MB)", ROUND ( (20 / AVERAGE_PERIOD) * (SELECT AVG (BYTES) FROM V$LOG) / 1024 / 1024, 2) AS "Recommended Size (MB)" FROM (SELECT AVG ( (NEXT_TIME - FIRST_TIME) * 24 * 60) AS AVERAGE_PERIOD FROM V$ARCHIVED_LOG WHERE FIRST_TIME > SYSDATE - 3 AND TO_CHAR (FIRST_TIME, 'HH24:MI') BETWEEN '16:00' AND '17:00'); }}} == How to check if tablespaces are autoextend == {{{ select TABLESPACE_NAME, FILE_NAME,AUTOEXTENSIBLE,MAXBYTES from dba_Data_files where TABLESPACE_NAME like 'TS__'; }}} == Free space in Auto extensible tablespaces == {{{ WITH my_ddf AS ( SELECT file_id, tablespace_name, file_name, DECODE (autoextensible, 'YES', GREATEST (BYTES, maxbytes), BYTES ) mysize, DECODE (autoextensible, 'YES', CASE WHEN (maxbytes > BYTES) THEN (maxbytes - BYTES) ELSE 0 END, 0 ) growth FROM dba_data_files) SELECT my_ddf.tablespace_name, ROUND (SUM (my_ddf.mysize) / (1024 * 1024)) totsize, ROUND (SUM (growth) / (1024 * 1024)) growth, ROUND ((SUM (NVL (freebytes, 0))) / (1024 * 1024)) dfs, ROUND ((SUM (NVL (freebytes, 0)) + SUM (growth)) / (1024 * 1024) ) totfree, ROUND ( (SUM (NVL (freebytes, 0)) + SUM (growth)) / SUM (my_ddf.mysize) * 100 ) perc FROM my_ddf, (SELECT file_id, SUM (BYTES) freebytes FROM dba_free_space GROUP BY file_id) dfs WHERE my_ddf.file_id = dfs.file_id(+) AND my_ddf.tablespace_name NOT LIKE '%UNDOTB%' GROUP BY my_ddf.tablespace_name ORDER BY 6 DESC }}} == To get all information about all tablespaces == http://docs.gz.ro/oracle-display-tablespace-information.html {{{ set lines 230 set echo off set term off set trimspool on set verif off set feed off set pagesize 100 column filename format a100 column tablespace format a15 column status format a10 trunc column autoextend format a10 select file_name "Filename", tablespace_name "Tablespace", round(bytes/1024/1024 ,2) "Current Size (MB)", autoextensible "Autoextend", round(increment_by*8192/1024/1024 ,2) "Autoextend Size (MB)", round(maxbytes/1024/1024 ,2) "Max Size (MB)" from dba_data_files order by TABLESPACE_NAME; }}} == Oracle v$block_change_tracking == === Enable BLOCK TRACKING === {{{ SQL> show parameter db_create_file_dest NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_create_file_dest string +DATA_MIRROR01 SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING; SQL> col filename format a60; SQL> select filename, status, bytes/1024/1024 from v$block_change_tracking; FILENAME STATUS BYTES/1024/1024 ------------------------------------------------------------ ---------- --------------- +DATA_MIRROR01/ddtest/changetracking/ctf.268.971954405 ENABLED 11.0625 }}} === OR create the change tracking file in a location === * ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/mydir/rman_change_track.f' REUSE; === Disable BLOCK TRACKING === {{{ SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING; }}} |
Contents
-
Some usefull TIPS
- USER idle time
- USER temp tablespace
- USER informations
- Create user sample
- Active Processes(DBA)
- Kill Session
- Show dead case
- How to see the oldest flashback available?
- List Earliest Flashback Database Time and SCN
- List Flashback Database Restore Points
- Datapump Export Script
- Using the redo log sizing advisor
- How to check if tablespaces are autoextend
- Free space in Auto extensible tablespaces
- To get all information about all tablespaces
- Oracle v$block_change_tracking
Some usefull TIPS
==Script to Report Frequency of Log Switches ==
REM LOCATION: Object Management\Redo Logs
REM FUNCTION: Provide data on Redo Log Switches
REM TESTED ON: 10.2.0.3, 11.1.0.6
REM PLATFORM: non-specific
REM REQUIRES: v$thread
REM
REM This is a part of the Knowledge Xpert for Oracle Administration library.
REM Copyright (C) 2008 Quest Software
REM All rights reserved.
REM
REM ******************** Knowledge Xpert for Oracle Administration ********************
COLUMN avg_log_switch_min format 9,999.99 heading "Average|Log|Switch|Times|(Min)"
SET lines 132 pages 60 feedback off verify off echo off
TTITLE 'Average Log Switch Time Report'
PROMPT 'Note that high rates of Redo Log switching can cause performance problems'
PROMPT 'If this report indicates average switch times of less than 10 minutes'
PROMPT 'you should consider increasing the size of your redo logs.'
WITH redo_log_switch_times AS
(SELECT sequence#, first_time,
LAG (first_time, 1) OVER (ORDER BY first_time) AS LAG,
first_time
- LAG (first_time, 1) OVER (ORDER BY first_time) lag_time,
1440
* (first_time - LAG (first_time, 1) OVER (ORDER BY first_time)
) lag_time_pct_mins
FROM v$log_history
ORDER BY sequence#)
SELECT AVG (lag_time_pct_mins) avg_log_switch_min
FROM redo_log_switch_times;
USER idle time
SELECT sid, osuser, username, status, TO_CHAR(logon_time, 'DAY HH24:MI:SS') LOGON_TIME, FLOOR(last_call_et/3600)||':'|| FLOOR(MOD(last_call_et,3600)/60)||':'|| MOD(MOD(last_call_et,3600),60) IDLE, program FROM v_$session WHERE username IS NOT NULL ORDER BY last_call_et;
USER temp tablespace
SELECT username, default_tablespace, temporary_tablespace FROM dba_users ORDER BY 1;
USER informations
SELECT u.username, u.default_tablespace, u.temporary_tablespace "TMP TBS", u.profile, r.granted_role, r.admin_option, r.default_role FROM sys.dba_users u, sys.dba_role_privs r WHERE u.username = r.grantee (+) GROUP BY u.username, u.default_tablespace, u.temporary_tablespace, u.profile, r.granted_role, r.admin_option, r.default_role;
Create user sample
CREATE USER username IDENTIFIED BY password DEFAULT TABLESPACE tablespacename TEMPORARY SPACE temp_tablespacename QUOTA UNLIMITED ON tablespacename; GRANT CONNECT TO username; GRANT RESOURCE TO username;
Active Processes(DBA)
SET pagesize 55;
SET linesize 170;
col SQL format a80;
col SERVER heading 'SVR' format a3;
col EVENT heading 'WAITING' format a30 fold_after;
col OSUSER heading 'OSUSER' format a8;
col USERNAME heading 'USERNAME' format a8;
col PID heading 'OSPID' format 99999;
col DISK_READS heading 'DISK I/O' format 99999999;
col BUFFER_GETS heading 'BUFFER|GETS' format 99999999;
SELECT SUBSTR(V$SESSION.USERNAME,1,8) USERNAME,
V$SESSION.OSUSER OSUSER,
-- DECODE(V$SESSION.SERVER,'DEDICATED','D','SHARED','S','O') SERVER,
V$SQLAREA.DISK_READS DISK_READS,
V$SQLAREA.BUFFER_GETS BUFFER_GETS,
SUBSTR(V$SESSION.LOCKWAIT,1,10) LOCKWAIT,
V$SESSION.PROCESS PID,
V$SESSION_WAIT.EVENT EVENT,
V$SQLAREA.SQL_TEXT SQL
FROM V$SESSION_WAIT, V$SQLAREA, V$SESSION
WHERE V$SESSION.SQL_ADDRESS = V$SQLAREA.ADDRESS AND
V$SESSION.SQL_HASH_VALUE = V$SQLAREA.HASH_VALUE AND
V$SESSION.SID = V$SESSION_WAIT.SID (+) AND
V$SESSION.STATUS = 'ACTIVE' AND
V$SESSION_WAIT.EVENT != 'client message'
ORDER BY V$SESSION.LOCKWAIT ASC, V$SESSION.USERNAME;
Kill Session
- Identify the Session to be Killed
SET LINESIZE 100 COLUMN spid FORMAT A10 COLUMN username FORMAT A10 COLUMN program FORMAT A45 SELECT s.inst_id, s.sid, s.serial#, p.spid, s.username, s.program FROM gv$session s JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id WHERE s.type != 'BACKGROUND';
SELECT SID, SERIAL# FROM V$SESSION WHERE USERNAME = 'LSHR';
The basic syntax for killing a session is shown below. SQL> ALTER SYSTEM KILL SESSION 'sid,serial#'; ALTER SYSTEM KILL SESSION '7,15'; In a RAC environment, you optionally specify the INST_ID, shown when querying the GV$SESSION view. This allows you to kill a session on different RAC node. SQL> ALTER SYSTEM KILL SESSION 'sid,serial#,@inst_id';
Show dead case
SELECT distinct KTUXECFL,count(*) from x$ktuxe group by KTUXECFL;
How to see the oldest flashback available?
Using the following query one can see the flashback data available.
SELECT to_char(sysdate,'YYYY-MM-DD HH24:MI') current_time, to_char(f.oldest_flashback_time, 'YYYY-MM-DD HH24:MI') OLDEST_FLASHBACK_TIME, (sysdate – f.oldest_flashback_time)*24*60 HIST_MIN FROM v$database d, V$FLASHBACK_DATABASE_LOG f;
List Earliest Flashback Database Time and SCN
-- -- List Earliest Flashback Database Time and SCN. -- SET PAUSE ON SET PAUSE 'Press Return to Continue' SET PAGESIZE 60 SET LINESIZE 300 SET VERIFY OFF COLUMN oldest_flash_scn FOR 999,999,999 ALTER SESSION SET nls_date_format='DD MON YYYY hh24:mi:ss' / SELECT oldest_flashback_scn, oldest_flashback_time FROM v$flashback_database_log /
List Flashback Database Restore Points
Oracle Database » SQL Library » List Flashback Database Restore Points
--
-- List Flashback Database Restore Points
--
SET PAUSE ON
SET PAUSE 'Press Return to Continue'
SET PAGESIZE 60
SET LINESIZE 300
SET VERIFY OFF
COLUMN scn FOR 999,999,999,999,999
COLUMN Incar FOR 99
COLUMN name FOR A25
COLUMN storage_size FOR 999,999,999,999
COLUMN guarantee_flashback_database FOR A3
SELECT
database_incarnation# as Incar,
scn,
name,
time,
storage_size,
guarantee_flashback_database
FROM
v$restore_point
ORDER BY 4
/
Datapump Export Script
#
# Title: datapump_backup.ksh
# Purpose: Used to take full datapump exports
# Called by: n/a
#
# Notes: None
#
# Author: Mark ramsay
# Date: 05 April 2012
#
# Notes: Requires an oracle directory to be present called data_pump_dir which points to
# /u01/app/oracle/admin/${ORACLE_SID}/dpdump
# Parameter \$1 should be set to the Oracle SID
# *BE CAREFUL* - The script will remove an dump files from the data_pump_dir
# that match the find command.
#
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin
SDS_date=`date +%d%b%Y`
export ORACLE_SID=$1
export ORAENV_ASK=NO
. oraenv
expdp \"/ as sysdba\" DUMPFILE=${ORACLE_SID}_full_backup_${SDS_date}.dmp DIRECTORY=data_pump_dir Full=y
cd /u01/app/oracle/admin/${ORACLE_SID}/dpdump
find . -name "${ORACLE_SID}_full_backup_*.dmp" -mtime +14 -follow -exec rm {} \;
Using the redo log sizing advisor
The following SQL will give advice on the optimal size of the redo logs, but manual inspection of redo log switch frequency is always the best approach:
SELECT
(SELECT
ROUND (AVG (BYTES) / 1024 / 1024, 2)
FROM
V$LOG) AS "Redo size (MB)",
ROUND ( (20 / AVERAGE_PERIOD) * (SELECT AVG (BYTES) FROM V$LOG) / 1024 / 1024, 2) AS "Recommended Size (MB)"
FROM
(SELECT AVG ( (NEXT_TIME - FIRST_TIME) * 24 * 60) AS
AVERAGE_PERIOD
FROM
V$ARCHIVED_LOG
WHERE
FIRST_TIME > SYSDATE - 3
AND
TO_CHAR (FIRST_TIME, 'HH24:MI') BETWEEN '16:00' AND '17:00');
How to check if tablespaces are autoextend
select TABLESPACE_NAME, FILE_NAME,AUTOEXTENSIBLE,MAXBYTES from dba_Data_files where TABLESPACE_NAME like 'TS__';
Free space in Auto extensible tablespaces
WITH my_ddf AS
(
SELECT file_id, tablespace_name, file_name,
DECODE (autoextensible,
'YES', GREATEST (BYTES, maxbytes),
BYTES
) mysize,
DECODE (autoextensible,
'YES', CASE
WHEN (maxbytes > BYTES)
THEN (maxbytes - BYTES)
ELSE 0
END,
0
) growth
FROM dba_data_files)
SELECT my_ddf.tablespace_name,
ROUND (SUM (my_ddf.mysize) / (1024 * 1024)) totsize,
ROUND (SUM (growth) / (1024 * 1024)) growth,
ROUND ((SUM (NVL (freebytes, 0))) / (1024 * 1024)) dfs,
ROUND ((SUM (NVL (freebytes, 0)) + SUM (growth)) / (1024 * 1024)
) totfree,
ROUND ( (SUM (NVL (freebytes, 0)) + SUM (growth))
/ SUM (my_ddf.mysize)
* 100
) perc
FROM my_ddf, (SELECT file_id, SUM (BYTES) freebytes
FROM dba_free_space
GROUP BY file_id) dfs
WHERE my_ddf.file_id = dfs.file_id(+)
AND my_ddf.tablespace_name NOT LIKE '%UNDOTB%'
GROUP BY my_ddf.tablespace_name
ORDER BY 6 DESC
To get all information about all tablespaces
http://docs.gz.ro/oracle-display-tablespace-information.html
set lines 230
set echo off
set term off
set trimspool on
set verif off
set feed off
set pagesize 100
column filename format a100
column tablespace format a15
column status format a10 trunc
column autoextend format a10
select
file_name "Filename",
tablespace_name "Tablespace",
round(bytes/1024/1024 ,2) "Current Size (MB)",
autoextensible "Autoextend",
round(increment_by*8192/1024/1024 ,2) "Autoextend Size (MB)",
round(maxbytes/1024/1024 ,2) "Max Size (MB)"
from dba_data_files
order by TABLESPACE_NAME;
Oracle v$block_change_tracking
Enable BLOCK TRACKING
SQL> show parameter db_create_file_dest NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_create_file_dest string +DATA_MIRROR01 SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING; SQL> col filename format a60; SQL> select filename, status, bytes/1024/1024 from v$block_change_tracking; FILENAME STATUS BYTES/1024/1024 ------------------------------------------------------------ ---------- --------------- +DATA_MIRROR01/ddtest/changetracking/ctf.268.971954405 ENABLED 11.0625
OR create the change tracking file in a location
- ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/mydir/rman_change_track.f' REUSE;
Disable BLOCK TRACKING
SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;
