ORACLE_button


DEFAULT
--format
set linesize 200
set pagesize 200
set long 5000
col table_name for a30
col username for a30
col index_name for a30
col name for a30
col file_name for a50
col segment_name for a30
col owner for a20
col object_name for a30
col program for a20
col machine for a20
col event for a40
set sqlprompt "_USER'@'_CONNECT_IDENTIFIER>"
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
set time on
set timing on

--alert
set lines 400     
col sql for a400  
select '!tail -500f ' || a.VALUE ||'/alert_'|| b.value||'.log' as "sql" from v$parameter a,v$parameter b where a.name='background_dump_dest' and b.name='instance_name';

--wait
set pagesize 2000                                                                                                                                  \n
set linesize 210                                                                                                                                   \n
col sql_id for a14                                                                                                                                 \n
col s_time for a12                                                                                                                                 \n
col status for a6                                                                                                                                  \n
col event format a30                                                                                                                               \n
col username for a14                                                                                                                               \n
col osuser for a8                                                                                                                                  \n
col p1 for 9999999                                                                                                                                 \n
col sid for 9999                                                                                                                                   \n
col p2 for 999999                                                                                                                                  \n
col p3 for 9999999999999                                                                                                                           \n
col program format a25                                                                                                                             \n
Col machine for a20                                                                                                                                \n
col serial# format 99999                                                                                                                           \n
select substr(a.program,1,25) program,a.SID,a.SERIAL#,a.USERNAME,substr(a.osuser,1,8) osuser,a.sql_id,substr(a.machine,1,20) machine,a.status,     \n
to_char(a.SQL_EXEC_START,'dd hh24:mi:ss') s_time,(case when a.STATE='WAITING' then a.event else 'CPU' end) event                                   \n    
from gv$session a,gv$session_wait b                                                                                                                \n      
where a.sid=b.sid and status = 'ACTIVE' and not ( a.type = 'BACKGROUND' and a.state='WAITING'                                                      \n    
and a.wait_class='Idle')and a.username is not null and a.SQL_ID is not null order by a.program,a.sid,a.sql_id;                                     \n    

--queryPDB
set line 200                                                  
col name for a20                                              
select con_id, dbid, guid, name , open_mode from v$pdbs;      
alter session set container=&PDBNAME;

alter pluggable database FASLCS open;
ALTER PLUGGABLE DATABASE all save STATE instances=all;

--tempwait
set pagesize 2000                   
set linesize 210                    
col sql_id for a14                  
col s_time for a12                  
col status for a6                   
col event format a30                
col username for a14                
col osuser for a8                   
col p1 for 9999999                  
col sid for 9999                    
col p2 for 999999                   
col p3 for 9999999999999            
col program format a25              
Col machine for a20                 
col serial# format 99999            
select substr(a.program,1,25) program,a.SID,a.SERIAL#,a.USERNAME,substr(a.osuser,1,8) osuser,a.sql_id,substr(a.machine,1,20) machine,a.status,  
to_char(a.SQL_EXEC_START,'dd hh24:mi:ss') s_time,(case when a.STATE='WAITING' then a.event else 'CPU' end) event                                         
from v$session a,v$session_wait b                                                                                                                        
where a.sid=b.sid and status = 'ACTIVE' and not ( a.type = 'BACKGROUND' and a.state='WAITING'                                                            
and a.wait_class='Idle')and a.username is not null and a.SQL_ID is not null order by a.program,a.sid,a.sql_id;                                           

--hh
select substr(a.program,1,25) program,a.SID,a.SERIAL#,a.USERNAME,substr(a.osuser,1,8) osuser,a.sql_id,substr(a.machine,1,20) machine,a.status,  to_char(a.SQL_EXEC_START,'dd hh24:mi:ss') s_time,a.LAST_CALL_ET/60/60 hh ,(case when a.STATE='WAITING' then a.event else 'CPU' end) event                                         from v$session a,v$session_wait b                                                                                                                        where a.sid=b.sid and status = 'ACTIVE' and not ( a.type = 'BACKGROUND' and a.state='WAITING'                                                            and a.wait_class='Idle')and a.username is not null and a.SQL_ID is not null order by a.program,a.sid,a.sql_id;

--等待对象查询

select a.program,a.SID,a.SERIAL#,a.USERNAME,a.sql_id,a.machine,a.status,a.SQL_EXEC_START,a.LAST_CALL_ET,b.object_name,a.event
from gv$session a ,dba_objects b
where a.ROW_WAIT_OBJ#=b.object_id and a.status='ACTIVE';

--连接数
select INST_ID,username,status ,count(*) from gv$session where username is not null group by inst_id,username,status order by 1,2,3;

--当前会话活跃对象
--非后台空闲等待进程活跃会话正在执行的存储过程
set pagesize 2000                                                                                                 
set linesize 210                                                                                                  
col sql_id for a14                                                                                                
col s_time for a12                                                                                                
col status for a8                                                                                                 
col event format a30                                                                                              
col username for a14                                                                                              
col osuser for a8                                                                                                 
col p1 for 9999999                                                                                                
col sid for 9999                                                                                                  
col p2 for 999999                                                                                                 
col p3 for 9999999999999                                                                                          
col program format a25                                                                                            
Col machine for a20                                                                                               
col serial# format 99999                                                                                          
col OBJECT_NAME for a33                                                                                           
select substr(b.program,1,25) program ,b.sid,b.serial#,b.username,ob.object_name,               
substr(b.osuser,1,8) osuser,b.sql_id,substr(b.machine,1,20) machine,                                              
to_char(b.SQL_EXEC_START,'dd hh24:mi:ss') s_time ,                                                       
(case when b.STATE='WAITING' then b.event else 'CPU' end) event                                                   
from v$session b ,DBA_OBJECTS OB                                                                 
where b.status = 'ACTIVE'                                                                         
and ob.object_id=b.PLSQL_ENTRY_OBJECT_ID
and not                                                                                                           
( b.type = 'BACKGROUND' and b.state='WAITING' and  b.wait_class='Idle' )                                          
and b.username is not null                                                                                        
Order by  program,sid,sql_id;    

##obj
--编译失效对象
--conn user/passwd 
select 'alter ' ||decode(object_type, 'PACKAGE BODY', 'PACKAGE', object_type) || ' ' || OBJECT_NAME || decode(object_type, 'PACKAGE BODY',' compile body ; ', ' compile; ') from user_objects where status <> 'VALID' AND OBJECT_TYPE NOT LIKE 'JAVA%';

--dba_object
col STATUS for a10 
select OWNER ,OBJECT_NAME,OBJECT_TYPE,STATUS,CREATED,LAST_DDL_TIME  from dba_objects where OWNER='&OWNER' and OBJECT_NAME='&OBJECT_NAME';

--dba_segments
col TABLESPACE_NAME for a20  
col SEGMENT_TYPE for a20     
select OWNER,SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,BYTES/1024/1024/1024 G from dba_segments where SEGMENT_NAME='&SEGMENT_NAME' and OWNER='&OWNER';

--dba_indexes
col TABLE_NAME for a20       
col TABLE_OWNER for a20      
col STATUS for a10           
select OWNER,INDEX_NAME,TABLE_OWNER,TABLE_NAME,STATUS,degree,TABLESPACE_NAME from dba_indexes where owner='&OWNER' and TABLE_NAME='&TABLE_NAME';    

--dba_ind_columns
set line 200
col col for a50
col index_name for a40
select index_name ,listagg(column_name,',') within group(order by column_position) as col
from dba_ind_columns where
 table_name = '&tname'group by index_name;

--dba_tab_col_statistics
col table_name for a30
col column_name for a30
select table_name,column_name,num_distinct,last_analyzed,density,histogram from dba_tab_col_statistics where owner='&OWNER' and table_name='&TAB' order by 1;

--tab_ind
set lines 199                                                                                                         
col table_owner for a15                                                                                               
col index_owner for a15                                                                                               
col table_name for a30                                                                                                
col index_name for a30                                                                                                
col UNIQUENESS for a10                                                                                                
col partitioned for a5                                                                                                
col column_name for a43                                                                                               
select d.table_owner,d.owner index_owner,d.table_name,d.index_name,d.UNIQUENESS,d.partitioned,VISIBILITY,   
          listagg(i.column_name,',') within group (order by i.column_position) column_name                            
               from dba_indexes d,dba_ind_columns i                                                                        
          where d.table_name=upper('&tname')                                                                          
          and d.owner=i.index_owner                                                                                   
          and d.index_name=i.index_name                                                                               
          and d.table_name=i.table_name                                                                               
          and d.table_owner=i.table_owner                                                                             
          group by d.table_owner,d.owner,d.table_name,d.index_name,d.UNIQUENESS,d.partitioned,VISIBILITY;             


##sql优化
--sql性能
select
last_active_time latime,
child_number chdnum,
executions execs,
fetches,
rows_processed rows_pro,
buffer_gets/executions getperexec,
disk_reads/executions diskperexec,
cpu_time/executions/1000 "CPU_TIME(ms)",
elapsed_time/executions/1000 "ELAP_TIME(ms)",
rows_processed/executions rowperexec
from v$sql where sql_id='&sql_id' ;

--会话中PGA的使用情况
select s.SID,s.SERIAL#,s.USERNAME,s.STATUS,s.SQL_ID,p.PID,p.SPID,p.USERNAME,p.PGA_USED_MEM/1024/1024 PUSEDM ,p.PGA_ALLOC_MEM/1024/1024 PALLOCM ,p.PGA_MAX_MEM/1024/1024 PMAXM
from v$session s,v$process p where  s.paddr=p.addr and s.username is not null and s.status ='ACTIVE'  ;



--执行计划
--dbms_xplan.display_awr                                                                        
select * from table(dbms_xplan.display_awr('&sql',format=>'PEEKED_BINDS'));                     
                                                                                                
--display_cursor                                                                                
--dbms_xplan之display_cursor函数的使用:执行计划                                                 
--usage1:                                                                                      
--set line 200                                                                                  
--set pagesize 999                                                                              
--select * from table(dbms_xplan.display_cursor(null,null,'advanced'));                         
                                                                                                
--usage2:                                                                                      
---select * from table(dbms_xplan.display_cursor('&sqlid',null,'PEEKED_BINDS'))                 
--select * from table(dbms_xplan.display_cursor('&SQL_IDorSQL_HASH_VALUE',0,'advanced'));       
                                                                                                
--usage3:                                                                                      
--set pagesize 200                                                                              
--set line 200                                                                                  
--set autotrace off                                                                             
--alter session set statistics_level=all ;                                                      
--select /*+ GATHER_PLAN_STATISTICS */ XXX from dual;                                           
--select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));                    
--有时候获取不到,需要set serveroutput off   

--monitor 
sql monito实时获取执行sql的执行计划:delete/*+monitor */   
delete  /*+monitor */ from T_GROUP_PRODUCT   where  item_id in('516647203'); 
set long 50000 longc 100000  linesize 200 pagesize 10000
select dbms_sqltune.report_sql_monitor(sql_id => 'f2wb5vkx7nbrc' , type => 'text') from dual;
                                                   
                                                                                                
--usage4:                                                                                      
--@?/rdbms/admin/awrsqrpt.sql                                                                   
                                                                                                
--usage5:                                                                                      
--sql10.sql                                                                                     


--awrc
exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();

--awr_class
--rpt--@?/rdbms/admin/addmrpt
--@?/rdbms/admin/awrrpt.sql 
--对比--@?/rdbms/admin/awrddrpt.sql--@?/rdbms/admin/ashrpt.sql

--db_time
set linesize 200 pagesize 200                                                                     
col DB_CPU_s for 999999                                                                           
col DB_TIME_s for 99999                                                                           
col end_time for a20                                                                              
select INSTANCE_NUMBER, SNAP_ID,to_char(END_INTERVAL_TIME,'yyyy-mm-dd hh24:mi') end_time,         
round(DB_CPU/60/1000/1000) DB_CPU_s , round(DB_TIME/60/1000/1000) DB_TIME_s                       
from                                                                                              
( select s.instance_number,s.snap_id,s.stat_name ,st.BEGIN_INTERVAL_TIME, st.END_INTERVAL_TIME,   
value-lag(value) over (partition by s.stat_name order by s.snap_id) value                         
from dba_hist_sys_time_model s,dba_hist_snapshot st where stat_name in ('DB CPU','DB time')       
and s.instance_number=st.instance_number                                                          
and s.instance_number=1                                                                           
and s.snap_id=st.snap_id                                                                          
)                                                                                                 
pivot ( sum(value) for stat_name in ('DB CPU' as DB_CPU,'DB time' as DB_time) )                   
order by snap_id;                                                                                 

--io
set linesize 200 pagesize 200 
                                                                                                                                    col end_time for a20          
                                                                                                                                    select INSTANCE_NUMBER, SNAP_ID, to_char(END_INTERVAL_TIME,'yyyy-mm-dd hh24:mi') end_time,                                                                        round(REDO_SIZE/1024/1024) REDO_SIZE_M, round(LOGICAL_READS/8/1024) LOGICAL_READS_M, round(PHYSICAL_READS/8/1024) PHYSICAL_READS_M,round(physical_writes/8/1024)  physical_writes_M from                                                                                                                                                              (                                                                                                                                                                 select s.instance_number,s.snap_id,s.stat_name ,st.BEGIN_INTERVAL_TIME, st.END_INTERVAL_TIME,                                                                     value-lag(value) over (partition by s.stat_name order by s.snap_id) value                                                                                         from dba_hist_sysstat s,dba_hist_snapshot st where stat_name in ('redo size','session logical reads','physical reads','physical writes')                          and s.instance_number=st.instance_number                                                                                                                          and s.instance_number=1                                                                                                                                           and s.snap_id=st.snap_id                                                                                                                                          )                                                                                                                                                                 pivot ( sum(value) for stat_name in ('redo size' as redo_size ,'session logical reads' as logical_reads,'physical reads' as physical_reads,'physical writes' as   physical_writes ) ) order by snap_id;

