1. 程式人生 > 其它 >Oracle常用指令碼

Oracle常用指令碼

1.檢視SQL執行計劃

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('75n7rjsypwy7w',NULL,'Advanced'))

2.檢視會話執行過的sql

select * from v$open_cursor where sid=xxx;

3.檢視資料庫中表大小

/* Formatted on 2021-08-30 上午 10:00:23 (QP5 v5.163.1008.3004) */
SELECT *
  FROM (  SELECT OWNER,
                 SEGMENT_NAME,
                 ROUND (SUM (BYTES) / 1024 / 1024 / 1024, 2) SIZEG
            FROM DBA_SEGMENTS
           WHERE SEGMENT_TYPE IN ('TABLE PARTITION', 'TABLE')
                 --AND OWNER LIKE '%MONKEY%'
        GROUP BY OWNER, SEGMENT_NAME)
 WHERE SIZEG > 5

4.檢視隱含引數

SELECT x.ksppinm name,
         y.ksppstvl VALUE,
         y.ksppstdf isdefault,
         DECODE (BITAND (y.ksppstvf, 7),
                 1, 'MODIFIED',
                 4, 'SYSTEM_MOD',
                 'FALSE')
            ismod,
         DECODE (BITAND (y.ksppstvf, 2), 2, 'TRUE', 'FALSE') isadj
    FROM sys.x$ksppi x, sys.x$ksppcv y
   WHERE     x.inst_id = USERENV ('Instance')
         AND y.inst_id = USERENV ('Instance')
         AND x.indx = y.indx
         and x.ksppinm ='_kgl_hot_object_copies' 
--ORDER BY TRANSLATE (x.ksppinm, ' _', ' ')

5.新增ID欄位並賦值

--使用ROWID進行,表很大的時候使用
DECLARE
   V_COUNT   NUMBER := 0;
   V_ROWID   VARCHAR2 (200);
BEGIN
   FOR r IN (SELECT ROWIDTOCHAR (ROWID) v_rowid, a.*
               FROM MONKEY.TEST01 a)
   LOOP
      UPDATE MONKEY.TEST01
         SET id = MONKEY.TEST01_SEQ.NEXTVAL
       WHERE ROWID = r.v_rowid;

      V_COUNT := V_COUNT + 1;

      IF V_COUNT = 50000
      THEN
         V_COUNT := 0;
         COMMIT;
      END IF;
   END LOOP;

   COMMIT;
END;
/
--小表的時候使用
UPDATE MONKEY.TEST01 SET ID = MONKEY.TEST01_SEQ.NEXTVAL;
COMMIT;