小麦苗的常用代码--常用命令(仅限自己使用)--下

小麦苗的常用代码--常用命令(仅限自己使用)--下

 

上篇:https://blog.csdn.net/lihuarongaini/article/details/100743471

 



--------------------------------------------------------------------------------------------------------------   修改日期的显示格式
execute immediate 'alter session set NLS_DATE_FORMAT=''YYYY-MM-DD DY HH24:MI:SS'''; 
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss' scope=spfile;


----------------------------------------------------------------------------- sqlplus 设置
 --$ORACLE_HOME/sqlplus/admin/glogin.sql


 sqlplus中的清屏命令: clear scr

 --修改提示符
set linesize 9999 pagesize 9999
set sqlprompt "_USER'@'_CONNECT_IDENTIFIER> "



 
set time on;
set line 9999
set pagesize 9999;
set timing on;
set sqlprompt "_USER'@'_CONNECT_IDENTIFIER> "



set echo on;
set time on;
SET  99999999;
SET CHUNKSIZE 1000000;
set timing on;
set serveroutput on  size 1000000;
set sqlblanklines on;
set linesize 800;
set pagesize 50000;
set sqlprompt "_USER'@'_CONNECT_IDENTIFIER> "
host color 02 
alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
set errorlogging on table lhr.sperrorlog;
set errorlogging on identifier LHR_SESSION


---  alter session set nls_date_language='american' ;

--------------------------------------------------------rman备份--  全备 ---------------------------------------------------------

backup database include current controlfile plus archivelog delete input ;
backup as backupset database  format  '/u05/oracle/oracle_bk/orclasm/full_%n_%T_%t_%s_%p.bak' include current controlfile plus archivelog;
backup  as compressed backupset  format  '/arch/oracle_bk/ora2lhr/full_%n_%T_%t_%s.bak' database include current controlfile plus archivelog delete input ;

run
{
 backup as compressed backupset database;
 sql 'alter system archive log current';
 backup archivelog all ;
 backup current controlfile;
}


----------------------------- 归档 open 全备
export ORACLE_SID=ora11g
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
MYDATE=`date +'%Y%m%d%H%M%S'`
BACKUP_DIR=/home/oracle/oracle_bk/$ORACLE_SID
mkdir -p $BACKUP_DIR/log

 
rman target /  log $BACKUP_DIR/log/rman_full_$MYDATE.log append < dbms_logmnr.new);
exec  dbms_logmnr.add_logfile('归档日志文件', Options => dbms_logmnr.ADDFILE);

--若归档日志不在本地,则需要恢复相应的归档日志到本地目录。
   run {allocate channel ci type disk;
      set archivelog destination to '/tmp';
      restore archvielog from logseq xxx until logseq xxx;
      release channel ci;
    };


   

--------------  利用平面文件作为数据字典
alter system set utl_file_dir='/home/oracle/' scope=spfile; --然后重启库
exec dbms_logmnr_d.build('log.ora','/home/oracle/',dbms_logmnr_d.store_in_flat_file);
exec dbms_logmnr.add_logfile('+FRA/orclasm/archivelog/2015_01_20/thread_1_seq_952.463.869481079',dbms_logmnr.new);
exec dbms_logmnr.add_logfile('+FRA/orclasm/archivelog/2015_01_20/thread_1_seq_953.462.869481107',dbms_logmnr.addfile);
exec dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/log.ora');
create table LHR.testlog as select * from  v$logmnr_contents a;
EXEC DBMS_LOGMNR.END_LOGMNR;

-------------------------- redo 字典
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
exec  dbms_logmnr_d.build(options => dbms_logmnr_d.STORE_IN_REDO_LOGS);
 select a.*
   from v$archived_log a
  WHERE a.name IS NOT NULL
    and (a.DICTIONARY_BEGIN = 'YES' or a.DICTIONARY_END = 'YES');