--sql慢
--查询执行计划最慢的步骤             
select count(*),sql_plan_line_id     
from gv$active_session_history       
where sql_id='&sql_id'               
group by sql_plan_line_id            
order by 2;                          

--简易版绑执行计划
undefine bad_sqlid                                                                                              
undefine good_hash                                                                                              
declare                                                                                                         
v_hint SYS.SQLPROF_ATTR;                                                                                        
v_sql_text clob;                                                                                                
p_bad_sqlid varchar2(32) default '&&bad_sqlid';                                                                 
begin                                                                                                           
select sql_text into v_sql_text from dba_hist_sqltext where sql_id = p_bad_sqlid and rownum=1;                  
select extractvalue(value(d), '/hint') as outline_hints bulk collect                                            
  into v_hint                                                                                                   
  from xmltable('/*/outline_data/hint' passing                                                                  
                (select xmltype(other_xml) as xmlval                                                            
                   from dba_hist_sql_plan                                                                       
                  where sql_id = '&&bad_sqlid'  and plan_hash_value = '&&good_hash'                             
                    and other_xml is not null)) d;                                                              
dbms_sqltune.import_sql_profile(                                                                                
v_sql_text,v_hint,'sql_profile_&&bad_sqlid',force_match=>true,replace=>true);                                   
end;                                                                                                            
/                                                                                                                


##AddTBS
--os空间和DG
df -g
--asm存储
set pagesize 2000           
 set linesize 200            
col PATH for a40            
col name for a20            
col HEADER_STATUS for a10   
select group_number, name,state,type,total_MB / 1024 total_GB,free_mb / 1024 FREE_GB,free_mb / total_MB * 100 free_per,(case when free_mb / total_mb * 100 < 15 then '*' else '' end) care from V$ASM_DISKGROUP;
select GROUP_NUMBER,DISK_NUMBER,HEADER_STATUS,NAME,TOTAL_MB,FREE_MB,FREE_MB/TOTAL_MB*100 free_per,PATH,STATE from V$ASM_DISK WHERE GROUP_NUMBER!=0; 

--DTBS信息
SET LINESIZE 200                                  
COL FILE_NAME FOR A80                             
COL TABLESPACE_NAME FOR A30                       
COL FILE_ID FOR 9999                              
select f.FILE_ID,f.TABLESPACE_NAME,t.BIGFILE,t.BLOCK_SIZE/1024 BK,f.AUTOEXTENSIBLE,f.file_name,f.BYTES/1024/1024/1024 UG,f.MAXBYTES/1024/1024/1024 TG     
           from dba_tablespaces t,dba_data_files f 
           where t.TABLESPACE_NAME=f.TABLESPACE_NAME and
        t.TABLESPACE_NAME='&TABLESPACE_NAME';  

--DBsize
Select
DF.TOTAL/1073741824 "DataFile Size GB",
LOG.TOTAL/1073741824 "Redo Log Size GB",
CONTROL.TOTAL/1073741824 "Control File Size GB",
(DF.TOTAL + LOG.TOTAL + CONTROL.TOTAL)/ 1073741824 "Total Size GB"
from dual,
(select sum(a.bytes) TOTAL from dba_data_files a) DF,
(select sum(b.bytes) TOTAL from v$log b) LOG,
(select sum((cffsz+1)*cfbsz) TOTAL from x$kcccf c) CONTROL;

--Adddiskquery
--asm disk
set linesize 200 pagesize 2000
col diskname for a15
col group_name for a15
col DISK_NUMBER for 999
col path for a20
col FREE_GB for 99999.99
col TOTAL_GB for 99999.99
col free_percentage for 99.99
select DISK_NUMBER,B.NAME GROUP_NAME,a.name diskname,a.free_MB/1024 FREE_GB,a.TOTAL_MB/1024 TOTAL_GB,a.free_mb/a.total_mb*100 free_percentage ,a.path,A.STATE FROM V$ASM_DISK A,V$ASM_DISKGROUP B WHERE A.GROUP_NUMBER=B.GROUP_NUMBER order by b.name,DISK_NUMBER ;

--querytbs
set lines200                                                                                                                                                                                                     
col group_number for 99                                                                                                                                                                                          
col state for a15                                                                                                                                                                                                
col name for a20                                                                                                                                                                                                 
col total_gb for 999999.99                                                                                                                                                                                       
col free_gb for 999999.99                                                                                                                                                                                        
col free_percent for 99.99                                                                                                                                                                                       
col care for a5                                                                                                                                                                                                  
set linesize 131                                                                                                                                                                                                 
set pagesize 200                                                                                                                                                                                                 
set termout off                                                                                                                                                                                                  
set trimspool on                                                                                                                                                                                                 
set serveroutput on                                                                                                                                                                                              
set lines 200 pages 300                                                                                                                                                                                          
col tablespace_name for a30                                                                                                                                                                                      
select u.*,round(p.avg_use_per_day_mb,1) avg_used_per_day_mb,round((max_size_mb-size_used_mb)/p.avg_use_per_day_mb) tbs_exhaust_days,                                                                            
case when  u.MAX_FREE_RATE<20 or round((max_size_mb-size_used_mb)/p.avg_use_per_day_mb)<30 then '*'                                                                                                              
                        else null end care                                                                                                                                                                       
from (select a.tablespace_name,b.size_used_mb,a.data_size_mb,                                                                                                                                                    
         round(100-b.size_used_mb/a.data_size_mb*100) free_rate,                                                                                                                                                 
         a.max_size_mb, a.max_size_mb - b.size_used_mb free_mb,                                                                                                                                                  
         round(100-b.size_used_mb/a.max_size_mb*100) max_free_rate                                                                                                                                               
         from                                                                                                                                                                                                    
                 (select tablespace_name,round(sum(bytes/1024/1024)) data_size_mb,round(sum(case when maxbytes>bytes then maxbytes else bytes end)/1024/1024) max_size_mb                                        
         from dba_data_files group by tablespace_name) a,                                                                                                                                                        
                 (select tablespace_name,round(sum(bytes/1024/1024)) size_used_mb                                                                                                                                
         from dba_segments group by tablespace_name) b                                                                                                                                                           
         where a.tablespace_name=b.tablespace_name order by 6 desc,4 desc) u,                                                                                                                                    
         (select name,avg(use_per_day_mb)+0.0001 avg_use_per_day_mb                                                                                                                                              
                  from (select x.name,x.rdate,(x.used_blocks-lag(x.used_blocks) over (partition by name order by rdate))*y.block_size/1024/1024 use_per_day_mb                                                   
                from                                                                                                                                                                                             
                                   (select to_char(to_date(rtime,'mm/dd/yyyy hh24:mi:ss'),'yyyy-mm-dd') rdate ,name,max(tablespace_usedsize) used_blocks from dba_hist_tbspc_space_usage a,v$tablespace b        
                                where a.tablespace_id=b.ts#                                                                                                                                                      
                                group by to_char(to_date(rtime,'mm/dd/yyyy hh24:mi:ss'),'yyyy-mm-dd'),name order by name  ) x,dba_tablespaces y                                                                  
         where x.name=y.tablespace_name )                                                                                                                                                                        
                 where use_per_day_mb is not null                                                                                                                                                                
        group by name) p                                                                                                                                                                                         
where u.TABLESPACE_NAME=p.name                                                                                                                                                                                   
and u.TABLESPACE_NAME not like '%UNDO%'                                                                                                                                                                          
and u.TABLESPACE_NAME not like '%TEMP%'                                                                                                                                                                          
order by 4,7;                                                                                                                                                                                                 
--qtmptbs
col TABLESPACE_NAME for a30 
SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME, BYTES/1024/1024/1024 AS "SPACE(G)"FROM DBA_TEMP_FILES;

--stbs
SELECT a.tablespace_name,used_g,max_g,(max_g-used_g) free_g                                                                
from (select round(sum(decode(AUTOEXTENSIBLE,'YES',maxbytes,bytes)/1024/1024/1024),2) MAX_G,tablespace_name                
from dba_data_files group by tablespace_name) a,(select ROUND(sum(bytes)/1024/1024/1024,2) USED_G,tablespace_name          
from dba_segments group by tablespace_name) b where a.tablespace_name=b.tablespace_name and a.tablespace_name in('&_tbs'); 

--表空间使用率
select * from DBA_TABLESPACE_USAGE_METRICS;

--sttbs
SELECT TABLESPACE_NAME,BYTES/1024/1024/1024 AS "SPACE(G)"FROM DBA_TEMP_FILES T,dba_users U 
where T.TABLESPACE_NAME=U.TEMPORARY_TABLESPACE AND U.username in ('&USER_NAME');           

--某tbs日增量
select t.name,
       tablespace_id,                                                  
       trunc(to_date(rtime,'mm/dd/yyyy hh24:mi:ss')) datetime,                             
       round(max(tablespace_usedsize*c.BLOCK_SIZE/1024/1024),0) used_size_GB,
       (round(max(tablespace_usedsize*c.BLOCK_SIZE/1024/1024),0)-lag(round(max(tablespace_usedsize*c.BLOCK_SIZE/1024/1024),0)) over(order by trunc(to_date(rtime,'mm/dd/yyyy hh24:mi:ss')))) inc_GB
          from  dba_hist_tbspc_space_usage d,v$tablespace t,dba_tablespaces c                                   
         where trunc(to_date(rtime,'mm/dd/yyyy hh24:mi:ss'),'HH') > trunc(sysdate - 10) 
         and t.ts#=d.tablespace_id and t.name = c.TABLESPACE_NAME
         and t.name=upper('&tablespace_name')
         group by t.name,tablespace_id,trunc(to_date(rtime,'mm/dd/yyyy hh24:mi:ss'))
         order by 2,3; 
         
         
 --TBS每小时增长情况
 select a.name, b.*                                                             
  from v$tablespace a,                                                         
       (select tablespace_id,                                                  
               trunc(to_date(rtime,'mm/dd/yyyy hh24:mi:ss'),'HH') datetime,                             
               round(max(tablespace_usedsize * 8 / 1024),0)                    
               used_size_MB                                                    
          from  dba_hist_tbspc_space_usage                                     
         where trunc(to_date(rtime,'mm/dd/yyyy hh24:mi:ss'),'HH') >                 
               trunc(sysdate - 2)                                             
         group by tablespace_id,                                               
                  trunc(to_date(rtime,'mm/dd/yyyy hh24:mi:ss'),'HH')                
         order by tablespace_id,                                               
                  trunc(to_date(rtime,'mm/dd/yyyy hh24:mi:ss'),'HH')) b             
 where a.ts# = b.tablespace_id                                                 
 and a.name=upper('&TABLESPACE'); 
 
 
--addbak
--ALTER TABLESPACE ATS001_IDX ADD DATAFILE '+DATA' SIZE 30G;
--alter database datafile &filenum AUTOEXTEND ON NEXT 1G MAXSIZE unlimited;
--alter database tempfile 1 resize &sizeg;
--ALTER TABLESPACE TEMP ADD TEMPFILE '+DATA' SIZE 1G AUTOEXTEND ON NEXT 1G MAXSIZE unlimited;
--ALTER TABLESPACE UNDOTBS1 ADD DATAFILE '+DATA' SIZE 1m AUTOEXTEND ON NEXT 1m MAXSIZE unlimited;

--TTBS信息
SET LINESIZE 200                                      
COL FILE_NAME FOR A80                                 
COL TABLESPACE_NAME FOR A30                           
COL FILE_ID FOR 9999                                  
select                                                
      f.FILE_ID,                                      
      t.TABLESPACE_NAME,                              
      t.BIGFILE,                                      
      f.AUTOEXTENSIBLE,                               
      f.file_name,                                    
      f.BYTES/1024/1024/1024 UG,                      
      f.MAXBYTES/1024/1024/1024 TG                    
from dba_tablespaces t,DBA_TEMP_FILES f               
where t.TABLESPACE_NAME=f.TABLESPACE_NAME and         
      t.TABLESPACE_NAME='&TABLESPACE_NAME';           

--alltbsck
set linesize 200
 set pagesize 100
 col TABLESPACE_NAME for a20
 col PCT_AUTO for a10
 col TSSIZE for a10
 col TSSIZE_AUTO for a10
 col FREE_AUTO for a10
 col AVG_ADD for a10
 col USE_DAY for a10
