查看用户默认表空间
select t.default_tablespace,
to_char(wmsys.wm_concat(username)) all_users
from dba_users t
group by t.default_tablespace;
ADG是否同步检查命令
是否有延时
set lin 1000 \n
column name format a13; \n
column value format a20; \n
column unit format a30; \n
column TIME_COMPUTED format a30; \n
select name,value,unit,time_computed from v$dataguard_stats where name in ('transport lag','apply lag');\r
日志数量以及是否应用
SELECT NAME,applied FROM gv$archived_log;
应用日志情况
set linesize 200 pagesize 999\r
col name format a60\r
col applied format a3\r
col completion_time format a20\r
select thread#,sequence#,standby_dest,archived,applied,status,completion_time from gv$archived_log order by 1,2;
select process, status, thread#, sequence#, block#, blocks from gv$managed_standby;
间隙日志查看
select * from v$archive_gap;
查看磁盘状态
select GROUP_NUMBER,free_mb,total_mb,FAILGROUP,disk_number,MOUNT_STATUS,mode_status,STATE,HEADER_STATUS,name name2,PATH from v$asm_disk order by 4,5;
查看数据库打开状态
select open_mode from v$database;
应用日志
alter database recover managed standby database using current logfile disconnect from session;
取消应用
alter database recover managed standby database cancel;
awr报告
普通awr报告
@?/rdbms/admin/awrrpt
ash报告
@?/rdbms/admin/ashrpt.sql
单个实例的ash
ashrpti.sql
sql
@?/rdbms/admin/awrsqrpt.sql
Oracle 11g RAC生成 AWR 报告方法
1.生成单实例 AWR 报告:
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
2.生成 Oracle RAC AWR 报告:
@$ORACLE_HOME/rdbms/admin/awrgrpt.sql
3.生成 RAC 环境中特定数据库实例的 AWR 报告:
@$ORACLE_HOME/rdbms/admin/awrrpti.sql
4.生成 Oracle RAC 环境中多个数据库实例的 AWR 报告的方法:
@$ORACLE_HOME/rdbms/admin/awrgrpti.sql
5.生成 SQL 语句的 AWR 报告:
@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
6.生成特定数据库实例上某个 SQL 语句的 AWR 报告:
@$ORACLE_HOME/rdbms/admin/awrsqrpi.sql
undefine sql_id\r
set linesize 200\r
select plan_table_output from table(dbms_xplan.display_awr('&sql_id'));\r
dblink
查询dblink
select OWNER,OBJECT_NAME,OBJECT_TYPE,LAST_DDL_TIME,TIMESTAMP,STATUS from dba_objects where object_type like '%LINK%';
dba_db_links
新建用户 创建dblink
create user piccdblink identified by piccdblink;
grant select any table to piccdblink;
GRANT CREATE SESSION TO piccdblink;
GRANT CREATE table TO piccdblink;
GRANT CREATE VIEW TO piccdblink;
GRANT CREATE TRIGGER TO piccdblink;
GRANT CREATE database link TO piccdblink;
GRANT CREATE public database link TO piccdblink;
GRANT CREATE PROCEDURE to piccdblink;
GRANT CREATE sequence to piccdblink;
GRANT CREATE synonym to piccdblink;
GRANT CREATE any directory to piccdblink;
GRANT CREATE JOB to piccdblink;
GRANT CREATE MATERIALIZED VIEW to piccdblink;
select * from user_sys_privs where privilege like upper('%DATABASE LINK%') AND USERNAME='WANGYONG';
GRANT CREATE database link TO PICCZYBX;
GRANT CREATE public database link TO PICCZYBX;
create public database link dbyllink connect to piccdblink identified by "piccdblink" USING 'DBLINK';
DROP PUBLIC DATABASE LINK jilindy;
alter public database link dbyllink connect to piccdblink identified by "E+k8^3S1e" USING 'DBLINK'
执行计划
步骤1:explain plan for "你的SQL"
步骤2:select * from table(dbms_xplan.display());
优点: 1.无需真正执行,快捷方便
缺陷: 1.没有输出运行时的相关统计信息(产生多少逻辑读,多少次递归调用,多少次物理读的情况);
2.无法判断是处理了多少行;
3.无法判断表被访问了多少次。
确实啊,这毕竟都没有真正执行又如何得知真实运行产生的统计信息。
*/
/*
步骤1:set autotrace on
步骤2:在此处执行你的SQL即可,后续自然会有结果输出
另,有如下几种方式:
set autotrace on (得到执行计划,输出运行结果)
set autotrace traceonly (得到执行计划,不输出运行结果)
set autotrace traceonly explain (得到执行计划,不输出运行结果和统计信息部分,仅展现执行计划部分)
set autotrace traceonl statistics(不输出运行结果和执行计划部分,仅展现统计信息部分)
*/
set autotrace on
SELECT *
FROM t1, t2
WHERE t1.id = t2.t1_id
AND t1.n in(18,19);
执行计划
----------------------------------------------------------
Plan hash value: 3532430033
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 8138 | 6 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | | | | |
| 2 | NESTED LOOPS | | 2 | 8138 | 6 (0)| 00:00:01 |
| 3 | INLIST ITERATOR | | | | | |
| 4 | TABLE ACCESS BY INDEX ROWID| T1 | 2 | 4056 | 2 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | T1_N | 1 | | 1 (0)| 00:00:01 |
|* 6 | INDEX RANGE SCAN | T2_T1_ID | 1 | | 1 (0)| 00:00:01 |
| 7 | TABLE ACCESS BY INDEX ROWID | T2 | 1 | 2041 | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
5 - access("T1"."N"=18 OR "T1"."N"=19)
6 - access("T1"."ID"="T2"."T1_ID")
Note
-----
- dynamic sampling used for this statement (level=2)
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
12 consistent gets
0 physical reads
0 redo size
1032 bytes sent via SQL*Net to client
416 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed
/*
--优点:1.可以输出运行时的相关统计信息(产生多少逻辑读,多少次递归调用,多少次物理读的情况);
2.虽然必须要等语句执行完毕后才可以输出执行计划,但是可以有traceonly开关来控制返回结果不打屏输出。
--缺陷:1.必须要等到语句真正执行完毕后,才可以出结果;
2.无法看到表被访问了多少次。
----方法3(statistics level=all的方式)
/*
步骤1:alter session set statistics_level=all ;
步骤2:在此处执行你的SQL
步骤3:select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
另注:
1. 如果你用 /*+ gather_plan_statistics */的方法,可以省略步骤1,直接步骤2,3。
2. 关键字解读:
Starts为该sql执行的次数。
E-Rows为执行计划预计的行数。
A-Rows为实际返回的行数。A-Rows跟E-Rows做比较,就可以确定哪一步执行计划出了问题。
A-Time为每一步实际执行的时间(HH:MM:SS.FF),根据这一行可以知道该sql耗时在了哪个地方。
Buffers为每一步实际执行的逻辑读或一致性读。
Reads为物理读。
OMem:当前操作完成所有内存工作区(Work Aera)操作所总共使用私有内存(PGA)中工作区的大小,
这个数据是由优化器统计数据以及前一次执行的性能数据估算得出的
1Mem:当工作区大小无法满足操作所需的大小时,需要将部分数据写入临时磁盘空间中(如果仅需要写入一次就可以完成操作,
就称一次通过,One-Pass;否则为多次通过,Multi_Pass).该列数据为语句最后一次执行中,单次写磁盘所需要的内存
大小,这个由优化器统计数据以及前一次执行的性能数据估算得出的
User-Mem:语句最后一次执行中,当前操作所使用的内存工作区大小,括号里面为(发生磁盘交换的次数,1次即为One-Pass,
大于1次则为Multi_Pass,如果没有使用磁盘,则显示OPTIMAL)
OMem、1Mem为执行所需的内存评估值,0Mem为最优执行模式所需内存的评估值,1Mem为one-pass模式所需内存的评估值。
0/1/M 为最优/one-pass/multipass执行的次数。Used-Mem耗的内存
*/
set autotrace off
alter session set statistics_level=all ;
SELECT *
FROM t1, t2
WHERE t1.id = t2.t1_id
AND t1.n in(18,19);
select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------------------
SQL_ID 1a914ws3ggfsn, child number 0
-------------------------------------
SELECT * FROM t1, t2 WHERE t1.id = t2.t1_id AND t1.n in(18,19)
Plan hash value: 3532430033
-----------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-----------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 2 |00:00:00.01 | 12 |
| 1 | NESTED LOOPS | | 1 | | 2 |00:00:00.01 | 12 |
| 2 | NESTED LOOPS | | 1 | 2 | 2 |00:00:00.01 | 10 |
| 3 | INLIST ITERATOR | | 1 | | 2 |00:00:00.01 | 5 |
| 4 | TABLE ACCESS BY INDEX ROWID| T1 | 2 | 2 | 2 |00:00:00.01 | 5 |
|* 5 | INDEX RANGE SCAN | T1_N | 2 | 1 | 2 |00:00:00.01 | 3 |
|* 6 | INDEX RANGE SCAN | T2_T1_ID | 2 | 1 | 2 |00:00:00.01 | 5 |
| 7 | TABLE ACCESS BY INDEX ROWID | T2 | 2 | 1 | 2 |00:00:00.01 | 2 |
-----------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
5 - access(("T1"."N"=18 OR "T1"."N"=19))
6 - access("T1"."ID"="T2"."T1_ID")
Note
-----
- dynamic sampling used for this statement (level=2)
已选择29行。
--优点:1.可以清晰的从STARTS得出表被访问多少。
2.可以清晰的从E-ROWS和A-ROWS中得到预测的行数和真实的行数,从而可以准确判断Oracle评估是否准确。
3.虽然没有专门的输出运行时的相关统计信息,但是执行计划中的BUFFERS就是真实的逻辑读的多少
--缺陷:1.必须要等到语句真正执行完毕后,才可以出结果。
2.无法控制记录输屏打出,不像autotrace有 traceonly 可以控制不将结果打屏输出。
3.看不出递归调用的次数,看不出物理读的多少(不过逻辑读才是重点)
----方法4(知道sql_id后,直接带入的方式,简单,就步骤1)
步骤1: select * from table(dbms_xplan.display_cursor('&sq_id')); (该方法是从共享池里得到)
注:
1. 还有一个方法,select * from table(dbms_xplan.display_awr('&sq_id'));(这是awr性能视图里获取到的)
2. 如果有多执行计划,可以用类似方法查出
select * from table(dbms_xplan.display_cursor('cyzznbykb509s',0));
select * from table(dbms_xplan.display_cursor('cyzznbykb509s',1));
--优点:1.知道sql_id立即可得到执行计划,和explain plan for 一样无需执行;
2.可以得到真实的执行计划。(停,等等,啥真实的,刚才这几个套路中,还有假的执行计划的吗?)
--缺陷 1.没有输出运行时的相关统计信息(产生多少逻辑读,多少次递归调用,多少次物理读的情况);
2.无法判断是处理了多少行;
3.无法判断表被访问了多少次。
5. 10046 trace跟踪
Step1:alter session set events '10046 trace name context forever,level 12'; (开启跟踪)
Step2:执行sql
Step3:alter session set events '10046 trace name context off'; (关闭跟踪)
Step4:步骤4:找到跟踪后产生的文件
Step5:tkprof trc文件 目标文件 sys=no sort=prsela,exeela,fchela (格式化命令)
SQL> set autot off
SQL> alter session set statistics_level=typical;
Session altered.
SQL> alter session set events '10046 trace name context forever,level 12';
Session altered.
SQL> select count(*) from test;
COUNT(*)
----------
7
SQL> alter session set events '10046 trace name context off';
Session altered.
SQL> select d.value
|| '/'
|| LOWER (RTRIM(i.INSTANCE, CHR(0)))
|| '_ora_'
|| p.spid
|| '.trc' trace_file_name
from (select p.spid
from v$mystat m,v$session s, v$process p
where m.statistic#=1 and s.sid=m.sid and p.addr=s.paddr) p,
(select t.INSTANCE
FROM v$thread t,v$parameter v
WHERE v.name='thread'
AND(v.VALUE=0 OR t.thread#=to_number(v.value))) i,
(select value
from v$parameter
where name='user_dump_dest') d;
TRACE_FILE_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/ora12c/ora12c/trace/ora12c_ora_12195.trc
SQL> host
[oracle@ora12c ~]$ tkprof /u01/app/oracle/diag/rdbms/ora12c/ora12c/trace/ora12c_ora_12195.trc /home/oracle/10046.txt sys=no sort=prsela,exeela,fchela
TKPROF: Release 12.1.0.1.0 - Development on Fri Jan 20 08:22:25 2017
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
SQL ID: 7b2twsn8vgfsc Plan Hash: 784602781
select count(*)
from
test
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 3 3 2 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 2 0.00 0.00 4 66 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.00 0.00 7 69 2 1
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 103
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
1 1 1 SORT AGGREGATE (cr=66 pr=4 pw=0 time=298 us)
7 7 7 PARTITION RANGE ALL PARTITION: 1 3 (cr=66 pr=4 pw=0 time=397 us cost=39 size=0 card=11)
7 7 7 TABLE ACCESS FULL TEST PARTITION: 1 3 (cr=66 pr=4 pw=0 time=290 us cost=39 size=0 card=11)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
db file sequential read 4 0.00 0.00
SQL*Net message to client 2 0.00 0.00
db file scattered read 1 0.00 0.00
SQL*Net message from client 2 7.03 7.03
优点:a. 可以看出SQL语句对应的等待事件
b. 如果SQL语句中有函数调用,SQL中有SQL,将会都被列出,无处遁形。
c. 可以方便的看出处理的行数,产生的物理逻辑读。
d. 可以方便的看出解析时间和执行时间。
e. 可以跟踪整个程序包
缺陷: a. 步骤繁琐,比较麻烦
b. 无法判断表被访问了多少次。
c. 执行计划中的谓词部分不能清晰的展现出来。
第六种:awrsqrpt.sql
/*
步骤1:@?/rdbms/admin/awrsqrpt.sql
步骤2:选择你要的断点(begin snap和end snap)
步骤3:输入要查看的sql_id
*/
10053事件分析
https://www.cnblogs.com/youngerger/p/8746071.html
10046事件分析
https://www.cnblogs.com/youngerger/p/8746021.html
select table_name,column_name,hidden_column from dba_tab_cols where table_name='PICC_GIFT_INFO';
加盘
ls -l /dev/rhdiskxx
grid
sqlplus / as sysasm
要添加的裸盘
set lines 300
col path for a30
col FAILGROUP for a10
col name2 for a20
select GROUP_NUMBER,OS_MB,free_mb,total_mb,FAILGROUP,disk_number, MOUNT_STATUS,mode_status,STATE,HEADER_STATUS,name name2,PATH from v$asm_disk order by 5,6;
查看磁盘空间
select GROUP_NUMBER,NAME,TYPE,STATE,total_mb,free_mb,
round((free_mb/total_mb)*100,2)||'%' pct_free from v$asm_diskgroup;
加盘
alter diskgroup DG1 add disk '/dev/mapper/asm8','/dev/mapper/asm9','/dev/mapper/asm10';
alter diskgroup DG1 add disk '/dev/rhdisk200';
alter diskgroup DG1 add disk '/dev/rhdisk201';
alter diskgroup DG1 add disk '/dev/rhdisk202';
alter diskgroup DG1 add disk '/dev/rhdisk203';
alter diskgroup &diskgroup_name add disk '/dev/mapper/asm9';
alter diskgroup ARCH add disk '/dev/raw/raw7';
alter diskgroup data1 add disk '/dev/raw/raw8';
alter diskgroup data1 add disk '/dev/raw/raw9';
alter diskgroup data1 add disk '/dev/raw/raw10';
alter diskgroup data1 add disk '/dev/raw/raw11';
alter diskgroup data1 add disk '/dev/raw/raw12';
查看磁盘空间
select GROUP_NUMBER,NAME,TYPE,STATE,total_mb,free_mb,
round((free_mb/total_mb)*100,2)||'%' pct_free from v$asm_diskgroup;
平衡
ALTER DISKGROUP DATA REBALANCE POWER 10;
平衡时间
set lines 300 pages 1000
col ERROR_CODE for a10
select * from v$asm_operation;
alter diskgroup arch add disk '/dev/raw/raw7';
ALTER DISKGROUP arch REBALANCE POWER 10;
alter diskgroup arch drop disk 'ARCH_0000';
ALTER DISKGROUP arch REBALANCE POWER 10;
alter diskgroup DATA add disk '/dev/raw/raw8','/dev/raw/raw9';
ALTER DISKGROUP DATA REBALANCE POWER 10;
alter diskgroup DATA drop disk 'DATA_0000','DATA_0001';
ALTER DISKGROUP DATA REBALANCE POWER 10;
GM4A-RAC1:/dev/raw$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 201b810a92ff4fa7bfccde18ee5e996c (/dev/raw/raw6) [OCR]
2. ONLINE 8cec4c662ad64fd7bf9408c17ab5e3a4 (/dev/raw/raw5) [OCR]
3. ONLINE 59fbe95800b94f8bbfd6752e84e47f66 (/dev/raw/raw4) [OCR]
Located 3 voting disk(s).
alter diskgroup OCR add disk '/dev/raw/raw10','/dev/raw/raw11','/dev/raw/raw12';
ALTER DISKGROUP OCR REBALANCE POWER 10;
alter diskgroup OCR drop disk 'OCR_0000','OCR_0001','OCR_0002';
ALTER DISKGROUP OCR REBALANCE POWER 10;