-------------- 利用在线日志作为数据字典
SELECT '  dbms_logmnr.add_logfile(''' || MEMBER || ''');' FROM v$logfile;

BEGIN
  dbms_logmnr.add_logfile('+DATA/orclasm/onlinelog/group_3.263.850260263',dbms_logmnr.new)  ;
  dbms_logmnr.add_logfile('+DATA/orclasm/onlinelog/group_2.262.850260259',dbms_logmnr.ADDFILE)  ;
  dbms_logmnr.add_logfile('+DATA/orclasm/onlinelog/group_1.261.850260255',dbms_logmnr.ADDFILE))  ;
  dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog + dbms_logmnr.committed_data_only);
END;

SELECT scn, sql_redo, a.SQL_UNDO, a.*
  FROM v$logmnr_contents a
 WHERE a.OPERATION = 'INSERT'
   and a.TABLE_NAME = 'AABB';

create table testlog as select * from  v$logmnr_contents a;

begin
  dbms_logmnr.end_logmnr();
end;



EXECUTE DBMS_LOGMNR_D.BUILD (OPTIONS=>DBMS_LOGMNR_D.STORE_IN_REDO_LOGS); 




-------------------------- online字典
begin
 dbms_logmnr.start_logmnr(startScn => 23573690,
                          endScn   => 23632671,
                          Options  => dbms_logmnr.DICT_FROM_ONLINE_CATALOG + dbms_logmnr.CONTINUOUS_MINE);
end;



begin
 dbms_logmnr.start_logmnr(startScn => 23573690,
                                   endScn   => 23632671,
                                   Options  => dbms_logmnr.DICT_FROM_REDO_LOGS +
                                               dbms_logmnr.CONTINUOUS_MINE);
end;


export NLS_DATE_FORMAT='YYYY-MM-DD HH24:mi:ss'
list archivelog all  completed between '2015-06-03 08:00:00' and '2015-06-03 09:00:00';
exec SYS.DBMS_LOGMNR.ADD_LOGFILE( '/u01/app/oracle11g/flash_recovery_area/TEST/archivelog/2015_06_03/o1_mf_1_505_7w35gdnx_.arc', sys.dbms_logmnr.New); 
BEGIN 
	DBMS_LOGMNR.START_LOGMNR( 
	STARTTIME => '2015-06-03 11:10:12', 
	ENDTIME => '2015-06-03 11:13:06', 
	OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE); 
END; 
/

---查询挖掘到的结果
select a.SCN,a.TIMESTAMP,a.SQL_REDO from v$logmnr_contents A where table_name='XXXX' and OPERATION='INSERT' order by a.SCN;




--清除控制文件中关于v$archived_log的信息
execute sys.dbms_backup_restore.resetCfileSection(11);

---恢复归档
   1.恢复全部归档日志文件
     RMAN> restore archivelog all;
   2.只恢复5到8这四个归档日志文件
     RMAN> restore archivelog from logseq 5 until logseq 8;
   3.恢复从第5个归档日志起
     RMAN> restore archivelog from logseq 5;
   4.恢复7天内的归档日志
     RMAN> restore archivelog from time 'sysdate-7';
   5. sequence between 写法
     RMAN> restore archivelog sequence between 1 and 3;
   6.恢复到哪个日志文件为止
     RMAN> restore archivelog until logseq 3;
   7.从第五个日志开始恢复
     RMAN> restore archivelog low logseq 5;
   8.到第5个日志为止
     RMAN> restore archivelog high logseq 5;
恢复指定的archivelog:restore archivelog sequence 18;
--若归档日志不在本地,则需要恢复相应的归档日志到本地目录。
   run {allocate channel ci type disk;
      set archivelog destination to '/tmp';
      restore archvielog from logseq xxx until logseq xxx;
      release channel ci;
    };



------------------------------------------------------------------------------------------    详细执行计划 Starts

SET SERVEROUTPUT OFF


---------------Session级别:
ALTER SESSION SET STATISTICS_LEVEL=ALL;
----------------- 诧句级别 使用HINT
select /*+ gather_plan_statistics*/ ...

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('d9myghq8vck6r',NULL,'ADVANCED ALLSTATS'));



SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('f6cz4n8y72xdc',0,'ADVANCED ALLSTATS LAST PEEKED_BINDS'));

SET SERVEROUTPUT OFF
SET LINESIZE 9999
COL PLAN_TABLE_OUTPUT FORMAT A200
ALTER SESSION SET STATISTICS_LEVEL=ALL ;
XXXXX
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ADVANCED ALLSTATS LAST PEEKED_BINDS'));



--------------------------------------------------------------------------------------------   其他


 
 SELECT * FROM DBA_STREAMS_UNSUPPORTED;  
 
  -------------------  锁和事务关系
select *   from v$lock a where type in ('TM','TX')  ;

SELECT * from v$transaction;                      

 select trunc(655385/power(2,16)) XIDUSN from dual;
10

  select bitand(655385,to_number('ffff','xxxx'))+0 XIDSLOT from dual;

25 
 
 
 ---------------------------------truncate 后的恢复-------------------------- 恢复的过程会多次执行    alter system flush buffer_cache;


------------ tmp目录空闲空间需要比表的大小大
create table lhr.TRUNTAB    as SELECT * FROM dba_objects where rownum<=10;

SELECT COUNT(1) FROM   lhr.TRUNTAB; 

truncate table lhr.TRUNTAB;

exec fy_recover_data.recover_truncated_table('LHR','TRUNTAB',1);  

SELECT * FROM   lhr.TRUNTAB$$;
insert into lhr.TRUNTAB SELECT * FROM   lhr.TRUNTAB$$;
commit;
drop tablespace   FY_REC_DATA  including contents and datafiles; 
drop tablespace   FY_RST_DATA  including contents and datafiles;

 





 ---闪回
alter table TRUNTAB enable row movement;
flashback table TRUNTAB to timestamp to_date('2014/12/31 17:33:00','YYYY/MM/DD HH24:MI/SS');


 


--------------长查询
SELECT * FROM vw_active_session_lhr a where a.USERNAME IS NOT NULL ;
SELECT * FROM vw_longrun_lhr;
SET LINE 9999  PAGESIZE 9999
col username format a10 
col session_info format a30
col target format a20
col opname format a35 
col message format a80 
col sofar_TOTALWORK format a20 
col progress format a8

SELECT A.USERNAME, 
       (SELECT NB.SID || ',' || NB.SERIAL# || ',' || PR.SPID || ',' ||NB.OSUSER|| ',' ||nb.status|| ',' ||nb.EVENT
          FROM GV$PROCESS PR, GV$SESSION NB
         WHERE NB.PADDR = PR.ADDR
           AND NB.SID = A.SID
           AND NB.SERIAL# = A.SERIAL#
           AND PR.INST_ID = NB.INST_ID) SESSION_INFO,
       A.TARGET,
       A.OPNAME,
       TO_CHAR(A.START_TIME, 'YYYY-MM-DD HH24:MI:SS') START_TIME,
       ROUND(A.SOFAR * 100 / A.TOTALWORK, 2) || '%' AS PROGRESS,
       (A.SOFAR || ':' || A.TOTALWORK) SOFAR_TOTALWORK,
       A.TIME_REMAINING TIME_REMAINING,
       A.ELAPSED_SECONDS ELAPSED_SECONDS,
       MESSAGE MESSAGE
  FROM GV$SESSION_LONGOPS A
 WHERE A.TIME_REMAINING <> 0
 ORDER BY  A.TIME_REMAINING DESC, A.SQL_ID, A.SID;






SELECT * FROM vw_tablespace_datafile_lhr  ;

SELECT * FROM xb_audit_ddl_lhr a WHERE a.id >=2373180 ;
 
 
 -----------------------------------------------------------  归档
alter system set log_archive_dest_1='location=D:\arch';
alter system set log_archive_dest='USE_DB_RECOVERY_FILE_DEST';

show parameter DB_RECOVERY_FILE_DEST


 如果归档日志为自动归档,则切换日志(alter system switch logfile)会自动归档;
 如果为手动归档模式,则不会归档,除非你执行下列命令手动归档:
alter system archive log sequence lognumber
 alter system archive log all
 alter system archive log current

查看归档日志模式:select log_mode from v$database;
 NOARCHIVELOG-- 为不归档
ARCHIVELOG  -- 为自动归档
MANUAL --手动归档模式
 
 修改归档日志模式(必须干净关闭才可修改):
alter database noarchivelog;  --修改为非归档
alter database archivelog;
alter database archivelog manual;
 
 
 
 ----------------通过移动数据文件来均衡文件I/O 
col PHYRDS format 999999999  
col PHYWRTS format 999999999 
col READTIM format 999999999  
col WRITETIM format 999999999 
col name for a60 
set line 9999 pagesize 9999
select name,phyrds,phywrts,readtim,writetim 
from v$filestat a,v$datafile b  
where a.file#=b.file#  
union all 
select name,PHYRDS,PHYWRTS,READTIM,WRITETIM from v$tempstat a,v$tempfile b where a.file#=b.file#
order by readtim desc; 
 




 
  /*查看表最后一次DML时间*/  
select max(ora_rowscn), to_char(scn_to_timestamp(max(ora_rowscn)),'YYYY-MM-DD HH24:MI:SS')  from aa; 
select a.*,dbms_rowid.rowid_block_number(rowid),to_char(ora_rowscn),to_char(scn_to_timestamp(ora_rowscn),'YYYY-MM-DD HH24:MI:SS')   from AA a;

SQL>SELECT ENAME,SAL,DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK#,DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) AS FILE# FROM SCOTT.EMP WHERE EMPNO=7839;
ENAME             SAL     BLOCK#      FILE#
---------- ---------- ---------- ----------
KING             5000         32          4



   ------------------------------------------ 日志切换频率
select b.SEQUENCE#,
       b.FIRST_TIME,
       a.SEQUENCE#,
       a.FIRST_TIME,
       round(((a.FIRST_TIME - b.FIRST_TIME) * 24) * 60, 2) min
  from v$log_history a, v$log_history b
 where a.SEQUENCE# = b.SEQUENCE# + 1
   and b.THREAD# = 1
 order by a.SEQUENCE# desc;

   
   select sequence#,
          first_time,
          nexttime,
          round(((first_time - nexttime) * 24) * 60, 2) diff
     from (select sequence#,
                  first_time,
                  lag(first_time) over(order by sequence#) nexttime
             from v$log_history
            where thread# = 1)
    order by sequence# desc;       
		
		
select max (first_time) max_first_time,
         to_char (first_time, 'yyyy-mm-dd') day,
         count (recid) count_number,
         count (recid) * 200 size_mb
 from v$log_history
group by to_char (first_time, 'yyyy-mm-dd')
order by 1;




--------------------------------------------------------------------------------------------------- 开启10053事件
ALTER SESSION SET EVENTS '10053 trace name context forever, level 1';
SELECT * FROM T_NI_20170612_lhr T WHERE T.OBJECT_TYPE>'TABLE' OR T.OBJECT_TYPE<'TABLE';
ALTER SESSION SET EVENTS '10053 trace name context off';
SELECT VALUE FROM V$DIAG_INFO WHERE NAME='Default Trace File';



--------------------------------------------------------------------------------------------------- 开启10046事件   

10046事件级别:

level 0:禁用SQL_TRACE,等价于SQL_TRACE=FALSE
level 1:启用标准的sql_trace功能跟踪SQL语句,包括解析、执行、提取、提交和回滚等,等价于SQL_TRACE=TRUE
level 4:Level 1 +包括变量(bind values)的详细信息
level 8:Level 1 + 包括等待事件
level 12:包括绑定变量与等待事件,包含Level 1 + Level 4 + Level 8



alter session set SQL_TRACE=true;
alter session set SQL_TRACE=false;
alter session set events '10046 trace name context forever, level 12';
alter session set events '10046 trace name context off';
alter session set events '10046 trace name context off, LEVEL 12';
--对单个 SQL ID 打开10046事件跟踪
ALTER SYSTEM SET EVENTS 'SQL_TRACE [SQL:&&SQL_ID] BIND=TRUE,WAIT=TRUE';
ALTER SYSTEM SET EVENTS 'SQL_TRACE [SQL:C7452AGJ0S0T6] WAIT=TRUE,BIND=TRUE,PLAN_STAT=ALL_EXECUTIONS,LEVEL=12';
--关闭单个SQL的跟踪命令如下所示:
ALTER SYSTEM SET EVENTS 'SQL_TRACE [SQL:&&SQL_ID] OFF';


exec dbms_session.set_sql_trace(true);
exec dbms_session.set_sql_trace(false);
exec dbms_session.session_trace_enable(waits=>true,binds=>true); 
exec dbms_session.session_trace_enable(); 



-----跟踪其它会话
SQL> exec dbms_system.set_ev(sid,serial#,10046,12,'');
SQL> exec dbms_system.set_ev(sid,serial#,10046,0,'');

exec dbms_system.set_sql_trace_in_session(9,437,true);
exec dbms_system.set_sql_trace_in_session(9,437,false);


SQL> exec dbms_monitor.session_trace_enable;
SQL> 执行sql
SQL> exec dbms_monitor.session_trace_disable;
跟踪其他会话:
SQL> exec dbms_monitor.session_trace_enable(session_id=>sid,serial_num=>serial#,waits=>true,binds=>true);
SQL> exec dbms_monitor.session_trace_disable(session_id=>sid,serial_num=>serial#);




--跟踪当前会话:
SQL> oradebug setmypid;
Statement processed.
SQL> oradebug unlimit;
Statement processed.
SQL> oradebug event 10046 trace name context forever,level 12;
Statement processed.
SQL> 执行sql
SQL> oradebug tracefile_name
SQL> oradebug event 10046 trace name context off;
Statement processed.
--跟踪其他会话:
SQL> select spid,pid2  from v$process
  2  where addr in (select paddr from v$session where sid=(select distinct sid from v$mystat));
SPID                PID
------------ ----------
1457                 313
SQL> oradebug setospid 1457;
Statement processed.
或者
SQL> oradebug setorapid 313;
Statement processed.
SQL> oradebug unlimit;
Statement processed.
SQL> oradebug event 10046 trace name context forever,level 12;
Statement processed.
SQL> oradebug tracefile_name
SQL> oradebug event 10046 trace name context off;
Statement processed.





SELECT A.SID,
       B.SERIAL# ,
       C.SPID
FROM   V$MYSTAT  A,
       V$SESSION B ,
       V$PROCESS C
WHERE  A.SID = B.SID
AND B.PADDR=C.ADDR
AND    ROWNUM = 1;


SELECT B.SID,
       B.SERIAL# ,
       C.SPID
FROM   V$SESSION B ,
       V$PROCESS C
WHERE  B.PADDR=C.ADDR;


--启用errorstack的跟踪来找到出现问题的SQL语句
alter session set events '3001 trace name errorstack level 3';

---跟踪1438的错误
alter system set events '1438 trace name errorstack forever,level 3';  
alter system set events '1438 trace name errorstack off';
alter system set events='1438 trace name errorstack forever,level 3';  
alter system set events='1438 trace name errorstack off';
设置ErrorStack主要有4个级别:
0 仅转储错误堆栈(0级已经被逐渐废弃)
1 转储错误堆栈和函数调用堆栈
2 Level1 + ProcessState
3 Level2 + Context area(显示所有cursors,着重显示当前cursor)





系统默认没有安装dbms_support这个包,可以手动执行$ORACLE_HOME/rdbms/admin/bmssupp.sql脚本来创建该包跟踪当前会话:
SQL> exec dbms_support.start_trace
SQL> 执行sql
SQL> exec dbms_support.stop_trace
跟踪其他会话:等待事件+绑定变量,相当于level 12的10046事件。
SQL> select sid,serial#,username from v$session where ...;
SQL> exec dbms_support.start_trace_in_session(sid=>sid,serial=>serial#,waits=>true,binds=>true);
SQL> exec dbms_support.stop_trace_in_session(sid=>sid,serial=>serial#);


----select value from v$diag_info where name like '%Default%';

--转储文件路径
col TRACE_FILE_NAME format a100
SELECT d.value || '/' || lower(rtrim(i.instance, chr(0))) || '_ora_' ||
       p.spid || '.trc' trace_file_name
FROM   (SELECT p.spid
        FROM   v$mystat  m,
               v$session s,
               v$process p
        WHERE  m.statistic# = '1'
        AND    s.sid = m.sid
        AND    p.addr = s.paddr) p,
       (SELECT t.instance
        FROM   v$thread    t,
               v$parameter v
        WHERE  v.name = 'thread'
        AND    (v.value = '0' OR to_char(t.thread#) = v.VALUE)) i,
       (SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') d;

CREATE OR REPLACE VIEW VW_TRACEFILE_ALL_LHR AS 
SELECT INST_ID,
       SID,
       SERIAL#,
       SPID,
       USERNAME,
       D.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' ||
       P.SPID || '.trc' TRACE_FILE_NAME
  FROM (SELECT S.INST_ID, S.SID, S.SERIAL#, P.SPID, S.USERNAME
          FROM GV$SESSION S, GV$PROCESS P
         WHERE P.ADDR = S.PADDR
           AND S.INST_ID = P.INST_ID) P,
       (SELECT T.INSTANCE
          FROM GV$THREAD T, GV$PARAMETER V
         WHERE V.NAME = 'thread'
           AND (V.VALUE = '0' OR TO_CHAR(T.THREAD#) = V.VALUE)) I,
       (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'user_dump_dest') D;

--创建公共同义词:
CREATE OR REPLACE PUBLIC SYNONYM SYN_TRACEFILE_ALL_LHR FOR VW_TRACEFILE_ALL_LHR;

在Oracle 11g中可以直接查询V$PROCESS获取TRACE文件:
CREATE OR REPLACE VIEW VW_TRACEFILE_LHR AS 
SELECT S.INST_ID, S.SID, S.SERIAL#, P.SPID, S.USERNAME, P.TRACEFILE
  FROM GV$SESSION S, GV$PROCESS P
 WHERE P.ADDR = S.PADDR
   AND S.INST_ID = P.INST_ID ;

--创建公共同义词:
CREATE OR REPLACE PUBLIC SYNONYM SYN_TRACEFILE_LHR FOR VW_TRACEFILE_LHR;



--------------------------如何生成 systemstate dump   systemdump systemstate
###sysdba可登陆时
$sqlplus "/as sysdba"
SQL>oradebug setmypid
SQL>--其中266表示dump的级别,不用调整,即把系统当前各个进程正在执行什么、正在等待什么全部抓下来
SQL>oradebug dump systemstate 266  --oradebug dump systemdump 266;
SQL>--等上30秒到1分钟
SQL>oradebug dump systemstate 266


###sysdba不可登陆时
sqlplus -prelim "/as sysdba"
SQL>oradebug setmypid
SQL>--其中266表示dump的级别,不用调整,即把系统当前各个进程正在执行什么、正在等待什么全部抓下来
SQL>oradebug dump systemstate 266
SQL>--等上30秒到1分钟
SQL>oradebug dump systemstate 266
SQL> oradebug tracefile_name
/u02/app/oracle/diag/rdbms/lhrdb/lhrdb/trace/lhrdb_ora_46679.trc


----------HANGANALYZE 分析
SQL> alter session set events 'immediate trace name HANGANALYZE level 3';
或者:
SQL>ORADEBUG hanganalyze 3 --for 单实例
       
------for RAC 实例
SQL>ORADEBUG setmypid
SQL>ORADEBUG setinst all
SQL>ORADEBUG -g def hanganalyze 3 	
       
The levels are defined as follows:
10	Dump all processes (IGN state)
5     	Level 4 + Dump all processes involved in wait chains (NLEAF state)
4 	Level 3 + Dump leaf nodes (blockers) in wait chains (LEAF,LEAF_NW,IGN_DMP state)
3 	Level 2 + Dump only processes thought to be in a hang (IN_HANG state)
1-2  	Only HANGANALYZE output, no process dump at all



----------------------------------------------------------------------------------------------------- 层次查询
 SELECT LEVEL,
        id,
        parentid,
        (lpad(' ', 8 * (LEVEL - 1)) || LEVEL || ':' || l.name) names,
        substr(SYS_CONNECT_BY_PATH(NAME, '=>'), 3),
        connect_by_root(NAME) root,
        decode(LEVEL,
               2,
               NAME,
               substr(SYS_CONNECT_BY_PATH(NAME, '=>'),
                      instr(SYS_CONNECT_BY_PATH(NAME, '=>'), '>', 1, 2) + 1,
                      (instr(SYS_CONNECT_BY_PATH(NAME, '=>'), '=', 1, 3) -
                      instr(SYS_CONNECT_BY_PATH(NAME, '=>'), '>', 1, 2) - 1))) root2,
        decode(connect_by_isleaf, 1, 'Y', 0, 'N') is_leaf,
        decode(connect_by_iscycle, 1, 'Y', 0, 'N') is_leaf
 FROM   xb_location l
 START  WITH l.parentid IS NULL
 CONNECT BY nocycle PRIOR l.id = l.parentid;




----------------------------------------------------------------------------------------------------- 启用系统触发器 登录触发器
alter system  set "_system_trig_enabled"=true; --默认
alter system reset "_system_trig_enabled" scope=spfile sid='*';


 
-----------------------------------------------------------------------------------------------------   闪回

select * from user_recyclebin t where t.original_name LIKE'TMP_AB%';
select * from dba_recyclebin;

--ddl
flashback table TMP_AB  to before drop rename to old_t;
flashback table "BIN$B/HqKSpfWrvgU4I7qMATlg==$0"  to before drop;

--dml
alter table old_t enable row movement;
flashback table old_t to timestamp to_date('2012/11/13 16:16:40','YYYY/MM/DD HH24:MI/SS');


 
--insert into xb_port 
SELECT *
FROM   xb_port AS OF TIMESTAMP TO_TIMESTAMP('2013-04-25 16:53:28', 'YYYY-MM-DD HH24:MI:SS') 
WHERE  id = 307247374 ;
commit;



SELECT timestamp_to_scn(TO_TIMESTAMP('2012-11-13 16:25:17',
                                     'YYYY-MM-DD HH24:MI:SS')),
       to_char(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) AS SCN
FROM   dual;

----查询
SELECT versions_starttime,
       versions_startscn,
       versions_endtime,
       versions_endscn,
       versions_xid,
       versions_operation,
       id,
       NAME
FROM   xb_location versions BETWEEN TIMESTAMP to_timestamp('2012-11-13 15:10:40', 'yyyy-mm-dd hh24:mi:ss') AND to_timestamp(to_char(SYSDATE, 'yyyy-mm-dd hh24:mi:ss'), 'yyyy-mm-dd hh24:mi:ss')
WHERE  versions_xid IS NOT NULL
ORDER  BY versions_starttime;


SELECT versions_starttime,
       versions_startscn,
       versions_endtime,
       versions_endscn,
       versions_xid,
       versions_operation,
       id,
       NAME
FROM   xb_location versions BETWEEN scn minvalue AND maxvalue
WHERE  versions_xid IS NOT NULL
ORDER  BY versions_starttime;

 
------------------------------------------------------- undo表空间
 --1、系统段  2、非系统段  3、表空间脱机后的defered段
SELECT d.segment_type,
       COUNT(1)
FROM   dba_segments d
GROUP  BY d.segment_type;

select * from dba_segments d where d.segment_type in ('TYPE2 UNDO','ROLLBACK') ;
select * from dba_rollback_segs;
select * from dba_undo_extents;
select * from v$transaction;
select * from v$rollstat;
select * from v$rollname;
select * from dba_extents d where d.segment_name='_SYSSMU25_17381587$';
select * from v$undostat; ---mount状态可查
--ssolderrcnt : snapshot too  old error count 

select status,count(*) from dba_rollback_segs group by status; 

SELECT d.TABLESPACE_NAME,
       d.STATUS,
       SUM(bytes) / 1024 / 1024
FROM   dba_undo_extents d
GROUP  BY d.TABLESPACE_NAME,
          d.status
ORDER  BY d.TABLESPACE_NAME;

SELECT r.tablespace_name,
       r.status "Status",
       r.segment_name "Name",
       s.extents "Extents",
       TO_CHAR((s.bytes / 1024 / 1024), '99999990.000') "SizeM",
       s.segment_type
FROM   dba_rollback_segs r,
       dba_segments      s
WHERE  r.segment_name = s.segment_name
AND    s.segment_type IN ('ROLLBACK', 'TYPE2 UNDO')
ORDER  BY r.tablespace_name,
          5 DESC;

----估算undo需要的大小
SELECT (UR * (UPS * DBS)) AS "Bytes"     FROM (SELECT value AS UR FROM v$parameter WHERE name = 'undo_retention'),          (SELECT undoblks/((end_time-begin_time)*86400) AS UPS           FROM v$undostat           WHERE undoblks = (SELECT MAX(undoblks) FROM v$undostat)),          (SELECT block_size AS DBS           FROM dba_tablespaces           WHERE tablespace_name = (SELECT UPPER(value) FROM v$parameter WHERE name = 'undo_tablespace'));


-------------------- 已用大小
set line 9999
select s.sid,
       s.serial#,
       s.sql_id,
       v.usn,
       segment_name,
       r.status,
       v.rssize / 1024 / 1024 mb
  From dba_rollback_segs r, v$rollstat v, v$transaction t, v$session s
 Where r.segment_id = v.usn
   and v.usn = t.xidusn
   and t.addr = s.taddr
 order by segment_name;


 ------undo总大小
 
SET ECHO        OFF
SET FEEDBACK    6
SET HEADING     ON
SET LINESIZE    180
SET PAGESIZE    50000
SET TERMOUT     ON
SET TIMING      OFF
SET TRIMOUT     ON
SET TRIMSPOOL   ON
SET VERIFY      OFF

COLUMN status      FORMAT a9                 HEADING 'Status'
COLUMN name        FORMAT a30                HEADING 'Tablespace Name'
COLUMN type        FORMAT a15                HEADING 'TS Type'
COLUMN extent_mgt  FORMAT a10                HEADING 'Ext. Mgt.'
COLUMN segment_mgt FORMAT a10                HEADING 'Seg. Mgt.'
COLUMN ts_size     FORMAT 9,999,999,999,999  HEADING 'Tablespace Size'
COLUMN used        FORMAT 9,999,999,999,999  HEADING 'Used (in bytes)'
COLUMN free        FORMAT 9,999,999,999,999  HEADING 'Free (in bytes)'
COLUMN pct_used    FORMAT 999                HEADING 'Pct. Used'


SELECT
    d.status                                            status
  , d.tablespace_name                                   name
  , d.contents                                          type
  , d.extent_management                                 extent_mgt
  , d.segment_space_management                          segment_mgt
  , NVL(a.bytes, 0)                                     ts_size
  , NVL(a.bytes - NVL(f.bytes, 0), 0)                   used
  , NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0) pct_used
FROM 
    sys.dba_tablespaces d
  , ( select tablespace_name, sum(bytes) bytes
      from dba_data_files
      group by tablespace_name
    ) a
  , ( select tablespace_name, sum(bytes) bytes
      from dba_free_space
      group by tablespace_name
    ) f
WHERE
      d.tablespace_name = a.tablespace_name(+)
  AND d.tablespace_name = f.tablespace_name(+)
  AND  d.tablespace_name like '%UNDO%'
ORDER BY
  2;



--数据文件管理参数: db_create_file_dest 
CREATE TABLESPACE test DATAFILE SIZE 10m;
alter database datafile 3  resize 5G;  
alter database tempfile 1  resize 2G;  
alter database datafile 3   autoextend off;  
alter database tempfile 1   autoextend off;  


① 分析数据文件块,转储数据文件n的块m
alter system dump datafile n block m;
② 分析日志文件
alter system dump logfile logfilename;
③ 分析控制文件的内容
alter session set events 'immediate trace name CONTROLF level 10';
④ 分析所有数据文件头
alter session set events 'immediate trace name FILE_HDRS level 10';
⑤ 分析日志文件头
alter session set events 'immediate trace name REDOHDR level 10';
⑥ 分析系统状态,最好每10分钟一次,做三次对比
alter session set events 'immediate trace name SYSTEMSTATE level 10';
⑦ 分析进程状态
alter session set events 'immediate trace name PROCESSSTATE level 10';
⑧ 分析Library Cache的详细情况
alter session set events 'immediate trace name library_cache level 10';





-------------- 重建undo表空间
create undo tablespace undotbs2 datafile '+DATA' size 100m reuse autoextend off; 
alter system set undo_tablespace=undotbs2;
drop tablespace undotbs1 including contents and datafiles; 
create undo tablespace undotbs1 datafile '+DATA' size 100m reuse autoextend off;   
alter system set undo_tablespace=undotbs1; 
		 
alter database datafile 3   autoextend off;  
alter database tempfile 1   autoextend off; 



create undo tablespace undotbs2 datafile '+DATA' size 5M;

alter system set undo_tablespace=undotbs2; 
alter tablespace undotabs2 retention guarantee;


select t.rowid,dbms_rowid.rowid_relative_fno(rowid) fno,dbms_rowid.rowid_block_number(rowid) bno,    t.owner,t.object_name from t ;

alter system dump datafile   4 block  6643;

select * from vw_mysession_lhr;


UBA : undo block address



select * from v$obsolete_parameter;


alter database create datafile 3 as '/u03/app/oracle/oradata/ora1024g/undotbs01.dbf' size 50m;


------- undo 
alter system set "_offline_rollback_segments"=true scope=spfile;  
alter system set "_offline_rollback_segments"=false scope=spfile;  ---默认
alter system reset "_offline_rollback_segments" scope=spfile sid='*';


*._offline_rollback_segments=('_SYSSMU154_3691636531$','_SYSSMU155_3686385895$','_SYSSMU156_3796802683$','_SYSSMU157_2723916652$','_SYSSMU158_1435464080$') 


_offline_rollback_segment='_SYSSMU3$'
_newsort_enabled  --排序

 
-------- 如果undo为recover状态的话还需要加如下参数
alter system set "_corrupted_rollback_segments"='_SYSSMU1$','_SYSSMU2$','_SYSSMU3$','_SYSSMU4$','_SYSSMU5$','_SYSSMU6$','_SYSSMU7$','_SYSSMU8$','_SYSSMU9$','_SYSSMU10$' scope=spfile;

alter system reset "_corrupted_rollback_segments" scope=spfile sid='*';


 alter system set "_corrupted_rollback_segments"='_SYSSMU1$','_SYSSMU2$','_SYSSMU3$','_SYSSMU4$','_SYSSMU5$','_SYSSMU6$','_SYSSMU7$','_SYSSMU8$','_SYSSMU9$','_SYSSMU10$','_SYSSMU11$','_SYSSMU12$','_SYSSMU13$','_SYSSMU14$','_SYSSMU15$','_SYSSMU16$','_SYSSMU17$','_SYSSMU18$','_SYSSMU19$','_SYSSMU20$' scope=spfile;

*._corrupted_rollback_segments=('_SYSSMU10_3271578125','_SYSSMU11_125382609','_SYSSMU1_1240252155','_SYSSMU12_2245433549','_SYSSMU13_3242268464','_SYSSMU14_44821983','_SYSSMU15_1872739176','_SYSSMU16_1376564431','_SYSSMU17_1839632768','_SYSSMU18_3088942417','_SYSSMU19_2867910983','_SYSSMU20_948290921','_SYSSMU2_111974964','_SYSSMU3_4004931649','_SYSSMU4_1126976075','_SYSSMU5_2968973961','_SYSSMU6_2060978448','_SYSSMU7_4222772309','_SYSSMU8_3612859353','_SYSSMU9_2370500926')


 drop rollback segment "drop rollback segment";
drop rollback segment  "_SYSSMU154_3691636531$";



---- 查询undo段 
strings /u01/app/oracle/oradata/ora11g/system01.dbf | grep _SYSSMU | sort -u >/tmp/system.txt

more /tmp/system.txt

注意:通过system01.dbf查出了,正在使用的undo segment,以上按使用时间做了排序,注意只选择那些排在最前面的(相同回滚段);默认每个undo tablespace 会应用10个undo segments。



-------  不能创建undo文件(ORA-01178错误),无备份的情况下采用隐含参数启动数据库
set line 9999 
col name format a100 
select file#, name,status,enabled from v$datafile; 

select * from v$recover_file;

alter system set undo_management=manual scope=spfile;
alter database datafile 3 offline;
alter system set undo_tablespace=SYSTEM  scope=spfile;
alter system set "_offline_rollback_segments"=true scope=spfile; 
! strings '/u01/app/oracle/oradata/orcltest/system01.dbf'  | grep _SYSSMU | sort -u
 alter system set 
"_corrupted_rollback_segments"='_SYSSMU3_4004931649$','_SYSSMU3_4160240979$','_SYSSMU34_2573821980$','_SYSSMU35_3476245049$','_SYSSMU36_353473384$','_SYSSMU37_682878819$','_SYSSMU38_2521239011$','_SYSSMU39_1467520375$','_SYSSMU40_753689919$','_SYSSMU4_1126976075$','_SYSSMU4_348804819$','_SYSSMU5_2968973961$','_SYSSMU5_4011504098$','_SYSSMU6_2060978448$','_SYSSMU6_3654194381$','_SYSSMU7_4222772309$','_SYSSMU7_894058185$','_SYSSMU8_3612859353$','_SYSSMU8_87803851$','_SYSSMU9_2370500926$','_SYSSMU9_2370500926$','_SYSSMU9_3945653786$'   scope=spfile;
shutdown immediate;
startup mount;
alter database open;
select segment_name,status,tablespace_name from dba_rollback_segs;
drop tablespace UNDOTBS1;
create undo tablespace undotbs1 datafile '/u01/app/oracle/oradata/orcltest/undotbs01.dbf' size 50m autoextend on;
alter system set undo_tablespace=UNDOTBS1  scope=spfile;
alter system set undo_management=auto  scope=spfile;
alter system reset "_offline_rollback_segments" scope=spfile sid='*';
alter system reset "_corrupted_rollback_segments" scope=spfile sid='*';
shutdown immediate;
startup



---注意回滚段的命名规范:
11g: _SYSSMU1_1189172979$、 _SYSSMU2_1189172979$ 。。。_SYSSMU10_1189172979$
10g、9i:_SYSSMU1$、_SYSSMU2$、_SYSSMU3$  。。。。_SYSSMU10$
8i 为rollbackspace 即RBS空间:RBS0、RBS1、RBS2 。。。。RBS6
7.3 :RB1、RB2.。。。。RB6






*.LOCAL_LISTENER='(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=22.188.194.64)(PORT=1523)))'
*.LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=22.188.194.64)(PORT=1522))';

ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=22.188.194.64)(PORT=1523)))';
ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=22.188.194.64)(PORT=1522))';

ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=22.188.194.64)(PORT=1523)))','(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=22.188.194.64)(PORT=1522)))';
ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=22.188.194.64)(PORT=1522))','(ADDRESS=(PROTOCOL=TCP)(HOST=22.188.194.64)(PORT=1523))';



ALTER SYSTEM REGISTER;






------------ 数据文件自动扩展

alter database datafile 5 autoextend on next 5M;
如果是bigfile可以采用: ALTER TABLESPACE TBS2 AUTOEXTEND ON NEXT   20G;

修改表空间数据文件大小为不限制的语句为:
alter database datafile '/oradata/orcl/demo01.dbf' autoextend on maxsize unlimited;

创建表空间数据文件大小为不限制的语句为:
create tablespace demo2 datafile '/oradata/orcl/demo201.dbf' size 10M autoextend on maxsize unlimited;

----取消已有数据文件的自动增长方式
alter database datafile 'i:\oracle\oradata\dmusertbs01.dbf' autoextend off;



------------ 根据文件号和块号查询数据库对象
SELECT tablespace_name,
       segment_type,
       owner,
       segment_name,
       partition_name
FROM   dba_extents
WHERE  file_id = &file_id
AND    &block_id BETWEEN block_id AND block_id + blocks - 1
;


SELECT ENAME,SAL,ROWID,DBMS_ROWID.ROWID_CREATE(1,125628,147,4,7),DBMS_ROWID.ROWID_OBJECT(ROWID) OBJECT_ID,DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK#,DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) FILE#,DBMS_ROWID.ROWID_ROW_NUMBER(ROWID) RN  FROM SCOTT.EMP WHERE EMPNO=7839;

SELECT ENAME,
       SAL,
       ROWID,
       DBMS_ROWID.ROWID_CREATE(1, 125628, 147, 4, 7),
       DBMS_ROWID.ROWID_OBJECT(ROWID) OBJECT_ID,
       DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK#,
       DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) FILE#,
       DBMS_ROWID.ROWID_ROW_NUMBER(ROWID) RN
  FROM SCOTT.EMP
 WHERE EMPNO = 7839;


SELECT ROWID,
       dbms_rowid.rowid_object(ROWID) object_id,
       dbms_rowid.rowid_relative_fno(ROWID) file_id,
       dbms_rowid.rowid_block_number(ROWID) block_id,
       d.*
FROM   scott.SALGRADE  d
WHERE  dbms_rowid.rowid_block_number(ROWID) = 163
AND    dbms_rowid.rowid_relative_fno(ROWID) = 4;


SELECT DBMS_ROWID.ROWID_CREATE(1,
                               (SELECT DATA_OBJECT_ID
                                  FROM DBA_OBJECTS
                                 WHERE OBJECT_ID = ROW_WAIT_OBJ#),
                               ROW_WAIT_FILE#,
                               ROW_WAIT_BLOCK#,
                               ROW_WAIT_ROW#),
       A.ROW_WAIT_OBJ#,
       A.ROW_WAIT_FILE#,
       A.ROW_WAIT_BLOCK#,
       A.ROW_WAIT_ROW#,
       (SELECT D.OWNER || '.' || D.OBJECT_NAME
          FROM DBA_OBJECTS D
         WHERE OBJECT_ID = ROW_WAIT_OBJ#) OBJECT_NAME
  FROM V$SESSION A
 WHERE A.ROW_WAIT_OBJ# <> -1;
 
 
 SELECT * FROM SYS.COM$ A WHERE A.ROWID='AAAACJAABAAAARGAAA';






---------------------- 删除主键及主键索引
--alter table table_name add constraint pk_id primary key(object_id);
alter table table_name drop primary key cascade drop index;
alter table table_name drop constraint constraint_name cascade drop index;


--------------------------------------------------------- awr


----- 生成awr
select * from table(dbms_workload_repository.awr_report_html(3424884828,1,1161,1165));
@$ORACLE_HOME/rdbms/admin/awrrpt.sql;


----视图


select * from DBA_HIST_WR_CONTROL;
select * from DBA_HIST_SNAPSHOT;
select * from DBA_HIST_ACTIVE_SESS_HISTORY;
select * from DBA_HIST_ASH_SNAPSHOT;

select * from DBA_HIST_SEG_STAT;
select * from DBA_HIST_SQLBIND; 
select * from DBA_HIST_SQLSTAT;
select * from DBA_HIST_SQLTEXT;
select * from DBA_HIST_SQL_BIND_METADATA;
select * from DBA_HIST_SQL_PLAN;



--------- sql部分
select &begin_snap || '~' || &end_snap snap_id_range,
       (SELECT round(sum(db_time) / 1000000 / 60, 2) db_time_m
          FROM (select lead(a.value, 1, null) over(partition by b.startup_time order by b.end_interval_time) - a.value db_time
                  from dba_hist_sys_time_model a, dba_hist_snapshot b
                 where a.snap_id = b.snap_id
                   and a.dbid = b.dbid
                   and a.instance_number = b.instance_number
                   and a.stat_name = 'DB time'
                   and a.snap_id between &begin_snap and &end_snap)
         where db_time IS NOT NULL) "db_time(m)",
       round(nvl((sqt.elap / 1000000), to_number(null)), 2) "Elapsed Time (s)",
       round(nvl((sqt.cput / 1000000), to_number(null)), 2) "CPU Time (s)",
       round(nvl((sqt.iowait_delta / 1000000), to_number(null)), 2) "User I/O Time (s)",
       round(nvl((sqt.buffer_gets_delta), to_number(null)), 2) "Buffer Gets",
       round(nvl((sqt.disk_reads_delta), to_number(null)), 2) "Physical Reads",
       round(nvl((sqt.rows_processed_delta), to_number(null)), 2) "Rows Processed",
       round(nvl((sqt.parse_calls_delta), to_number(null)), 2) "Parse Calls",
       sqt.exec executions,
       round(decode(sqt.exec,
                    0,
                    to_number(null),
                    (sqt.elap / sqt.exec / 1000000)),
             2) "Elapsed Time per Exec (s)",
       round(decode(sqt.exec,
                    0,
                    to_number(null),
                    (sqt.cput / sqt.exec / 1000000)),
             2) "CPU per Exec (s)",
       round(decode(sqt.exec,
                    0,
                    to_number(null),
                    (sqt.iowait_delta / sqt.exec / 1000000)),
             2) "UIO per Exec (s)",
       round(sqt.cput * 100 / sqt.elap, 2) "%CPU",
       round(sqt.iowait_delta * 100 / sqt.elap, 2) "%IO",
       round(sqt.elap * 100 /
             (SELECT sum(db_time)
                FROM (select lead(a.value, 1, null) over(partition by b.startup_time order by b.end_interval_time) - a.value db_time
                        from dba_hist_sys_time_model a, dba_hist_snapshot b
                       where a.snap_id = b.snap_id
                         and a.dbid = b.dbid
                         and a.instance_number = b.instance_number
                         and a.stat_name = 'DB time'
                         and a.snap_id between &begin_snap and &end_snap)
               where db_time IS NOT NULL),
             2) "elapsed/dbtime",
       sqt.sql_id,
       parsing_schema_name,
       (decode(sqt.module, null, null, sqt.module)) module,
       nvl((select dbms_lob.substr(st.sql_text, 2000, 1)
             from dba_hist_sqltext st
            WHERE st.sql_id = sqt.sql_id
              and st.dbid = sqt.dbid),
           (' ** SQL Text Not Available ** ')) sql_text
  from (select sql_id,
               a.dbid,
               a.parsing_schema_name,
               max(module || '--' || a.action) module,
               sum(elapsed_time_delta) elap,
               sum(cpu_time_delta) cput,
               sum(executions_delta) exec,
               SUM(a.iowait_delta) iowait_delta,
               sum(a.buffer_gets_delta) buffer_gets_delta,
               sum(a.disk_reads_delta) disk_reads_delta,
               sum(a.rows_processed_delta) rows_processed_delta,
               sum(a.parse_calls_delta) parse_calls_delta
          from dba_hist_sqlstat a
         where &begin_snap < snap_id
           and snap_id <= &end_snap
         group by sql_id, parsing_schema_name, a.dbid) sqt
 order by nvl(sqt.elap, -1) desc, sqt.sql_id
;

---------  信息
select s.snap_date,
       snap_time_range,
       t.snap_id + 1 snap_id,
       decode(s.redosize, null, '--shutdown or end--', s.currtime) "TIME",
       startup_time,
       to_char(round(s.seconds / 60, 2)) "elapse(min)",
       round(t.db_time / 1000000 / 60, 2) "DB time(min)",
       s.redosize redo,
       round(s.redosize / s.seconds, 2) "redo/s",
       round(s.redosize / s.transactions, 2) "redo/t",
       s.logicalreads logical,
       round(s.logicalreads / s.seconds, 2) "logical/s",
       round(s.logicalreads / s.transactions, 2) "logical/t",
       physicalreads physical,
       round(s.physicalreads / s.seconds, 2) "phy/s",
       round(s.physicalreads / s.transactions, 2) "phy/t",
       s.executes execs,
       round(s.executes / s.seconds, 2) "execs/s",
       round(s.executes / s.transactions, 2) "execs/t",
       s.parse,
       round(s.parse / s.seconds, 2) "parse/s",
       round(s.parse / s.transactions, 2) "parse/t",
       s.hardparse,
       round(s.hardparse / s.seconds, 2) "hardparse/s",
       round(s.hardparse / s.transactions, 2) "hardparse/t",
       s.transactions trans,
       round(s.transactions / s.seconds, 2) "trans/s"
  from (select curr_redo - last_redo redosize,
               curr_logicalreads - last_logicalreads logicalreads,
               curr_physicalreads - last_physicalreads physicalreads,
               curr_executes - last_executes executes,
               curr_parse - last_parse parse,
               curr_hardparse - last_hardparse hardparse,
               curr_transactions - last_transactions transactions,
               round(((currtime + 0) - (lasttime + 0)) * 3600 * 24, 0) seconds,
               to_char(currtime, 'yyyy-mm-dd') snap_date,
               to_char(currtime, 'hh24:mi') currtime,
               to_char(lasttime, 'YYYY-MM-DD HH24:MI') || '~' ||
               to_char(currtime, 'YYYY-MM-DD HH24:MI') snap_time_range,
               currsnap_id endsnap_id,
               to_char(startup_time, 'yyyy-mm-dd hh24:mi:ss') startup_time
          from (select a.redo last_redo,
                       a.logicalreads last_logicalreads,
                       a.physicalreads last_physicalreads,
                       a.executes last_executes,
                       a.parse last_parse,
                       a.hardparse last_hardparse,
                       a.transactions last_transactions,
                       lead(a.redo, 1, null) over(partition by b.startup_time order by b.end_interval_time) curr_redo,
                       lead(a.logicalreads, 1, null) over(partition by b.startup_time order by b.end_interval_time) curr_logicalreads,
                       lead(a.physicalreads, 1, null) over(partition by b.startup_time order by b.end_interval_time) curr_physicalreads,
                       lead(a.executes, 1, null) over(partition by b.startup_time order by b.end_interval_time) curr_executes,
                       lead(a.parse, 1, null) over(partition by b.startup_time order by b.end_interval_time) curr_parse,
                       lead(a.hardparse, 1, null) over(partition by b.startup_time order by b.end_interval_time) curr_hardparse,
                       lead(a.transactions, 1, null) over(partition by b.startup_time order by b.end_interval_time) curr_transactions,
                       b.end_interval_time lasttime,
                       lead(b.end_interval_time, 1, null) over(partition by b.startup_time order by b.end_interval_time) currtime,
                       lead(b.snap_id, 1, null) over(partition by b.startup_time order by b.end_interval_time) currsnap_id,
                       b.startup_time
                  from (select snap_id,
                               dbid,
                               instance_number,
                               sum(decode(stat_name, 'redo size', value, 0)) redo,
                               sum(decode(stat_name,
                                          'session logical reads',
                                          value,
                                          0)) logicalreads,
                               sum(decode(stat_name,
                                          'physical reads',
                                          value,
                                          0)) physicalreads,
                               sum(decode(stat_name, 'execute count', value, 0)) executes,
                               sum(decode(stat_name,
                                          'parse count (total)',
                                          value,
                                          0)) parse,
                               sum(decode(stat_name,
                                          'parse count (hard)',
                                          value,
                                          0)) hardparse,
                               sum(decode(stat_name,
                                          'user rollbacks',
                                          value,
                                          'user commits',
                                          value,
                                          0)) transactions
                          from dba_hist_sysstat
                         where stat_name in
                               ('redo size',
                                'session logical reads',
                                'physical reads',
                                'execute count',
                                'user rollbacks',
                                'user commits',
                                'parse count (hard)',
                                'parse count (total)')
                         group by snap_id, dbid, instance_number) a,
                       dba_hist_snapshot b
                 where a.snap_id = b.snap_id
                   and a.dbid = b.dbid
                   and a.instance_number = b.instance_number
                 order by end_interval_time)) s,
       (select lead(a.value, 1, null) over(partition by b.startup_time order by b.end_interval_time) - a.value db_time,
               lead(b.snap_id, 1, null) over(partition by b.startup_time order by b.end_interval_time) endsnap_id,
               b.snap_id
          from dba_hist_sys_time_model a, dba_hist_snapshot b
         where a.snap_id = b.snap_id
           and a.dbid = b.dbid
           and a.instance_number = b.instance_number
           and a.stat_name = 'DB time') t
 where s.endsnap_id = t.endsnap_id
 order by s.snap_date desc, snap_id desc, time asc;


 ----主机信息
 SELECT s.snap_id,
       DB_NAME,
       s.dbid,
       INSTANCE_NAME,
       s.instance_number,
       s.startup_time,
       Version           Release,
       PARALLEL          RAC,
       HOST_NAME,
       di.platform_name,
       v.cpus            CPUS,
       v.cores,
       v.sockets,
       v.Memory          "Memory (GB)"
FROM   DBA_HIST_DATABASE_INSTANCE di,
       DBA_HIST_SNAPSHOT s,
       (SELECT snap_id,
               dbid,
               instance_number,
               SUM(CPUs) CPUs,
               SUM(Cores) Cores,
               SUM(Sockets) Sockets,
               SUM(Memory) Memory
        FROM   (SELECT o.snap_id,
                       o.dbid,
                       o.instance_number,
                       decode(o.stat_name, 'NUM_CPUS', o.value) CPUs,
                       decode(o.stat_name, 'NUM_CPU_CORES', o.value) Cores,
                       decode(o.stat_name, 'NUM_CPU_SOCKETS', o.value) Sockets,
                       decode(o.stat_name,
                              'PHYSICAL_MEMORY_BYTES',
                              trunc(o.value / 1024 / 1024 / 1024, 2)) Memory
                FROM   dba_hist_osstat o
                WHERE  o.stat_name IN
                       ('NUM_CPUS',
                        'NUM_CPU_CORES',
                        'NUM_CPU_SOCKETS',
                        'PHYSICAL_MEMORY_BYTES'))
        GROUP  BY snap_id,
                  dbid,
                  instance_number) v
WHERE  s.instance_number = di.instance_number
AND    s.startup_time = di.startup_time
AND    s.dbid = di.dbid
AND    s.snap_id = v.snap_id
AND    s.dbid = s.dbid
AND    s.instance_number = v.instance_number;




------------------------------------------------------------------------------------------  临时表
基于事务: create global temporary table lhr.cgtt_temp_sw on commit delete rows as select * from dba_objects; 
创建索引: create index ind_cgtt_object_ID on cgtt_temp_sw(object_ID);

基于会话: create global temporary table lhr.cgtt_temp_hh on commit preserve rows as select * from dba_objects; 
创建索引:需重开会话: create index ind_cgtt_object_ID2 on cgtt_temp_hh(object_ID);


select * from VW_TEMP_OBJECT_LHR;

Select se.username,
        se.sid,
        su.extents,
        (su.blocks *
        to_number((select rtrim(value)
                     from v$parameter p
                    WHERE p.NAME = 'db_block_size'))) / 1024 / 1024 as Size_m,
        tablespace,
        segtype,
        (SELECT a.SQL_TEXT
           FROM v$sql a
          WHERE a.SQL_ID = su.SQL_ID
            and rownum = 1) SQL_TEXT
   from v$sort_usage su, v$session se
  where su.session_addr = se.saddr 
  order by se.username, se.sid;

-------------------------------------- catalog库
SQL> create tablespace rman_ts datafile '/lhrdata/u01/app/oracle/oradata/orcllinux/rman.dbf' size 1G;
表空间已创建。
SQL> create user rc identified by lhr default tablespace rman_ts quota unlimited on rman_ts;
用户已创建。
SQL> grant recovery_catalog_owner to rc;---包含了connect的角色权限
授权成功。
SQL> grant RESOURCE to rc;
授权成功。
SQL> HOST
[oracle@lhr_linux ~]$ rman catalog rc/lhr
恢复管理器: Release 11.2.0.1.0 - Production on 星期四 4月 10 15:08:22 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
连接到恢复目录数据库
RMAN> create catalog tablespace rman_ts;
恢复目录已创建
RMAN> connect target / 
连接到目标数据库: ORCLLINU (DBID=534927627)
RMAN> register database;
注册在恢复目录中的数据库
正在启动全部恢复目录的 resync
完成全部 resync
RMAN> exit



----中央目录
oraInventory目录的位置是由oraInst.loc文件决定的:
AIX和Linux平台:/etc/oraInst.loc
/oracle/app/oraInventory/ContentsXML/inventory.xml
oracle执行:$ORACLE_HOME/oui/bin/attachHome.sh
步骤1:添加GI_HOME:
./runInstaller -silent -ignoreSysPrereqs -attachHome  ORACLE_HOME="/u01/app/11.2.0/grid" ORACLE_HOME_NAME="OraGI11Home1"  CLUSTER_NODES=test1,test2 CRS=true  "INVENTORY_LOCATION=/u01/app/oraInventory" LOCAL_NODE=test1
步骤2:添加RDBMS_HOME:
$./runInstaller -silent -ignoreSysPrereqs -attachHome  ORACLE_HOME="/u02/app/oracle/product/11.2.0/db_1" ORACLE_HOME_NAME="OraDB11Home1"  CLUSTER_NODES=test1,test2 CRS=true  "INVENTORY_LOCATION=/u01/app/oraInventory" LOCAL_NODE=test1

-------------------------------------------- 卸载软件 GRID 
kill -9 `ps -ef|grep d.bin| grep -v grep | awk '{print $2}'`



卸载GRID软件,grid用户执行:$ORACLE_HOME/deinstall/deinstall
卸载ORACLE软件,oracle用户执行:$ORACLE_HOME/deinstall/deinstall

在Linux下手工卸载RAC的步骤:
① rm -rf /etc/ora* 
② rm -rf /var/tmp/.oracle 
③ 修改/etc/inittab删除以下三行
	h1:2:respawn:/etc/init.evmd run >/dev/null 2>&1 /dev/null 2>&1 /dev/null 2>&1 设置->控制面板->管理工具->服务,或运行services.msc打开服务,停止所有Oracle服务
② 删除Oracle和GRID的安装目录
③ 删除C:\Program Files\Oracle目录
④ 删除C:\windows\temp和C:\temp以及C:\Users\Administrator\Oracle下的文件
⑤ 运行regedit,打开注册表编辑器,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,删除该项
⑥ 运行regedit,打开注册表编辑器,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动这个列表,删除所有Oracle开头的项
⑦ 运行regedit,打开注册表编辑器,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,删除所有Oracle入口
⑧ 开始->设置->控制面板->系统->高级->环境变量,删除环境变量CLASSPATH和PATH中有关Oracle的设定
⑨ 从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标
⑩ 重新启动计算机,重起后才能完全删除Oracle所在目录
若个别文件不能删除,则说明该文件与某个Windows服务相关联,可以先把相关联的服务停止后再删除。



----------------- 加入常用命令
vi /etc/profile
export GRID_HOME=/u01/app/12.1.0/grid
export ORACLE_HOME=/u01/app/12.1.0/grid
export PATH=$PATH:$GRID_HOME/bin


===================================rac中重新运行root.sh脚本===================================================
需要注意的是,多数以pl结尾的脚本从12.1.0.2开始都变为了sh脚本,例如:rootcrs.pl需要修改为rootcrs.sh
In 12.1.0.2, rootcrs.sh/roothas.sh should be used instead of rootcrs.pl/roothas.pl

# OCR备份,物理和逻辑都进行备份
ocrconfig -export /tmp/export_asm_lhr_logical.bak
ocrconfig -manualbackup
ocrconfig -showbackup
ocrconfig -copy +MGMT:/raclhr-cluster/OCRBACKUP/backup_20190822_085506.ocr.285.1016960109 /tmp/export_asm_lhr_physical.bak #从12.2开始的OCR物理备份默认放在MGMT磁盘组,建议单独cp到FS中
cp /u01/app/11.2.0/grid/cdata/raclhr-cluster/backup_20190822_111554.ocr /tmp/export_asm_lhr_physical.bak
#手动对集群相关资源进行备份,包括新增的db、监听、service等



----------------- 日志地址
---11g、12.1.0.2、
日志地址:$ORACLE_HOME/cfgtoollogs/crsconfig/
重置的日志文件:hadelete.log
root.sh脚本日志:rootcrs_rac2.log

---18c
18c的日志地址:$ORACLE_HOME/install/
18c的详细日志地址:/u01/app/grid/crsdata/raclhr-18c-n1/crsconfig/
重置的日志文件:crsdeconfig_raclhr-18c-n1_2019-08-21_11-21-45AM.log
root.sh脚本日志:rootcrs_raclhr-18c-n1_2019-08-21_11-15-48AM.log


export GRID_HOME=$ORACLE_HOME
# 查询ASM磁盘
$GRID_HOME/bin/kfod disks=asm  st=true ds=true cluster=true
# /grid/stage/ext/bin/kfod disks=asm  st=true ds=true cluster=true


#root用户重新执行root.sh,配置文件:$ORACLE_HOME/crs/install/crsconfig_params
crsctl stop crs -f
#kill -9 `ps -ef|grep d.bin| grep -v grep | awk '{print $2}'`
export GRID_HOME=$ORACLE_HOME
$GRID_HOME/crs/install/rootcrs.pl -deconfig -force -verbose
$GRID_HOME/crs/install/rootcrs.pl -deconfig -force -verbose -lastnode -keepdg
#find $ORACLE_HOME/gpnp/* -type f -exec rm -rf {} \;
dd if=/dev/zero of=/dev/rhdiskN bs=1024k count=100  --清理磁盘头
#查看磁盘是否有内容
#AIX用:lquerypv -h  /dev/rhdisk5
#linux用:hexdump /dev/sdb ,例如:hexdump -n 1024 -C /dev/sdb1


#保证集群完全关闭,最好重启OS,检查网络情况,是否有cvuqdisk
#find /u01 -name cvuqdisk*
#rpm -qa cvuqdisk
#rpm -ivh $GRID_HOME/cv/rpm/cvuqdisk-*.rpm
#检查配置文件($ORACLE_HOME/crs/install/crsconfig_params)是否需要修改,18c可以去掉MGMTDB
$GRID_HOME/root.sh  #若出现错误,则在解决错误后可以重复执行,不需要先deconfig

#也可以图形化界面使用GRID配置 
#export DISPLAY=192.168.59.1:0.0
#$ORACLE_HOME/crs/config/config.sh



-----------------------------------------------------
--- 对于18c,需要注意:
#若MGMTDB不需要重复创建,则可以修改配置文件
#配置文件($ORACLE_HOME/crs/install/crsconfig_params)修改以下内容的值为空:

MGMT_DB=
GIMR_CONFIG=

CDATA_BACKUP_DISK_GROUP=
CDATA_BACKUP_FAILURE_GROUPS=
CDATA_BACKUP_QUORUM_GROUPS=
CDATA_BACKUP_DISKS=
CDATA_BACKUP_REDUNDANCY= 
CDATA_BACKUP_AUSIZE=
CDATA_BACKUP_SITES=
CDATA_BACKUP_SIZE=
-----------------------------------------------------


# OCR恢复
crsctl stop crs
crsctl start crs -excl -nocrs
#crsctl stop resource ora.crsd -init
ocrconfig -import /tmp/export_asm_lhr_logical.bak  #逻辑备份恢复
#ocrconfig -restore /tmp/export_asm_lhr_physical.bak  #物理备份恢复
crsctl stop crs
crsctl start crs


===============================================================================================================



 






CRS-4124: Oracle High Availability Services startup failed. -- 报错
CRS-4000: Command Start failed, or completed with errors.
ohasd failed to start: Inappropriate ioctl for device
ohasd failed to start: Inappropriate ioctl for device at /u01/app/11.2.0/grid/crs/install/roothas.pl line 296.
/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1


/nfs/software/db/install/clone/sh/11g/grid/runcluvfy.sh stage -pre crsinst -n ZFLHRDB1,ZFLHRDB2 -verbose -fixup

$ORACLE_HOME/bin/cluvfy stage  -pre crsinst -n all  -verbose -fixup
$ORACLE_HOME/bin/cluvfy stage  -pre crsinst -n all -r 11gR2 -verbose -fixup

find . -name runcluvfy.sh


---GRID_HOME权限修复 
----模拟误操作
getfacl -pR /u01/app  > /tmp/bk_lhr_perm_u01_rac1.txt
./permission.pl /u01/app
ocrconfig -export /tmp/export_asm_lhr.bak


chown -R oracle.oinstall /u01
chmod -R 444 /u01
kill -9 `ps -ef|grep d.bin| grep -v grep | awk '{print $2}'`




Linux环境中还可以通过getfacl和setfacl来进行操作:
--备份
getfacl -pR /u01/app  > /tmp/bk_lhr_perm_u01_rac1.txt
--恢复
chmod -R 775 /u01  #取决于误操作是否有chmod操作
setfacl --restore=/tmp/bk_lhr_perm_u01_rac1.txt

---替换脚本中的主机名,注意大小写
:%s/raclhr-11gr2-n1/raclhr-11gr2-n2/g
:%s/raclhr-11gR2-N1/raclhr-11gR2-N2/g


--备份
./permission.pl /u01/app
--恢复
chmod -R 775 /u01  #取决于误操作是否有chmod操作
./restore-perm-

 


 



About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub、博客园、CSDN和个人微 信公众号( xiaomaimiaolhr)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 ( 646634621 ),注明添加缘由

● 于 2019-09-01 06:00 ~ 2019-09-31 24:00 在西安完成

● 最新修改时间:2019-09-01 06:00 ~ 2019-09-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

● 小麦苗的微店: https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

● 小麦苗出版的数据库类丛书: http://blog.itpub.net/26736162/viewspace-2142121/

● 小麦苗OCP、OCM、高可用网络班: http://blog.itpub.net/26736162/viewspace-2148098/

● 小麦苗腾讯课堂主页: https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客户端扫描下面的二维码来关注小麦苗的微 信公众号( xiaomaimiaolhr)及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。

 

........................................................................................................................

   

 

 

你可能感兴趣的:(小麦苗的常用代码--常用命令(仅限自己使用)--下)