SELECT  D.TABLESPACE_NAME, D.BIGFILE,          lpad(TRUNC(NVL(A.TS_MB, 0))|| 'M',10,' ' ) TSSIZE,          lpad(TRUNC(NVL(A.TS_MB_MAX, 0)) || 'M',10,' ' ) TSSIZE_AUTO,          lpad(TRUNC(NVL(F.FREE_MB, 0) + NVL(A.TS_MB_MAX, 0) - NVL(A.TS_MB, 0)) || 'M',10,' ' ) FREE_AUTO,          lpad(TRUNC((NVL(A.TS_MB, 0) - NVL(F.FREE_MB, 0)) / TRUNC(NVL(A.TS_MB_MAX, 0)) * 100) || '%',8,' ') PCT_AUTO,          lpad(E.AVG_ADD_M || 'M',10,' ' ) AVG_ADD,          lpad(round(TRUNC(NVL(F.FREE_MB, 0) + NVL(A.TS_MB_MAX, 0) - NVL(A.TS_MB, 0))/E.AVG_ADD_M)|| 'd',10,' ' )  USE_DAY FROM SYS.DBA_TABLESPACES D,      (SELECT TABLESPACE_NAME, SUM(BYTES) / 1024 / 1024 TS_MB,SUM(DECODE(AUTOEXTENSIBLE, 'YES', MAXBYTES, BYTES)) / 1024 / 1024 TS_MB_MAX  FROM SYS.DBA_DATA_FILES GROUP BY TABLESPACE_NAME) A,      (SELECT TABLESPACE_NAME, SUM(BYTES) / 1024 / 1024 FREE_MB FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F,      (SELECT C.TABLESPACE_NAME TABLESPACE_NAME ,MAX(C.FREE_AUTO),DECODE(ROUND(SUM(C.USED-B.USED)/COUNT(C.USED)),0,1,ROUND(SUM(C.USED-B.USED)/COUNT(C.USED))) AS AVG_ADD_M FROM             (SELECT TRUNC(GATHER_TIME) GT,TABLESPACE_NAME,USED,FREE_AUTO  FROM  DBAMONITOR.T_DB_TABLESPACE WHERE   GATHER_TIME>TO_DATE(TO_CHAR(sysdate-10,'yyyymmdd'),'yyyymmdd'))  C,              (SELECT TRUNC(GATHER_TIME) GT,TABLESPACE_NAME,USED  FROM  DBAMONITOR.T_DB_TABLESPACE WHERE   GATHER_TIME >TO_DATE(TO_CHAR(sysdate-11,'yyyymmdd'),'yyyymmdd')) B  WHERE B.TABLESPACE_NAME=C.TABLESPACE_NAME and B.GT=C.GT-1 GROUP BY   C.TABLESPACE_NAME) E  WHERE D.TABLESPACE_NAME = A.TABLESPACE_NAME(+)       AND D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)       AND D.TABLESPACE_NAME = E.TABLESPACE_NAME(+)       AND A.TABLESPACE_NAME NOT IN('SYSTEM','SYSAUX')        AND A.TABLESPACE_NAME NOT LIKE 'UNDOTBS%'       AND A.TABLESPACE_NAME NOT LIKE 'TEMP%' ORDER BY 8,5,3, 2; 
SELECT  D.TABLESPACE_NAME, D.BIGFILE,          lpad(TRUNC(NVL(A.TS_MB, 0))|| 'M',10,' ' ) TSSIZE,          lpad(TRUNC(NVL(A.TS_MB_MAX, 0)) || 'M',10,' ' ) TSSIZE_AUTO,          lpad(TRUNC(NVL(F.FREE_MB, 0) + NVL(A.TS_MB_MAX, 0) - NVL(A.TS_MB, 0)) || 'M',10,' ' ) FREE_AUTO,          lpad(TRUNC((NVL(A.TS_MB, 0) - NVL(F.FREE_MB, 0)) / TRUNC(NVL(A.TS_MB_MAX, 0)) * 100) || '%',8,' ') PCT_AUTO,          lpad(E.AVG_ADD_M || 'M',10,' ' ) AVG_ADD,          lpad(round(TRUNC(NVL(F.FREE_MB, 0) + NVL(A.TS_MB_MAX, 0) - NVL(A.TS_MB, 0))/E.AVG_ADD_M)|| 'd',10,' ' )  USE_DAY FROM SYS.DBA_TABLESPACES D,      (SELECT TABLESPACE_NAME, SUM(BYTES) / 1024 / 1024 TS_MB,SUM(DECODE(AUTOEXTENSIBLE, 'YES', MAXBYTES, BYTES)) / 1024 / 1024 TS_MB_MAX  FROM SYS.DBA_DATA_FILES GROUP BY TABLESPACE_NAME) A,      (SELECT TABLESPACE_NAME, SUM(BYTES) / 1024 / 1024 FREE_MB FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F,      (SELECT C.TABLESPACE_NAME TABLESPACE_NAME ,MAX(C.FREE_AUTO),DECODE(ROUND(SUM(C.USED-B.USED)/COUNT(C.USED)),0,1,ROUND(SUM(C.USED-B.USED)/COUNT(C.USED))) AS AVG_ADD_M FROM             (SELECT TRUNC(GATHER_TIME) GT,TABLESPACE_NAME,USED,FREE_AUTO  FROM  DBAMONITOR.T_DB_TABLESPACE WHERE   GATHER_TIME>TO_DATE(TO_CHAR(sysdate-10,'yyyymmdd'),'yyyymmdd'))  C,              (SELECT TRUNC(GATHER_TIME) GT,TABLESPACE_NAME,USED  FROM  DBAMONITOR.T_DB_TABLESPACE WHERE   GATHER_TIME >TO_DATE(TO_CHAR(sysdate-11,'yyyymmdd'),'yyyymmdd')) B  WHERE B.TABLESPACE_NAME=C.TABLESPACE_NAME and B.GT=C.GT-1 GROUP BY   C.TABLESPACE_NAME) E  WHERE D.TABLESPACE_NAME = A.TABLESPACE_NAME(+)       AND D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)       AND D.TABLESPACE_NAME = E.TABLESPACE_NAME(+)       AND A.TABLESPACE_NAME NOT IN('SYSTEM','SYSAUX')        AND A.TABLESPACE_NAME NOT LIKE 'UNDOTBS%'       AND A.TABLESPACE_NAME NOT LIKE 'TEMP%' ORDER BY 8,5,3, 2; 

##DG
--lag
set linesize 300                                                                                           
col name for a20                                                                                           
col value for a20                                                                                          
col time_computed for a30                                                                                  
select name,value,unit,time_computed from v$dataguard_stats where name in ('transport lag','apply lag');   

--v$archived_log
col name for a80 
select NAME,DEST_ID,THREAD#,SEQUENCE#,COMPLETION_TIME,REGISTRAR,APPLIED,DELETED from v$ARCHIVED_LOG where applied!='YES';

--v$database
col NAME for a20                                                                          
col OPEN_MODE for a20                                                                     
col PROTECTION_MODE for a20                                                               
col DATABASE_ROLE for a20                                                                 
col SWITCHOVER_STATUS for a20                                                             
select NAME,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,SWITCHOVER_STATUS from v$database;    

--v$managed_standby
col GROUP# for a10
select PROCESS,STATUS,CLIENT_PROCESS,GROUP#,THREAD#,SEQUENCE#,BLOCK#  from v$managed_standby;

--v$srchive_gap
select * from v$archive_gap;

--v$archive_dest_status
set linesize 200
col DEST_NAME for a30      
col STATUS for a15         
col RECOVERY_MODE for a30  
select  DEST_NAME , STATUS , RECOVERY_MODE ,ERROR from v$ARCHIVE_DEST_STATUS;

--dataguard_status
col severity for a15 
col message for a100 
col timestamp for a20 
select severity,error_code,to_char(timestamp,'DD-MON-YYYY HH24:MI:SS') "timestamp" , message from v$dataguard_status where dest_id=6;

--p__>s
recover managed standby database cancel;
alter database convert to snapshot standby;
alter database open;
select database_role,open_mode,FLASHBACK_ON from v$database;

--s__>p
--startup mount force;
--alter database convert to physical standby;
--shutdown immediate;
--startup
--alter database recover managed standby database using current logfile disconnect from session;
--select database_role,open_mode,FLASHBACK_ON  from v$database;
--开启方式
--recover managed standby database cancel;
----alter database open READ ONLY;
--alter database recover managed standby database using current logfile disconnect from session;


--v$log
col GROUP# for 999                                                                                             
 col FIRST_CHANGE# for 9999999999999999999999                                                                   
col NEXT_CHANGE# for 9999999999999999999999                                                                    
select GROUP#,THREAD#,SEQUENCE# ,MEMBERS,ARCHIVED,STATUS,FIRST_CHANGE#,NEXT_CHANGE# from v$log;                


##kill
--killsessionbysql_id
set linesize 200 pagesize 100
col kill_txt for a80
SELECT 'ALTER SYSTEM KILL SESSION '''||SID||','||SERIAL#||''';' kill_txt FROM
 V$SESSION WHERE SQL_ID='&SQL_ID';

--kill spidbysql_id
set linesize 200 pagesize 100
prompt
prompt   kill  spid by event name
prompt 
col kill_txt for a40
select /*+ rule */'kill -9  '||spid kill_txt from v$process where addr in (select paddr from v$session ss where sql_id='&sql_id');

--killspidbyevent
set linesize 200 pagesize 100
prompt
prompt   kill  spid by event name
prompt 
col kill_txt for a40
select /*+ rule */'kill -9  '||spid kill_txt from v$process where addr in (select paddr from v$session ss where type='USER' and (ss.event='&event'));

--kill -9 sid
select '!ps -ef|grep '||pro.spid ||' '|| '!kill -9 '||pro.spid  from v$session ses,v$process pro where ses.sid in( &sid ) and ses.paddr=pro.addr;

select 'alter system kill session '''||sid ||','||serial#|| ''' immediate;'   from v$session ses where ses.sid in(&sid);

--kill所有外连接
ps -ef|grep oracle|grep LOCAL=NO|grep -v grep|awk {'print $2'}|xargs kill -9

--发布
col OSUSER for a15                                                                                                      
select sid,MACHINE,OSUSER,username,EVENT,BLOCKING_INSTANCE,BLOCKING_SESSION from gv$session                             
where MACHINE='rac11g870a' and OSUSER='oracle' and PROGRAM='sqlplus@rac11g870a (TNS V1-V3)' and username='PICCPROD';    

--杀掉所有阻塞源sql
col ksql for a40 
set lines 199 
set pages 9999 
SELECT distinct
'alter system kill session '''||A.sid||','||A.serial#||',@'||A.inst_id||''' immediate;' 
FROM GV$SESSION A,GV$SESSION B 
WHERE A.SID=B.FINAL_BLOCKING_SESSION 
AND A.USERNAME IS NOT NULL 
AND A.INST_ID=B.INST_ID 
AND A.AUDSID<>B.AUDSID 
and a.program not like '%sqlplus%' 
; 

--bysql_id
select 'alter system kill session '''||a.SID||','||a.SERIAL#||''' immediate;'       from v$session a,v$session_wait b                                                                                                                        where a.sid=b.sid and status = 'ACTIVE' and not ( a.type = 'BACKGROUND' and a.state='WAITING'                                                            and a.wait_class='Idle')and a.username is not null and a.SQL_ID ='&sql_id' order by a.program,a.sid,a.sql_id;  

--byuserkillparallel
--根据用户杀并行会话
select 'alter system kill session '''||b.sid||','||b.serial#||',@'||b.inst_id||''' immediate;' ksql    from gv$session a,gv$px_session bwhere a.inst_id=b.inst_id and a.sid=b.sid and a.serial#=b.serial# and b.sid=b.qcsidand A.username ='&username' order by qcsid;

##LOCK
--QLOCKINFO
set pagesize 900 linesize 900                                                                  
col sid for 99999                                                                              
col serial# for 99999                                                                          
col username for a15                                                                           
col SCHEMANAME for a15                                                                         
col osuser for a10                                                                             
col MACHINE for a15                                                                            
col  terminal for a10                                                                          
col owner for a10                                                                              
col  PROGRAM for a25                                                                           
col  object_name for a15                                                                       
col  object_type for a10                                                                       
select sid,serial#,username,SCHEMANAME,osuser,MACHINE,terminal,PROGRAM,owner,object_name,object_type,o.object_id,s.WAIT_TIME,l.LOCKED_MODE                    
from dba_objects o,v$locked_object l,v$session s                                               
where o.object_id=l.object_id and s.sid=l.session_id;

