|
Size: 13057
Comment:
|
Size: 13054
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 27: | Line 27: |
| where owner = 'OA2DW' | where owner = 'OA' |
Contents
-
Some usefull TIPS
- count tables
- Slow queries - Top 10
- Script to Report Frequency of Log Switches
- 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
- DBMS jobs scheduler
Some usefull TIPS
count tables
declare
v_count integer;
begin
for r in (select table_name, owner from all_tables
where owner = 'SCHEMA_NAME')
loop
execute immediate 'select count(*) from ' || r.table_name
into v_count;
INSERT INTO STATS_TABLE(TABLE_NAME,SCHEMA_NAME,RECORD_COUNT,CREATED)
VALUES (r.table_name,r.owner,v_count,SYSDATE);
end loop;
end;select table_name,
to_number(extractvalue(xmltype(dbms_xmlgen.getxml('select count(*) c from '||owner||'.'||table_name)),'/ROWSET/ROW/C')) as count
from all_tables
where owner = 'OA'
Slow queries - Top 10
This script will return you information about the 10 queries with the highest avarage execution time. -- By ArthurSens
select * from
(
select
sql_id,
elapsed_time,
elapsed_time/executions avg_elapsed,
cpu_time/executions avg_cpu,
sql_text
from v$sql
order by avg_elapsed desc
)
where rownum < 11
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;
DBMS jobs scheduler
http://www.dba-oracle.com/t_dbms_job_scheduler.htm
当然是用schedule更好, schedule的功能强大的多, 你如果是第一次用这个, 建议装个pl/sql developer, 在这里面新建schedule, 会让你很快上手, 一开始就直接写语句, 容易让人发晕, 而且pl/sql developer里面新建, 修改, 删除等操作都可以看到对应的语句, 这样学习起来效果很好.
等基本玩熟之后, 再云找些理论知识来看, 这样就OK了.
https://blog.csdn.net/vic_qxz/article/details/52874553?locationNum=4&fps=1
grant create job to orace_user1; grant manage scheduler to orace_user1; SQL> GRANT CREATE JOB TO gzdt11bim; Grant succeeded. SQL> grant execute on DBMS_SCHEDULER to gzdt11bim; Grant succeeded. SQL> GRANT EXECUTE ON DBMS_JOB TO USER;