--gbinfo
set linesize 200 pagesize 100
col sid for 9999
col object_name for a20
col sqltext for a46
col event for a30
col machine for a10
col program for a20
col username for a10
with sessions as 
    (select /*+materialize*/ sid,blocking_session,blocking_instance,row_wait_obj#,sql_id,event,username,sql_child_number,machine from v$session )
select lpad(' ',level) || sid sid,blocking_instance b_inst,object_name,substr(sql_text,1,40) sqltext,event,username,machine
from sessions s
left outer join dba_objects on (object_id=row_wait_obj#)
left outer join v$sql sql on (s.sql_id=sql.sql_id and s.sql_child_number=sql.child_number)
where sid in (select blocking_session from sessions) or blocking_session is not null
connect by prior sid=blocking_session
start with blocking_session is null;

--getblockingsession
set linesize 300 pagesize 50 
col bs for 9999              
col wc for 99                
col sql_id for a13           
col username for a13         
col event for a25            
col schemaname for a17       
col machine for a20          
col program for a35          
select     inst_id,sid,serial#,username,schemaname,sql_id,machine,program,event,blocking_instance bins,blocking_session bs,wait_class# wc
    from gv$session                                                                                                               
where blocking_session is not null  order by  blocking_session,blocking_instance;                                                 

--getlockbyuser&obj
set linesize 200 pagesize 100
col oracle_username for a20
col os_user_name for a10
select
xidusn,xidslot,xidsqn,object_id,session_id,oracle_username,os_user_name,process,
decode(locked_mode,0, 'none',1, 'null',2, 'row share',3, 'row excl',4, 'share',5, 's/row excl',6, 'exclusive',locked_mode) lmode 
from v$locked_object 
where object_id in ( select object_id from dba_objects where owner=upper('&Owner') and object_name=upper('&Object_Name')) order by object_id,session_id;

--getlckbysid
set linesize 200 pagesize 100
col lmode for a20
col request for a10
select 
addr,kaddr,sid,type,id1,id2,decode(lmode,0, 'none',1, 'null',2, 'row share',3, 'row excl',4, 'share',5, 's/row excl',6, 'exclusive',lmode) lmode,decode(request,0, 'none',1, 'null',2, 'row share',3, 'row excl',4, 'share',5, 's/row excl',6, 'exclusive',request) request,ctime,block
from v$lock where sid=&SESSION_ID;

--v$lock&v$session
col REQUEST for 9                                                                     
col LMODE for 9                                                                       
SELECT L.SID,L.TYPE,L.ID1,L.LMODE,L.REQUEST,L.BLOCK,S.USERNAME,S.MACHINE,S.EVENT      
FROM V$LOCK L,V$SESSION S                                                             
WHERE L.SID = S.SID AND                                                               
      L.TYPE IN ('TM','TX') AND                                                       
      L.SID IN                                                                        
            (SELECT SID FROM V$LOCK WHERE REQUEST > 0                                 
             UNION SELECT SID FROM V$LOCK WHERE LMODE > 0 );                          


--阻塞链
col SQL_ID for a20                                                                                         
col STATUS for a10                                                                                         
col INST_ID for 99                                                                                         
col TREE for a30                                                                                           
select *                                                                                                   
from (select a.inst_id, a.sid, a.serial#,                                                                  
              a.sql_id,                                                                                    
              a.event,                                                                                     
              a.status,                                                                                    
              connect_by_isleaf as isleaf,                                                                 
              sys_connect_by_path(a.SID||'@'||a.inst_id, ' <- ') tree,                                     
              level as tree_level                                                                          
         from gv$session a                                                                                 
        start with a.blocking_session is not null                                                          
       connect by (a.sid||'@'||a.inst_id) = prior (a.blocking_session||'@'||a.blocking_instance))          
where isleaf = 1                                                                                           
order by tree_level asc;                                                                                   

--某个会话信息
set linesize 600 pagesize 400
col username for a20
col program for a30
col machine for a20
col client_info for a20
col event for a30
col OSUSER for a10
col sql_id for a20
col  status for a8
col event for a20
select inst_id,sid,
       serial#,
       username,
       status,
       osuser,
       machine,
       substr(program,1,10) program,
       PREV_SQL_ID,
       sql_id,
       sql_exec_start,
       --ROW_WAIT_OBJ#,ROW_WAIT_FILE#,ROW_WAIT_BLOCK#,ROW_WAIT_ROW#,
       client_info,
       logon_time,
       round(last_call_et/60) ktm,
       substr(event,1,15) event,--p1,p2,p3,
       round(seconds_in_wait/60) min
  from gv$session where sid='&sid';
  

--实时查询锁
SELECT /*+leading(D L B E C)*/                                                 
 L.SID, L.TYPE, L.ID1, L.ID2, L.LMODE, L.REQUEST, L.BLOCK,                     
 L.CTIME, B.ROW_WAIT_OBJ#, B.ROW_WAIT_FILE#, B.ROW_WAIT_BLOCK#,                
 B.ROW_WAIT_ROW#, C.SQL_TEXT, B.SQL_HASH_VALUE, B.PREV_HASH_VALUE,             
 C.PLAN_HASH_VALUE, B.TYPE UBTYPE, B.USERNAME, B.MACHINE, B.TERMINAL,          
 B.PROGRAM, B.EVENT, B.OSUSER, C.SQL_ID, B.INST_ID                             
    FROM GV$LOCK L, GV$SESSION B, GV$PROCESS E, GV$SQLSTATS C                  
 WHERE (L.ID1, L.ID2, L.TYPE) IN                                               
             (SELECT /*+unnest*/                                               
                 D.ID1, D.ID2, D.TYPE                                          
                    FROM GV$LOCK D                                             
                 WHERE D.REQUEST > 0                                           
                     AND D.TYPE NOT IN ('PR', 'KO', 'RO', 'CF','AE'))          
     AND L.SID = B.SID                                                         
     AND L.INST_ID = B.INST_ID                                                 
     AND B.INST_ID = E.INST_ID                                                 
     AND B.PADDR = E.ADDR                                                      
     AND B.INST_ID = C.INST_ID(+)                                              
     AND B.SQL_ID = C.SQL_ID(+)                                                
 ORDER BY L.ID1, L.LMODE DESC, L.REQUEST DESC;                                 

--单实例lock
select *  from (select a.sid,               a.sql_id,               a.event,               a.status,               connect_by_isleaf as isleaf,               sys_connect_by_path(SID, '<-') tree,               level as tree_level          from v$session a         start with a.blocking_session is not null        connect by nocycle a.sid = prior a.blocking_session) where isleaf = 1 order by tree_level asc;

--锁源表
--阻塞源涉及的表set linesize 200col sid for 9999col serial# for 9999col osuser for a10col oracle_username for a10col os_user_name for a10col machine for a10col object_name for a30col client_info for a30select l.session_id sid,s.serial#,s.osuser,l.locked_mode,l.oracle_username,l.os_user_name,s.machine,o.object_name,s.client_infofrom v$locked_object l,all_objects o,v$session swhere l.object_id=o.object_id and l.session_id=s.sidorder by sid,s.serial#;                                                                                                                                   
##query
--等待事件
set pagesize 2000                   
set linesize 210                    
col sql_id for a14                  
col s_time for a12                  
col status for a6                   
col event format a30                
col username for a14                
col osuser for a8                   
col p1 for 9999999                  
col sid for 9999                    
col p2 for 999999                   
col p3 for 9999999999999            
col program format a25              
Col machine for a20                 
col serial# format 99999            
select substr(a.program,1,25) program,a.SID,a.SERIAL#,a.USERNAME,substr(a.osuser,1,8) osuser,a.sql_id,substr(a.machine,1,20) machine,a.status,  
to_char(a.SQL_EXEC_START,'dd hh24:mi:ss') s_time,(case when a.STATE='WAITING' then a.event else 'CPU' end) event                                         
from gv$session a,gv$session_wait b                                                                                                                        
where a.sid=b.sid and status = 'ACTIVE' and not ( a.type = 'BACKGROUND' and a.state='WAITING'                                                            
and a.wait_class='Idle')and a.username is not null and a.SQL_ID is not null order by a.program,a.sid,a.sql_id;                                           

--v$mystat
select distinct SID from v$mystat;

##querytab
--gettabpartitioninfo
set pagesize 50
set linesize 200
col high_value for a20
col PARTITION_NAME for a30
col TABLESPACE_NAME for a10
SELECT
 COMPOSITE,PARTITION_NAME,SUBPARTITION_COUNT,HIGH_VALUE,HIGH_VALUE_LENGTH,PARTITION_POSITION,TABLESPACE_NAME,LOGGING,COMPRESSION,COMPRESS_FOR,NUM_ROWS,LAST_ANALYZED,GLOBAL_STATS,INTERVAL,SEGMENT_CREATED,USER_STATS
  FROM DBA_TAB_PARTITIONS 
WHERE TABLE_NAME=UPPER('&TABLE_NAME') AND TABLE_OWNER=UPPER('&OWNER');

--getdbsize
Select
DF.TOTAL/1073741824 "DataFile Size GB",
LOG.TOTAL/1073741824 "Redo Log Size GB",
CONTROL.TOTAL/1073741824 "Control File Size GB",
(DF.TOTAL + LOG.TOTAL + CONTROL.TOTAL)/ 1073741824 "Total Size GB"
from dual,
(select sum(a.bytes) TOTAL from dba_data_files a) DF,
(select sum(b.bytes) TOTAL from v$log b) LOG,
(select sum((cffsz+1)*cfbsz) TOTAL from x$kcccf c) CONTROL;

--db&rate
select GATHER_TIME,sum(USED/1024) SUM_G from DBAMONITOR.T_DB_TABLESPACE where GATHER_TIME >sysdate-31 and GATHER_TIME <sysdate-0 group by GATHER_TIME;

--gettabmodifyinfo
 col TABLE_OWNER for a10
 col TABLE_NAME for a30
 set linesize 400
select distinct TABLE_OWNER,TABLE_NAME,INSERTS,UPDATES,DELETES,TIMESTAMP,TRUNCATED,DROP_SEGMENTS
  from dba_tab_modifications
where table_name=UPPER('&tablename') and table_owner=UPPER('&owner') order by TIMESTAMP;

--listtabsize
col segment_name for a40
 SELECT  s.SEGMENT_NAME,SUM(s.BYTES/1024/1024/1024),t.PARTITIONED,t.COMPRESSION   FROM DBA_SEGMENTS s,dba_tables t  WHERE s.segment_name=t.table_name and s.OWNER='ODSUSER' and s.tablespace_name='ODSUSER_TBS'  group by s.segment_name,t.PARTITIONED,t.COMPRESSION order by 2 ;

--log/day
alter session set nls_date_format='yyyy-mm-dd';
select dest_id,
trunc(completion_time), 
 count(*) cnt_nu,
trunc(sum(blocks * block_size)/1024/1024/1024 ,2) G 
from v$archived_Log 
group by trunc(completion_time),dest_id
order by trunc(completion_time);

--rac/log/hour
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select trunc(completion_time,'HH'),dest_id,thread#,count(*),trunc(sum(block_size*blocks)/1024/1024/1024,2) G 
from v$archived_Log
where dest_id=1
group by trunc(completion_time,'HH'),thread#,dest_id
order by 1,2,3;

--v$recovery_file_dest
col name for a10
col used_per for a10
select name,trunc(space_limit/1024/1024/1024,2) limit_G,
trunc(SPACE_USED/1024/1024/1024,2) USED_G,
trunc(100*space_used/space_limit,2)||'%' used_per,
(case when trunc(100*space_used/space_limit,2) > 85  then '*' else '' end ) care 
from V$RECOVERY_FILE_DEST;

--总归档
col date1 for a30                                                                                                                                                                                                   
col cnt for 999999999                                                                                                                                                                                               
col GB for 99999999999999                                                                                                                                                                                           
Select to_char(completion_time,'yyyy-mm-dd') as date1,count(0) as cnt,round(sum((blocks *block_size)/1024/1024/1024)) as GB from v$archived_log group by to_char(completion_time,'yyyy-mm-dd') order by date1 desc; 


##sql
--Getsqlbysid
SELECT  sql_id, sql_text    FROM v$sqltext a   WHERE a.hash_value = (SELECT sql_hash_value                           FROM v$session b                          WHERE b.SID = '&sid')ORDER BY piece ASC;

--getsqlbysqlsid
set long 88888
col sql_fulltext for a8888
set lines 8888
select sql_fulltext from v$sql where sql_id = '&sqlid' and rownum = 1;

--getsqlbypid
Select s.Sid, s.Status, q.Sql_Text
From V$session s, V$sqltext q
Where s.Sql_Hash_Value = q.Hash_Value 
And s.Sql_Address = q.Address And
s.Sid In (Select s.Sid From V$session s, V$process p Where s.Paddr = p.Addr And  p.Spid = '&pid' ) Order By q.Piece;

--getfullqqltextbysqlid
set pagesize 2000
select dbms_lob.substr(SQL_FULLTEXT) 
from v$sqlarea where sql_id='&sql_id';

--getDDL
--PROCEDURE ddl
--select text from all_source where name = '&PROCEDURE_NAME' and OWNER='&own' order by line;
set long 10000 pagesize 100
select dbms_metadata.get_ddl('&OBJECT_TYPE','&OBJECT_NAME','&OBJECT_OWNER') ddl_text from dual;

--查询实例绑定变量
col sql_id for a15
 col name for a10
 col datatype_string for a13
 col last_captured for a24
 col value_string for a30
 select instance_number,sql_id,name, datatype_string,last_captured,value_string from dba_hist_sqlbind where sql_id='&sql_id' and rownum<10 order  by LAST_CAPTURED,POSITION;

--hist_sql_stat(执行计划)
set lines 155
col execs for 999,999,999
col avg_etime for 999,999.999
col avg_lio for 999,999,999.9
col begin_interval_time for a30
col node for 99999
break on plan_hash_value on startup_time skip 1
select ss.snap_id, ss.instance_number node, begin_interval_time, sql_id, plan_hash_value,
nvl(executions_delta,0) execs,
(elapsed_time_delta/decode(nvl(executions_delta,0),0,1,executions_delta))/1000000 avg_etime,
(buffer_gets_delta/decode(nvl(buffer_gets_delta,0),0,1,executions_delta)) avg_lio
from DBA_HIST_SQLSTAT S, DBA_HIST_SNAPSHOT SS
where sql_id = nvl('&sql_id','4dqs2k5tynk61')
and ss.snap_id = S.snap_id
and ss.instance_number = S.instance_number
and executions_delta > 0
order by 1, 2, 3;

--sql/exec/hh
select /*parallel 8*/ trunc(SAMPLE_TIME,'HH'),count(*) 
from dba_hist_active_sess_history 
where sample_time>= to_date('&yyyymmdd','YYYYMMDD') and
 sql_id='&sqlid' group by trunc(SAMPLE_TIME,'HH') order by 1;

--sql
col sql_id for a20
col date_time for a20
SELECT distinct s.snap_id ,SQL.sql_id,sql.INSTANCE_NUMBER,
to_char(s.BEGIN_INTERVAL_TIME,'mm/dd/yy_hh24mi')|| to_char(s.END_INTERVAL_TIME,'_hh24mi') Date_Time,
SQL.executions_delta,
round(SQL.elapsed_time_delta/1000000,3) elapsed_time,
round((SQL.elapsed_time_delta/1000000)/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta),3) avg_etime,
round((SQL.cpu_time_delta/1000000)/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta),3) avg_cputime ,
round(SQL.rows_processed_delta/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta),0) avg_row,
round(SQL.buffer_gets_delta/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta),0) avg_lio,
round(SQL.DISK_READS_DELTA/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta),0) avg_pio
FROM
dba_hist_sqlstat SQL,
dba_hist_snapshot s,
dba_hist_sqltext st
WHERE
SQL.dbid =(select dbid from v$database)
--and SQL.instance_number =(select instance_number from v$instance)
and s.snap_id = SQL.snap_id
and sql.sql_id=st.SQL_ID(+)
and
SQL.sql_id='&sqlid'
order by s.snap_id desc;

##TEMP
--GETtempusagesession
col username for a15
 col machine for a32
 col program for a20
 col tablespace for a15
 col space for a15
 col sql_id for a16
 col space for a10
 ---超过100M temp的sess --- 
SELECT 
distinct se.username, se.SID, se.serial# , se.machine, se.program, su.TABLESPACE,su.segtype, TRUNC(su.BLOCKS * 8 / 1024) || 'M' SPACE, s.sql_id,s.SQL_TEXT
from
gv$session se, gv$sort_usage su,gv$sql s
WHERE se.saddr = su.session_addr and su.sqladdr=s.ADDRESS and su.SQLHASH=s.HASH_VALUE  and su.SQL_ID = s.SQL_ID AND su.BLOCKS > 100 * 1024 / 8 order by se.username;

--querytempusage
select  upper(d.tablespace_name),
(nvl(d.total_Mb,0)-nvl(v.total_used_Mb,0)) free,
round(nvl(v.total_used_Mb,0)/ nvl(d.total_Mb,0) * 100, 2) rate
from (
         select tablespace_name,
nvl(sum(used_blocks), 0)*(select value from v$parameter where name='db_block_size')/(1024*1024) total_used_Mb
 from v$sort_segment group by tablespace_name) v,
       (select tablespace_name,sum(blocks)*(select value from v$parameter where name='db_block_size')/(1024*1024) total_Mb
 from dba_temp_files group by tablespace_name) d
where d.tablespace_name = v.tablespace_name(+);

--querytempsegsess
Set linesize 200 pagesize 200
Col username for a10
Col machine for a24
Col tablespace for a10
Col contents for a10
Col segtype for a10
SELECT se.username username,
       se.SID sid,
       se.serial# serial#,
       se.status status,
       se.sql_id,
       se.prev_sql_id,
       se.machine machine,
       su.TABLESPACE tablespace,
       su.segtype,
       su.CONTENTS CONTENTS
 FROM v$session se,
     v$tempseg_usage su
WHERE se.saddr=su.session_addr;

--tempu
--谁占用了temp表空间           
select t.BLOCKS*16/1024/1024,  
 s.USERNAME,                   
 s.SCHEMANAME,                 
 t.TABLESPACE,                 
 t.SEGTYPE,                   
 t.EXTENTS,                    
 s.PROGRAM,                    
 s.OSUSER,                     
 s.TERMINAL,                   
 s.sid,                        
 s.SERIAL#                     
from V$sort_usage t,v$session s
where t.session_addr=s.saddr;  

--tmp_sqlid
--还可查到具体sql                                 
select sql.sql_id,                                
t.BLOCKS*16/1024/1024,                            
 s.USERNAME,                                      
 s.SCHEMANAME,                                    
 t.TABLESPACE,                                    
 t.SEGTYPE,                                      
 t.EXTENTS,                                       
 s.PROGRAM,                                       
 s.OSUSER,                                        
 s.TERMINAL,                                      
 s.sid,                                           
 s.SERIAL#,                                       
 sql.sql_text                                     
from V$sort_usage t,v$session s,v$sql sql         
where t.session_addr=s.saddr                      
   and t.sqladdr=sql.address                      
   and t.sqlhash=sql.hash_value;                  

#TX_source
--gv$session
select INST_ID,sid,serial#,USERNAME,STATUS,MACHINE,SQL_ID,EVENT,(sysdate-LOGON_TIME)*86400 as "s",LAST_CALL_ET from gv$session where status='ACTIVE' and username is not null;

--blocking_session
select sql_id,EVENT,BLOCKING_INSTANCE,BLOCKING_SESSION,count(*)from gv$session  where blocking_session is not null group by sql_id,EVENT,BLOCKING_INSTANCE,BLOCKING_SESSION;

--gv$open_cursor
select sql_id,sid,SQL_TEXT  from gv$open_cursor where sid='&sid' and INST_ID='&inst_id' and (UPPER(SQL_TEXT) LIKE '%UPDATE%' OR UPPER(SQL_TEXT) like '%DELETE%');

##undo
--getrollbackuseundo
select b.name "UNDO Segment Name", b.inst# "Instance ID", b.status$ STATUS, a.ktuxesiz "UNDO Blocks", a.ktuxeusn, a.ktuxeslt xid_slot, a.ktuxesqn xid_seq
from x$ktuxe a, undo$ b
where a.ktuxesta = 'ACTIVE' and a.ktuxecfl like '%DEAD%' and a.ktuxeusn = b.us#; 

--getundousage
SELECT
TABLESPACE_NAME,STATUS,TRUNC(SUM(BLOCKS) * 8 / 1024) AS "Size M",COUNT(*) Undo_Extent_Num
FROM DBA_UNDO_EXTENTS
GROUP BY TABLESPACE_NAME, STATUS order by 1,2,3;

--getconsumeundosession
set pagesize 50 linesize 210 segment_name format a20
col username for a10
col sid for 9999
Col program format a15
Col  machine for a10
col serial# format 99999
Col sql_id for a15
col segment_name for a25
select s.sid, s.serial#, s.username, u.segment_name, count(u.extent_id) "extent count", t.used_ublk, t.used_urec,s.machine, s.program,s.sql_id
from v$session s, v$transaction t, dba_undo_extents u
where s.taddr = t.addr
and u.segment_name like '_SYSSMU'||t.xidusn||'_%$'
and u.status = 'ACTIVE'
group by s.sid, s.serial#, s.username, u.segment_name, t.used_ublk, t.used_urec,s.machine, s.program,s.sql_id
order by t.used_ublk desc, t.used_urec desc, s.sid, s.serial#, s.username, s.machine, s.program,s.sql_id;

--rolltime
 select undoblockstotal "Total", undoblocksdone "Done", undoblockstotal-undoblocksdone "ToDo",decode(cputime,0,'unknown',to_char(sysdate+(((undoblockstotal-undoblocksdone)  / (undoblocksdone / cputime)) / 86400),'yyyy-mm-dd hh24:mi:ss')) "Estimated time to complete",to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from v$fast_start_transactions;

--transcation_size
 select s.inst_id, s.sid, s.SERIAL#, s.username, t.USED_UBLK*8/1024 M from gv$transaction t, gv$session s where s.saddr = t.ses_addr order by t.USED_UBLK desc;

--undou
--查谁占用undo表空间                       
select r.name undo_name,                   
rssize/1024/1024/1024 "rssize(g)",         
s.sid,                                     
s.serial#,                                 
s.username,                                
s.status,                                  
s.sql_hash_value,                          
s.sql_address,                             
s.machine,                                 
s.module,                                  
substr(s.program,1,78),                    
r.usn,                                     
hwmsize/1024/1024/1024,                    
shrinks,                                   
xacts                                      
from sys.v_$session s,                     
     sys.v_$transaction t,                 
     sys.v_$rollname r,                    
     v$rollstat rs                         
where t.addr=s.taddr                       
   and t.xidusn=r.usn                      
   and r.usn=rs.usn                        
   order by rssize desc;                   


##zyt
--AIX&C&M
#操作系统物理CPU        
prtconf|grep Processors 
#操作系统逻辑cpu个数    
pmcycles -m | wc -l     
#操作系统内存           
prtconf|grep Memory     
#主机名                 
hostname                


--LINUX
#操作系统物理CPU                                        
cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l  
#操作系统逻辑cpu个数                                    
cat /proc/cpuinfo |grep "processor"|wc -l               
#操作系统核数                                           
cat /proc/cpuinfo |grep "cores"|uniq                    
#操作系统内存                                           
free -g                                                 
#主机名                                                 
hostname                                                
#系统版本                                               
cat /etc/redhat-release                                 
telnet 10.135.100.102 22 
df -g 

--CPU
cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l  
cat /proc/cpuinfo |grep "processor"|wc -l               
cat /proc/cpuinfo |grep "cores"|uniq                    

--失效包编译不过去查询
select E.*,DS.TEXT                                                                      
from dba_errors E,DBA_SOURCE DS                                                         
 where                                                                                  
E.owner='MAIN_TEST'                                                                     
AND E.NAME IN (SELECT OBJECT_NAME  FROM DBA_OBJECTS WHERE OBJECT_TYPE='PACKAGE BODY'    
AND OWNER='MAIN_TEST' AND STATUS='INVALID' AND OBJECT_NAME IS NOT NULL)                 
AND E.OWNER=DS.OWNER(+) AND E.NAME=DS.NAME(+) AND E.LINE=DS.LINE(+)                     
ORDER BY E.OWNER,E.NAME,E.TYPE,E.SEQUENCE,E.LINE,E.POSITION ;                           

##zytsql
--参数相关
--查询结果 ISSYS_MODIFIABLE 的值为 IMMEDIATE,表明该参数是动态参数,可以在线修改立即生效(不加scope默认的是 both)
--查询结果中 ISSYS_MODIFIABLE 的值为 FALSE,表明该参数是静态参数,通过 spfile 修改后需要重启数据库参数才生效(静态参数 必须指定scope)
 --查询结果中 ISSYS_MODIFIABLE 的值为 DERERRED,表明该参数是延迟参数,当前会话不生效,后续的会话有效(必须加上scope=spfile或者加上derferred)
--MEMORY_TARGET :操作系统上 Oracle 所能使用的最大内存值。动态参数,MEMORY_TARGET 是PAG 和SGA的总和。memory_target 为 0 是手动管理,非0为自动管理。
--动态参数,以cpu_count为例:alter system set cpu_count=xxx; 
--静态参数,以db_file_name_convert为例:alter system set db_file_name_convert='+DATA_RG/p8701rac/datafile','/piccdg/oradata/dgsmis' scope=spfile;
select name,display_value,issys_modifiable,isinstance_modifiable from v$parameter where name='&prmt_value';
--查看隐含参数
set linesize 200
col name for a40
col value for a24
col description for a70
select a.ksppinm name,b.ksppstvl value,a.ksppdesc description
  from x$ksppi a,x$ksppcv b
 where a.inst_id = USERENV ('Instance')
   and b.inst_id = USERENV ('Instance')
   and a.indx = b.indx
   and upper(a.ksppinm) LIKE upper('%¶%')
order by name
/

--用户权限
select * from DBA_SYS_PRIVS where GRANTEE='&USER';

--用户权限比对
select owner,table_name,grantor,privilege from dba_tab_privs p where p.grantee='&USER1'minus select owner,table_name,grantor,privilege from dba_tab_privs p where p.grantee='&USER2';

--dba_tab_privs
--查看某张表的用户权限,要记得owner,字段
col GRANTEE for a20
col PRIVILEGE for a20
col GRANTOR for a20
select * from dba_tab_privs where TABLE_NAME='&TABLE_NAME';

--ind
--pga占用最多的进程--登录时间最长的session(同时获取到spid,方便再主机层面ps -ef|grep spid 来查看)--逻辑读最多--物理读最多--执行次数最多--解析次数最多--求disk sort严重的sql--3.检查是否有过分提交的语句--索引结果情况(高度,重复度,并行度,叶子高度,聚合银子,记录数,状态,最近分析时间)--4.外键未建索引将引发思索及影响表连接性能。

--v$asm_disk
--拼写加盘步骤--select ' alter diskgroup ' ||d.NAME||  ' add disk ' ||a.PATH|| ' rebalance power 8; ' from v$ASM_DISKGROUP d,V$ASM_DISK awhere d.NAME NOT IN ('CRS') and rownum < 2;

##临时表空间
--v$ASH
SELECT sum(TEMP_SPACE_ALLOCATED/1024/1024/1024), A.SAMPLE_TIME,SQL_ID  FROM V$ACTIVE_SESSION_HISTORY A WHERE A.SAMPLE_TIME BETWEEN TO_DATE('2018-00-00 13:20:00','YYYY-MM-DD HH24:MI:SS') AND TO_DATE('2018-00-00 14:10:00','YYYY-MM-DD HH24:MI:SS')                                            GROUP BY A.SAMPLE_TIME,SQL_ID having sum(TEMP_SPACE_ALLOCATED/1024/1024/1024)>100 ORDER BY 1; 

--V$S_WAIT
set pagesize 2000                                                                
set linesize 210                                                                 
col sql_id for a14                                                               
col s_time for a12                                                               
col status for a6                                                                
col event format a30                                                             
col username for a14                                                             
col osuser for a8                                                                
col p1 for 9999999                                                               
col sid for 9999                                                                 
col p2 for 999999                                                                
col p3 for 9999999999999                                                         
col program format a25                                                           
Col machine for a20                                                              
col serial# format 99999                                                         
select substr(b.program,1,25) program ,b.sid,b.serial#,b.username,               
substr(b.osuser,1,8) osuser,b.sql_id,substr(b.machine,1,20)                      
machine,b.status,to_char(b.SQL_EXEC_START,'dd hh24:mi:ss') s_time ,              
(case when b.STATE='WAITING' then b.event else 'CPU' end) event                  
from v$session_wait a,v$session b where a.sid=b.sid and status = 'ACTIVE'        
and not                                                                          
( b.type = 'BACKGROUND' and b.state='WAITING' and  b.wait_class='Idle' )         
and b.username is not null                                                       
Order by  program,sid,sql_id;                                                    

--V$SQL
select sql_id,sql_fulltext from v$sql where sql_id='&SQL_ID';         
select sql_id,SQL_TEXT from DBA_HIST_SQLTEXT where sql_id='&SQL_ID';  

--DBA_JOBS
select JOB,LOG_USER,SCHEMA_USER,what from DBA_JOBS where JOB='&JOBid';

--DBA_tables_an
SELECT OWNER,TABLE_NAME,LAST_ANALYZED FROM DBA_TABLES where OWNER in ('&OWNER') and TABLE_NAME in ('&TAB_NAME');

--活跃会话数
select USERNAME,count(*) from gv$session where USERNAME is not null and STATUS='ACTIVE' GROUP BY USERNAME;

##优化
--planchange
set lines 155                                                                                                
col execs               for 999,999,999                                                                      
col avg_etime           for 999,999.999                                                                      
col avg_lio             for 999,999,999.9                                                                    
col stime               for a30                                                                              
col node                for 99999                                                                            
col sql_id for a13                                                                                           
--break on plan_hash_value on startup_time skip 1                                                            
select ss.snap_id, ss.instance_number node,                                                                  
to_char(begin_interval_time,'yy-mm-dd hh24:mi:ss') stime,                                                    
sql_id, plan_hash_value,                                                                                     
nvl(executions_delta,0) execs,                                                                               
round((elapsed_time_delta/decode(nvl(executions_delta,0),0,1,executions_delta))/1000000,3) avg_etime_s,      
round((buffer_gets_delta/decode(nvl(buffer_gets_delta,0),0,1,executions_delta))) avg_lio                     
from DBA_HIST_SQLSTAT S, DBA_HIST_SNAPSHOT SS                                                                
where sql_id = nvl('&sql_id','4dqs2k5tynk61')                                                                
and ss.snap_id = S.snap_id                                                                                   
and ss.instance_number = S.instance_number                                                                   
and executions_delta > 0                                                                                     
order by 1, 2, 3;                                                                                            

--sql性能
col BEGIN_INTERVAL_TIME for a25                  
col END_INTERVAL_TIME for a25                    
col instance_number for 99                       
set linesize 1000 pagesize 999                   
select a.snap_id,                                
a.sql_id,                                        
a.instance_number,                               
b.BEGIN_INTERVAL_TIME,                           
b.END_INTERVAL_TIME ,                            
a.EXECUTIONS_DELTA,                              
a.plan_hash_value,                               
a.CPU_TIME_DELTA                                 
from wrh$_sqlstat a, wrm$_snapshot b             
where a.snap_id = b.snap_id                      
and a.instance_number = b.instance_number        
and a.sql_id = '&sql_id'                         
order by 4, 1, 3;                                


--sql10
--sosi.txt
--一条sql的执行计划慢在哪里
--根据V$ACTIVE_SESSION_HISTORY视图中的SQL_PLAN_LINE_ID、COUNT(SQL_PLAN_LINE_ID)确定执行计划中一条sql中的性能过程的SQL_PLAN_LINE_ID;--select SQL_PLAN_LINE_ID,count(SQL_PLAN_LINE_ID) from V$ACTIVE_SESSION_HISTORY where SQL_ID='&sql_id' group by SQL_PLAN_LINE_ID;--select * from table(dbms_xplan.display_cursor('&sql_id',0,'advanced'));

--整天抓sql
--1.异常等待事件 --2.等待事件涉及sql
select to_char(sample_time,'yyyymmdd-hh24'),count(*),sql_id,sql_plan_line_id from gv$active_session_history   
where event like '&event'                                                                                     
group by to_char(sample_time,'yyyymmdd-hh24'),sql_id,sql_plan_line_id                                         
having count(*) > 100                                                                                         
order by 2 desc;                                                                                              

抓topsql
col sql_text format a25
select a.sql_id,
       a.plan_hash_value,
       round(elapsed_time_delta /decode(executions_delta, 0, 1, executions_delta) / 1000000,2) per_time_s,
       executions_delta executions,
       round(buffer_gets_delta * 8 / 1024 /1024/decode(executions_delta, 0, 1, executions_delta)) per_gets_gb,
       to_char(b.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss') begin_time,
       to_char(b.end_interval_time, 'yyyy-mm-dd hh24:mi:ss') end_time,
       substr(c.sql_text,1,25) sql_text
  from dba_hist_sqlstat a, dba_hist_snapshot b, dba_hist_sqltext c
 where a.snap_id = b.snap_id
   and a.instance_number=b.instance_number
   and a.dbid = c.dbid
   and a.sql_id = c.sql_id
   and a.parsing_schema_name<>'SYS'
   and a.instance_number=1
   and b.begin_interval_time>to_date('2020-12-29 09:00:00','yyyy-mm-dd hh24:mi:ss')
   and round(elapsed_time_delta /decode(executions_delta, 0, 1, executions_delta) / 1000000,2)>3
   and a.module='JDBC Thin Client'
 order by 3 desc; 
 
 
--数据库里面的procedure和package查找问题和进行优化的
select sq.sql_id,
       sq.child_number,
       sq.executions,
       round(elapsed_time / decode(sq.executions, 0, 1, sq.executions) / 1000000,2) per_time_s,
       round(buffer_gets / decode(sq.executions, 0, 1, sq.executions) *
             (select value from v$parameter where name = 'db_block_size') / 1024 / 1024) per_gets_mb,
       round(rows_processed / decode(sq.executions, 0, 1, sq.executions)) rows_per_exe,
       to_char(last_active_time, 'yyyy-mm-dd hh24:mi:ss') last_active_time
  from v$sql sq
 where round(elapsed_time / decode(sq.executions, 0, 1, sq.executions) / 1000000,2) > 3
   and (sql_id, child_number) in
       (select sql_id, sql_child_number
          from v$active_session_history ash, dba_objects b
         where sample_time >=
               to_date('2020-12-28 09:00:00', 'yyyy-mm-dd hh24:mi:ss')
           and sql_id is not null
           and coalesce(plsql_object_id, plsql_entry_object_id) =
               b.object_id
           and b.object_name = '&大写的包名')
 order by 4 desc;

##巡检
--db_time
set linesize 200 pagesize 200                                                                     
col DB_CPU_s for 999999                                                                           
col DB_TIME_s for 99999                                                                           
col end_time for a20                                                                              
select INSTANCE_NUMBER, SNAP_ID,to_char(END_INTERVAL_TIME,'yyyy-mm-dd hh24:mi') end_time,         
round(DB_CPU/60/1000/1000) DB_CPU_s , round(DB_TIME/60/1000/1000) DB_TIME_s                       
from                                                                                              
( select s.instance_number,s.snap_id,s.stat_name ,st.BEGIN_INTERVAL_TIME, st.END_INTERVAL_TIME,   
value-lag(value) over (partition by s.stat_name order by s.snap_id) value                         
from dba_hist_sys_time_model s,dba_hist_snapshot st where stat_name in ('DB CPU','DB time')       
and s.instance_number=st.instance_number                                                          
and s.instance_number=1                                                                           
and s.snap_id=st.snap_id                                                                          
)                                                                                                 
pivot ( sum(value) for stat_name in ('DB CPU' as DB_CPU,'DB time' as DB_time) )                   
order by snap_id;                                                                                 

--io
set linesize 200 pagesize 200 
                                                                                                                                    col end_time for a20          
                                                                                                                                    select INSTANCE_NUMBER, SNAP_ID, to_char(END_INTERVAL_TIME,'yyyy-mm-dd hh24:mi') end_time,                                                                        round(REDO_SIZE/1024/1024) REDO_SIZE_M, round(LOGICAL_READS/8/1024) LOGICAL_READS_M, round(PHYSICAL_READS/8/1024) PHYSICAL_READS_M,round(physical_writes/8/1024)  physical_writes_M from                                                                                                                                                              (                                                                                                                                                                 select s.instance_number,s.snap_id,s.stat_name ,st.BEGIN_INTERVAL_TIME, st.END_INTERVAL_TIME,                                                                     value-lag(value) over (partition by s.stat_name order by s.snap_id) value                                                                                         from dba_hist_sysstat s,dba_hist_snapshot st where stat_name in ('redo size','session logical reads','physical reads','physical writes')                          and s.instance_number=st.instance_number                                                                                                                          and s.instance_number=1                                                                                                                                           and s.snap_id=st.snap_id                                                                                                                                          )                                                                                                                                                                 pivot ( sum(value) for stat_name in ('redo size' as redo_size ,'session logical reads' as logical_reads,'physical reads' as physical_reads,'physical writes' as   physical_writes ) ) order by snap_id;  

##开门红
--dbtime
WITH timemodel_tmp                                                                                                                                                                                                                                             
     AS (SELECT sn.begin_interval_time, sn.end_interval_time, ss.stat_name, i.INSTANCE_NAME,                                                                                                                                                                   
                os.value cpu_cnt, ss.VALUE e_value, ss.snap_id e_snap_id, i.instance_number,                                                                                                                                                                   
                LAG (ss.VALUE, 1) OVER (partition by ss.instance_number, ss.stat_name ORDER BY ss.snap_id) b_value,                                                                                                                                            
                LAG (ss.snap_id, 1) OVER (partition by ss.instance_number, ss.stat_name ORDER BY ss.snap_id) b_snap_id                                                                                                                                         
           FROM dba_hist_sys_time_model ss, dba_hist_snapshot sn, DBA_HIST_OSSTAT os,                                                                                                                                                                          
                (select dbid, instance_number, INSTANCE_NAME, row_number()over(partition by dbid, instance_number order by STARTUP_TIME desc) rn from DBA_HIST_DATABASE_INSTANCE) i                                                                            
          WHERE sn.end_interval_time>=trunc(sysdate - 0) --to_date('2016-11-30', 'yyyy-mm-dd')                                                                                                                                                                 
          --            and sn.begin_interval_time<=to_date('2016-12-01', 'yyyy-mm-dd')                                                                                                                                                                        
                AND ss.snap_id = sn.snap_id  AND ss.dbid = sn.dbid                                                                                                                                                                                             
                AND ss.snap_id = os.snap_id  AND ss.dbid = os.dbid                                                                                                                                                                                             
                AND ss.instance_number = sn.instance_number AND ss.instance_number = os.instance_number                                                                                                                                                        
                AND ss.dbid = (SELECT dbid FROM v$database)                                                                                                                                                                                                    
                AND ss.instance_number = i.instance_number AND ss.dbid = i.dbid AND i.rn=1                                                                                                                                                                     
                AND ss.stat_name in ( 'DB time', 'DB CPU') AND os.stat_name = 'NUM_CPUS'),                                                                                                                                                                     
timemodel as (select begin_interval_time, end_interval_time, INSTANCE_NAME, cpu_cnt, instance_number,                                                                                                                                                          
                max(case stat_name when 'DB time' then e_value end) dt_e_value,     max(case stat_name when 'DB CPU' then e_value end) ct_e_value,                                                                                                             
                max(case stat_name when 'DB time' then e_snap_id end) e_snap_id,  --max(case stat_name when 'DB CPU' then e_snap_id end) ct_e_snap_id,                                                                                                         
                max(case stat_name when 'DB time' then b_value end) dt_b_value,     max(case stat_name when 'DB CPU' then b_value end) ct_b_value,                                                                                                             
                max(case stat_name when 'DB time' then b_snap_id end) b_snap_id  --,max(case stat_name when 'DB CPU' then b_snap_id end) ct_b_snap_id                                                                                                          
             from timemodel_tmp                                                                                                                                                                                                                                
             group by begin_interval_time, end_interval_time, INSTANCE_NAME, cpu_cnt, instance_number),                                                                                                                                                        
candi_tmp as (                                                                                                                                                                                                                                                 
  SELECT TO_CHAR (BEGIN_INTERVAL_TIME, 'mm-dd hh24:mi')                                                                                                                                                                                                        
         || TO_CHAR (END_INTERVAL_TIME, '~hh24:mi')  date_time,                                                                                                                                                                                                
         ROUND ((dt_e_value - NVL (dt_b_value, 0))/1000000                                                                                                                                                                                                     
            / ((cast (end_interval_time as date) - cast(begin_interval_time as date))*24*60*60), 2)  db_times,                                                                                                                                                 
         ROUND ((dt_e_value - NVL (dt_b_value, 0))/1000000                                                                                                                                                                                                     
            / ((cast (end_interval_time as date) - cast(begin_interval_time as date))*24*60*60) / cpu_cnt, 2)  db_times_per_cpu,                                                                                                                               
         ROUND ((ct_e_value - NVL (ct_b_value, 0))/1000000                                                                                                                                                                                                     
            / ((cast (end_interval_time as date) - cast(begin_interval_time as date))*24*60*60), 2)  cpu_times,                                                                                                                                                
         ROUND ((ct_e_value - NVL (ct_b_value, 0))/1000000                                                                                                                                                                                                     
            / ((cast (end_interval_time as date) - cast(begin_interval_time as date))*24*60*60) / cpu_cnt, 2)  cpu_times_per_cpu,                                                                                                                              
         b_snap_id, e_snap_id, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME, INSTANCE_NAME, instance_number                                                                                                                                                          
    FROM timemodel                                                                                                                                                                                                                                             
   WHERE (dt_e_value - NVL (dt_b_value, 0)) > 0 AND NVL (dt_b_value, 0) > 0),                                                                                                                                                                                  
candi as (select t.*, row_number()over(partition by instance_number order by BEGIN_INTERVAL_TIME desc) rn                                                                                                                                                      
         from candi_tmp t)                                                                                                                                                                                                                                       
select max(dt) from (                                                                                                                                                                                                                                          
select date_time, instance_number inst, db_times dt, db_times_per_cpu dtpc, cpu_times ct, cpu_times_per_cpu ctpc, b_snap_id, e_snap_id,                                                                                                                        
       'awr_'||INSTANCE_NAME||'_'||TO_CHAR (BEGIN_INTERVAL_TIME, 'yyyy-mm-dd-hh24mi')||TO_CHAR (END_INTERVAL_TIME, '~hh24mi')||'_'||to_char(db_times)||'_'||to_char(db_times_per_cpu)||'_'||to_char(cpu_times_per_cpu)||'.html' awrrpt_name                    
 from candi c                                                                                                                                                                                                                                                  
--where rn<=60                                                                                                                                                                                                                                                 
order by instance_number, BEGIN_INTERVAL_TIME desc)                                                                                                                                                                                                           ; 
--io
WITH si AS                                                                             
 (SELECT snap_id,                                                                      
         instance_number,                                                              
         to_char(begin_interval_time, 'yyyy-mm-dd hh24:mi') || '~' ||                  
         to_char(end_interval_time, 'hh24:mi') interval_time,                          
         (CAST(end_interval_time AS DATE) -                                            
         CAST(begin_interval_time AS DATE)) * 86400 els_sec                            
    FROM dba_hist_snapshot                                                             
   WHERE instance_number = (SELECT instance_number FROM v$instance)                    
     AND end_interval_time >= trunc(SYSDATE)),                                         
a AS                                                                                   
 (SELECT instance_number,                                                              
         MIN(snap_id) min_snap,                                                        
         MAX(snap_id) max_snap                                                         
    FROM si                                                                            
   GROUP BY instance_number),                                                          
v AS                                                                                   
 (SELECT s.instance_number,                                                            
         s.snap_id,                                                                    
         s.stat_name,                                                                  
         s.value,                                                                      
         round(s.value - lag(s.value, 1, NULL)                                         
               over(PARTITION BY s.stat_name ORDER BY s.snap_id),                      
               1) delta                                                                
    FROM dba_hist_sysstat s,                                                           
         a                                                                             
   WHERE s.stat_name IN ('session logical reads',                                      
                         'physical read bytes',                                        
                         'physical write bytes',                                       
                         'redo size')                                                  
     AND s.instance_number = a.instance_number                                         
     AND s.snap_id BETWEEN a.min_snap - 1 AND a.max_snap),                             
b AS                                                                                   
 (SELECT v.snap_id,                                                                    
         si.interval_time,                                                             
         si.els_sec,                                                                   
         SUM(decode(v.stat_name, 'redo size', v.delta, 0)) redo_size,                  
         SUM(decode(v.stat_name, 'session logical reads', v.delta, 0)) logical_read,   
         SUM(decode(v.stat_name, 'physical read bytes', v.delta, 0)) physical_read,    
         SUM(decode(v.stat_name, 'physical write bytes', v.delta, 0)) physical_write   
    FROM si,                                                                           
         v                                                                             
   WHERE si.snap_id = v.snap_id                                                        
   GROUP BY v.snap_id,                                                                 
            si.interval_time,                                                          
            si.els_sec                                                                 
   ORDER BY 1)                                                                         
   select max(physical_read),max(physical_write) from(                                 
SELECT snap_id,                                                                        
       round(redo_size / els_sec, 1) redo_size,                                        
       round(logical_read / els_sec, 1) logical_read,                                  
       round(physical_read / els_sec / POWER(2, 20), 1) physical_read,                 
       round(physical_write / els_sec / POWER(2, 20), 1) physical_write                
  FROM b);                                                                              

--session
select max(AVG_SESS_NUM_S) from(                   
select sample_id ,count(1) AVG_SESS_NUM_S          
 from V$ACTIVE_SESSION_HISTORY                     
 where sample_time>=trunc(sysdate)                 
 group by sample_id );                             

--cpu
su - oracle 
sqlplus / as sysdba 
show parameter cpu 

##查询进度
--querylongops
set linesize 200 pagesize 50
col opname for a40
col target for a30
col message for a40
select sid,opname,target,sofar,totalwork,round(sofar/totalwork,4)*100 per,message
 FROM V$SESSION_LONGOPS
where (sid,serial#) in (select sid,serial# from v$session where type='USER') and sofar<>totalwork
order by sid,serial#;

--per
set linesize 2000                                           
set pagesize 200                                            
col SID for 9999                                            
col SERIAL# for 9999999999                                  
col OPNAME for a30                                          
col TARGET for a10                                          
col SOFAR for 9999999999                                    
col TOTALWORK for 99999999999                               
select SID,SERIAL#,OPNAME,START_TIME,LAST_UPDATE_TIME,      
round(sofar/totalwork,4)*100 per,                           
round(ELAPSED_SECONDS/3600,4) ELA_HH,--MESSAGE              
round(TIME_REMAINING/3600,4) re_hh                          
from V$SESSION_LONGOPS                                      
where TOTALWORK !=0 AND sofar!=totalwork;                   

--tempsc
select SID,SERIAL#,OPNAME,START_TIME,LAST_UPDATE_TIME,            
round(sofar/totalwork,4)*100 per,                                 
round(ELAPSED_SECONDS/3600,4) ELA_HH,--MESSAGE                    
round(TIME_REMAINING/3600,4) re_hh                                
from V$SESSION_LONGOPS                                            
where TOTALWORK !=0 AND sofar!=totalwork and OPNAME like '%RMAN%';

ft_id
SELECT /*+ rule */
 'kill -9 ' || c.SPID v_sql1,
 'alter system kill session ''' || b.sid || ',' || b.serial# || ''';' sql2,
 B.SQL_ID,
 DECODE(A.REQUEST, 0, 'Holder', 'Waiter') LOCKROLE,
 A.INST_ID,
 A.SID SESS,
 A.ID1,
 A.ID2,
 A.LMODE,
 A.REQUEST,
 A.TYPE,
 B.EVENT,
 A.CTIME,
 B.MACHINE,
 B.PROGRAM,
 B.USERNAME
  FROM GV$LOCK A, GV$SESSION B, gv$process C
 WHERE (A.ID1, A.ID2, A.TYPE, A.INST_ID) IN
       (SELECT D.ID1, D.ID2, D.TYPE, D.INST_ID
          FROM GV$LOCK D
         WHERE D.REQUEST > 0)
   AND A.SID = B.SID
   AND A.INST_ID = B.INST_ID
   AND A.INST_ID = C.INST_ID
   AND B.PADDR = C.ADDR
   AND a.TYPE = 'TM'
   AND a.REQUEST > 3
-- AND DECODE(A.REQUEST, 0, 'Holder', 'Waiter')='Waiter'
 ORDER BY A.ID1, A.REQUEST;\n
----ID1是子表


--disable 约束
---写父表---\nselect 'alter table '||table_name||' disable novalidate constraint '||\nconstraint_name||';' disable_cons 
from dba_constraints
\nwhere R_CONSTRAINT_NAME in (select constraint_name from dba_constraints where table_name='&fubiao');

--ash获得子表
select ash.SAMPLE_TIME,\n
       ash.EVENT,\n
       ash.SESSION_ID,\n
       ash.BLOCKING_SESSION,\n
       ash.P1TEXT,\n
       ash.P1,\n
       ash.P2TEXT,\n
       ash.p2,\n
       ash.p3text,\n
       ash.p3,\n
       ash.SESSION_STATE,\n
       ash.SQL_OPNAME,\n
       ash.SQL_ID\n
  from v$active_session_history ash\n
 where ash.SAMPLE_TIME >\n
       to_date('&20180306170000', 'yyyymmddHH24MISS')\n
   and ash.SAMPLE_TIME <\n
       to_date('&20180306181000', 'yyyymmddHH24MISS')\n
   and ash.WAIT_CLASS <> 'Idle'\n
   and ash.EVENT like 'enq: TM - contention'\n
 order by sample_time desc;
 
--FK&IND(STAB-->FTAB)
 col cindex for a80                                                                                                                                \n      
col stab for a20                                                                                                                                  \n
col ftab for a20                                                                                                                                  \n
col SONCOLUMN for a20                                                                                                                             \n
col CINDEX for a80                                                                                                                                \n
set lines 400                                                                                                                                     \n
SET pages 400                                                                                                                                     \n
COL SFK FOR A20                                                                                                                                   \n
COL FPK FOR A20                                                                                                                                   \n
COL disable_cons FOR A60                                                                                                                          \n
with                                                                                                                                              \n
sont as (                                                                                                                                         \n
select OWNER,table_name,constraint_name,r_constraint_name                                                                                         \n
from dba_constraints                                                                                                                              \n
where table_name='&son_tab'                                                                                                                       \n
),                                                                                                                                                \n
ftab as (                                                                                                                                         \n
select  DC.OWNER,dc.table_name,dc.constraint_name                                                                                                 \n
from dba_constraints dc,sont                                                                                                                      \n
where dc.constraint_name=sont.r_constraint_name)                                                                                                  \n
select info.*,'alter table '||info.stab||' disable novalidate constraint '||                                                                      \n
info.SFK||';' disable_cons from                                                                                                                   \n
   ( select                                                                                                                                       \n
     sont.table_name stab,                                                                                                                        \n
     ftab.table_name ftab,                                                                                                                        \n
     sont.constraint_name SFK,                                                                                                                    \n
     ftab.constraint_name FPK,                                                                                                                    \n
     dcc.column_name soncolumn,                                                                                                                   \n
     'create index '||dcc.owner||'.IDX_'||column_name||' on '||dcc.owner||'.'||dcc.table_name||'('||dcc.column_name||') online;' cindex           \n       
     from sont,ftab,dba_cons_columns dcc                                                                                                          \n
     where sont.r_constraint_name=ftab.constraint_name                                                                                            \n
     and dcc.constraint_name=sont.constraint_name                                                                                                 \n
     AND NOT EXISTS (SELECT COLUMN_NAME FROM DBA_IND_COLUMNS WHERE COLUMN_NAME=DCC.COLUMN_NAME and table_name=sont.table_name )                   \n
     ORDER BY FTAB ) info;                                                                                                                        \n

--FTAB-->STAB
--这个回头需要加listagg \n
select 'alter table '||sowner||'.'||son_table||' add constraint '||rconstraint_name||' foreign key ('||son_col||') references '||                                        \n
fowner||'.'||f_table||'('||f_col||');',t.*                                                                                                                               \n
from (                                                                                                                                                                   \n
select r.owner sowner,r.table_name son_table,r.column_name son_col,r.deferrable rdeferrable,r.deferred rdeferred,r.validated rvalidated,                                 \n
r.constraint_name rconstraint_name,                                                                                                                                      \n
p.owner fowner,p.table_name f_table,p.column_name f_col,p.deferrable pdeferrable,p.deferred pdeferred,p.validated pvalidated,                                            \n
p.constraint_name pconstraint_name                                                                                                                                       \n
from                                                                                                                                                                     \n
(                                                                                                                                                                        \n
select r.owner,r.table_name,rk.column_name,r.constraint_name,r_constraint_name,r.deferrable,r.deferred,r.validated from dba_constraints r,dba_cons_columns rk            \n
where r.constraint_name=rk.constraint_name                                                                                                                               \n
and r.owner=rk.owner                                                                                                                                                     \n
and r.table_name=rk.table_name                                                                                                                                           \n
and r.constraint_type='R'                                                                                                                                                \n
) r,                                                                                                                                                                     \n
(                                                                                                                                                                        \n
select p.owner,p.table_name,pk.column_name,p.constraint_name,p.deferrable,p.deferred,p.validated                                                                         \n
from dba_constraints p,dba_cons_columns pk                                                                                                                               \n
where p.owner=pk.owner                                                                                                                                                   \n
and p.table_name=pk.table_name                                                                                                                                           \n
and p.constraint_name=pk.constraint_name                                                                                                                                 \n
and p.constraint_type='P'                                                                                                                                                \n
and not regexp_like(p.owner,'SYS')                                                                                                                                       \n
) p                                                                                                                                                                      \n
where r.r_constraint_name=p.constraint_name                                                                                                                              \n
--and r.constraint_name='FK_DEPTNO'                                                                                                                                      \n
--and r.constraint_name=rk.constraint_name                                                                                                                               \n
and p.table_name='T_ACCUM_BILL_PRODUCT'                                                                                                                                  \n
--and r.table_owner=''                                                                                                                                                   \n
) t                                                                                                                                                                      \n
;                                                                                                                                                                        \n

--LO
select OWNER,OBJECT_NAME,OBJECT_ID,OBJECT_TYPE,CREATED,LAST_DDL_TIME from dba_objects where OBJECT_ID=&OBJECT_ID;

--所有外键
--某用户所有外键
select 'ALTER TABLE '||a.OWNER||'.'||a.TABLE_NAME||' ADD CONSTRAINT '||a.CONSTRAINT_NAME||' FOREIGN KEY('||b.COLUMN_NAME||') REFERENCES '||a.R_OWNER||'.'||c.TABLE_NAME||'('||c.COLUMN_NAME||');' 
from dba_constraints a,dba_cons_columns b,dba_cons_columns c
where a.OWNER in('&OWNER')and a.CONSTRAINT_TYPE='R'
and a.OWNER=b.OWNER and a.table_name=b.table_name and a.CONSTRAINT_NAME=b.CONSTRAINT_NAME 
and a.R_OWNER=c.OWNER and a.R_CONSTRAINT_NAME=c.CONSTRAINT_NAME ;


--阻塞链
col SQL_ID for a20                                                                                                                                                                               
col STATUS for a10                                                                                            
col INST_ID for 99                                                                                            
col TREE for a30                                                                                              
select *                                                                                                      
from (select a.inst_id, a.sid, a.serial#,                                                                     
              a.sql_id,                                                                                       
              a.event,                                                                                        
              a.status,                                                                                       
              connect_by_isleaf as isleaf,                                                                    
              sys_connect_by_path(a.SID||'@'||a.inst_id, ' <- ') tree,                                        
              level as tree_level                                                                             
         from gv$session a                                                                                    
        start with a.blocking_session is not null                                                             
       connect by (a.sid||'@'||a.inst_id) = prior (a.blocking_session||'@'||a.blocking_instance))             
where isleaf = 1                                                                                              
order by tree_level asc;                                                                                      

--tab_ind
set lines 199                                                                                                   \n                                                                  
col table_owner for a15                                                                                         \n  
col index_owner for a15                                                                                         \n  
col table_name for a30                                                                                          \n  
col index_name for a30                                                                                          \n  
col UNIQUENESS for a10                                                                                          \n  
col partitioned for a5                                                                                          \n  
col column_name for a43                                                                                         \n  
select d.table_owner,d.owner index_owner,d.table_name,d.index_name,d.UNIQUENESS,d.partitioned,VISIBILITY,       \n
          listagg(i.column_name,',') within group (order by i.column_position) column_name                      \n  
               from dba_indexes d,dba_ind_columns i                                                             \n       
          where d.table_name=upper('&tname')                                                                    \n  
          and d.owner=i.index_owner                                                                             \n  
          and d.index_name=i.index_name                                                                         \n  
          and d.table_name=i.table_name                                                                         \n  
          and d.table_owner=i.table_owner                                                                       \n  
          group by d.table_owner,d.owner,d.table_name,d.index_name,d.UNIQUENESS,d.partipartitioned,VISIBILITY;       \n
          
          
--mkdir
cd /picclife/dbscript/BO                          
mkdir -p /picclife/dbscript/BO/$(date +%Y%m%d)    
cd /picclife/dbscript/BO/$(date +%Y%m%d)          

--pack_install.sh
pack_install.sh                          

--wait_event
set pagesize 2000                   
set linesize 210                    
col sql_id for a14                  
col s_time for a12                  
col status for a6                   
col event format a30                
col username for a14                
col osuser for a8                   
col p1 for 9999999                  
col sid for 9999                    
col p2 for 999999                   
col p3 for 9999999999999            
col program format a25              
Col machine for a20                 
col serial# format 99999            
select substr(a.program,1,25) program,a.SID,a.SERIAL#,a.USERNAME,substr(a.osuser,1,8) osuser,a.sql_id,substr(a.machine,1,20) machine,a.status,  
to_char(a.SQL_EXEC_START,'dd hh24:mi:ss') s_time,(case when a.STATE='WAITING' then a.event else 'CPU' end) event                                         
from v$session a,v$session_wait b                                                                                                                        
where a.sid=b.sid and status = 'ACTIVE' and not ( a.type = 'BACKGROUND' and a.state='WAITING'                                                            
and a.wait_class='Idle')and a.username is not null and a.SQL_ID is not null order by a.program,a.sid,a.sql_id;                                           


--block_source
col OSUSER for a15                                                                                                           
 select sid,MACHINE,OSUSER,username,EVENT,BLOCKING_INSTANCE,BLOCKING_SESSION from gv$session                                  
where MACHINE='rac11g870a' and OSUSER='oracle' and PROGRAM like '%sqlplus@rac11g870a (TNS V1-V3)%' and username='PICCPROD';  

--kill&sid
select '!ps -ef|grep '||pro.spid ||' '|| '!kill -9 '||pro.spid  from v$session ses,v$process pro where ses.sid in( &sid ) and ses.paddr=pro.addr; 

--id&obj
sqlplus PICCPROD/picc_sys_100115                                                                             
select 'alter ' ||decode(object_type, 'PACKAGE BODY', 'PACKAGE', object_type) || ' '                        
 || OBJECT_NAME || decode(object_type, 'PACKAGE BODY',' compile body ; ', ' compile; ')from user_objects    
where status <> 'VALID' AND OBJECT_TYPE NOT LIKE 'JAVA%';                                                   

--app_server
su - weblogic 
id 
pack_deploy.sh

--维护脚本
--阻塞查询
set linesize 300 pagesize 50                                                                                                    
col bs for 9999                                                                                                                 
col wc for 99                                                                                                                   
col sql_id for a13                                                                                                              
col username for a13                                                                                                            
col event for a25                                                                                                               
col schemaname for a17                                                                                                          
col machine for a20                                                                                                             
col program for a35                                                                                                             
select                                                                                                                          
    inst_id,sid,serial#,username,sql_id,machine,program,event,blocking_instance bins,blocking_session bs,wait_class# wc         
    from gv$session                                                                                                             
  where blocking_session is not null  order by  blocking_session,blocking_instance;                                               
 
--pkg_lock
select /*+ parallel(4) */  s.USERNAME,count(*),s.inst_idfrom gv$session s,(select distinct inst_id,sid,object from gv$access where object = 'PKG_LIFE_NEWBIZ_PKG') a --,gv$sql lwhere s.inst_id=a.inst_idand s.sid=a.sid--and s.sql_id=l.sql_id--and s.inst_id=l.inst_id--and s.sql_child_number=l.child_numbergroup by s.USERNAME,s.inst_idorder by count(*);

--63blockme
col OSUSER for a15  
select sid,MACHINE,OSUSER,username,EVENT,BLOCKING_INSTANCE,BLOCKING_SESSION from gv$session  
where MACHINE='dgsoutha' and OSUSER='oracle' and PROGRAM like '%sqlplus@dgsoutha (TNS V1-%' and username='PICCPROD'; 

--63失效包
sqlplus piccprod/debug_piccprod_123                                                                         
--conn claim_prod/debug_claim_prod_345                                                                         
--conn piccprod/debug_piccprod_123                                                                             
select 'alter ' ||decode(object_type, 'PACKAGE BODY', 'PACKAGE', object_type) || ' '                        
 || OBJECT_NAME || decode(object_type, 'PACKAGE BODY',' compile body ; ', ' compile; ')from user_objects    
where status <> 'VALID' AND OBJECT_TYPE NOT LIKE 'JAVA%';                                                   

--理赔发布
cd /picclife 
#sh deployStart_cbs.sh #0#PICC_MASTER.V202006.006 

--kill
SELECT --A.P1,A.P2,A.P3,                                                                               
A.SQL_EXEC_START,A.INST_ID,A.USERNAME blocker,A.SID,A.SERIAL#,A.EVENT,a.sql_id,                        
B.USERNAME B_USERNAME,B.SID B_SID,B.EVENT B_EVENT,B.SQL_EXEC_START B_SQL_EXEC_START,b.sql_id,          
'alter system kill session '''||A.sid||','||A.serial#||',@'||A.inst_id||''' immediate;' ksql,          
p.inst_id,'kill -9 '||p.spid                                                                           
FROM GV$SESSION A,GV$SESSION B,gv$process p                                                            
WHERE A.SID=B.FINAL_BLOCKING_SESSION                                                                   
AND A.USERNAME IS NOT NULL                                                                             
AND A.INST_ID=B.INST_ID                                                                                
AND A.AUDSID<>B.AUDSID                                                                                 
and a.paddr=p.addr                                                                                     
and a.inst_id=p.inst_id                                                                                
and b.inst_id=p.inst_id                                                                                
AND b.PROGRAM LIKE '%sqlplus%'                                                                         
;                                                                                                      

--清理归档    
rman target /
list archivelog all;
list copy of archivelog until time 'SYSDATE-5';
delete archivelog until time 'SYSDATE-5';    
delete force noprompt archivelog until time 'sysdate-3';

crosscheck archivelog all;


oracle闪回查询
create table A.t_bak as select * from A.t as of timestamp to_timestamp('2021-09-10 17:20:00', 'yyyy-mm-dd hh24:mi:ss')

resize空间剩余较大的数据文件:将数据文件大小设为高水位线位置
SELECT  'alter database datafile '''||a.file_name||''' resize ' ||round(c.hwmsize)||'M;' cmd, a.file_id,a.filesize, c.hwmsize
FROM 
  ( SELECT  file_id, file_name, round(bytes/1024/1024) filesize
  FROM dba_data_files ) a, 
  ( SELECT  file_id, round(max(block_id)*8/1024) HWMsize
  FROM dba_extents
  GROUP BY file_id) c
WHERE a.file_id = c.file_id and a.filesize > c.hwmsize+&size ;

--job
停用job
EXEC DBMS_JOB.BROKEN(26,TRUE); 

--创建同义词后,需要再授权:
conn / as sysdba
CREATE OR REPLACE SYNONYM zytuser.zyttab FOR zytuser2.zyttab;
GRANT insert,delete,update,select ON zytuser.zyttab TO zytuser;

1.创建用户
--查询用户是否存在
select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE,CREATED from dba_users
where USERNAME in ('USER1','USER2');

--创建表空间
create tablespace PROD_TBS datafile '+DATA' size 30G;
create tablespace OPS_TBS datafile '+DATA' size 30G;

--创建用户
create user USER1 identified by prod_ora_365_001 DEFAULT TABLESPACE "PROD_TBS";
create user USER2 identified by ops_ora_365_100 DEFAULT TABLESPACE "OPS_TBS";

--授权
GRANT CONNECT,RESOURCE,CREATE PROCEDURE,UNLIMITED TABLESPACE TO USER1;
GRANT CONNECT,RESOURCE,CREATE PROCEDURE,UNLIMITED TABLESPACE TO user2;


--确认用户
select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE,CREATED from dba_users
where USERNAME in ('USER1','USER2');

--测试用户
conn USER1/prod_ora_365_001
conn user2/ops_ora_365_100

------重置用户密码
select USERNAME,ACCOUNT_STATUS,EXPIRY_DATE,LOCK_DATE,PROFILE from dba_users where USERNAME='&USERNAME';

set lines 199
col sqlt for a199
select 'alter user '||name||' IDENTIFIED BY values '''||spare4||';'||PASSWORD||''';' sqlt from SYS.user$ where name ='&uname';

--闪回查询
select name,spare4,PASSWORD from SYS.user$ as of timestamp to_timestamp('2021-04-21 00:00:00','yyyy-mm-dd hh24:mi:ss') where name ='&name';

--从dba_jobs获取重建语句
select j.SCHEMA_USER,'declare ' ||' n_syn_points number; '||' begin '||' dbms_job.submit(n_syn_points,'||''''||j.what||''''||','|| ' sysdate,'||''''||j.interval||''''||');'||' commit; '||
' end; ' as ss
from dba_jobs j
--where j.LOG_USER not in ('SYS')
--and j.SCHEMA_USER='ZHAOPIN'
where job=&job;

--gather database stats
vi /home/oracle/gather_db_stats.sql
set time on
set timing on
select 1 from dual;
exec dbms_stats.gather_database_stats(estimate_percent=>1,cascade=>TRUE,degree => 8);
select 1 from dual;
exit

nohup sqlplus / as sysdba @/home/oracle/gather_db_stats.sql &


--gather schema stats
vi /home/oracle/gather_schema_stats.sql
set time on
set timing on
select 1 from dual;
EXEC DBMS_STATS.gather_schema_stats('SCOTT',estimate_percent=>1,cascade=>TRUE,degree => 8);
select 1 from dual;
exit

nohup sqlplus / as sysdba @/home/oracle/gather_schema_stats.sql &


--gather table stats
EXEC DBMS_STATS.gather_table_stats(
ownname=>'PICCPROD',
tabname=>'T_LETTER_RECEIVER',
DEGREE=>4,
cascade=>'true');

根据等待事件抓取sql

select to_char(sample_time,'yyyymmdd-hh24'),count(*),sql_id,sql_plan_line_id from gv$active_session_history

where event like '%&event%'

group by to_char(sample_time,'yyyymmdd-hh24'),sql_id,sql_plan_line_id

having count(*) > 100

order by 2 desc;

用户密码重置
SELECT 'ALTER USER '|| name ||' IDENTIFIED BY VALUES '''|| spare4 ||';'|| password ||''' ;' FROM sys.user$ WHERE name like UPPER('&name%');

1.password_versions的优先级大于sec_case_sensitive_logon
2.通过修改USER$.SPARE4为空实现了屏蔽ORACLE 11g密码大小写敏感

select 'ALTER PROFILE '||P.PROFILE||' LIMIT '||resource_name||' '||P.LIMIT||' ;' from dba_profiles p;