<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>darkturtle</title>
    <link>https://darkturtle.tistory.com/</link>
    <description>살고(live), 사랑하고(love), 웃고(laugh), 배우라(learn)</description>
    <language>ko</language>
    <pubDate>Thu, 9 Apr 2026 00:33:43 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>darkturtle26</managingEditor>
    <image>
      <title>darkturtle</title>
      <url>https://tistory1.daumcdn.net/tistory/293877/attach/3f22cdba3bb144ac875c636116bbf94b</url>
      <link>https://darkturtle.tistory.com</link>
    </image>
    <item>
      <title>2023/04/14[12] 끔직해서 오늘도 달립니다. ( 원윤식 지음 )</title>
      <link>https://darkturtle.tistory.com/121</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2023/04/14[12] 끔직해서 오늘도 달립니다. ( 원윤식 지음 ) &lt;br /&gt;&lt;br /&gt;주로&amp;nbsp;걷고,&amp;nbsp;틈날&amp;nbsp;때마다&amp;nbsp;라이딩&amp;nbsp;하는&amp;nbsp;편이다. &lt;br /&gt;주중에&amp;nbsp;기회가&amp;nbsp;될&amp;nbsp;때마다&amp;nbsp;따릉이&amp;nbsp;타고&amp;nbsp;퇴근&amp;nbsp;씽씽고우 &lt;br /&gt;홈트&amp;nbsp;워킹머신&amp;nbsp;다&amp;nbsp;좋지만,&amp;nbsp;그래도&amp;nbsp;나에게&amp;nbsp;필드가&amp;nbsp;최고&amp;nbsp; &lt;br /&gt;좋아하는&amp;nbsp;걸&amp;nbsp;하는&amp;nbsp;사람을&amp;nbsp;생각이&amp;nbsp;비슷한듯&amp;nbsp; &lt;br /&gt;애매&amp;nbsp;하면&amp;nbsp;나가자.. &lt;br /&gt;&lt;br /&gt;오늘은&amp;nbsp;달리기가&amp;nbsp;싫었습니다. &lt;br /&gt;이런&amp;nbsp;날도&amp;nbsp;있습니다. &lt;br /&gt;그대로&amp;nbsp;꾹&amp;nbsp;참고&amp;nbsp;달렸습니다. &lt;br /&gt;안&amp;nbsp;달리고&amp;nbsp;후회하는&amp;nbsp;것보다&amp;nbsp;이&amp;nbsp;편이&amp;nbsp;낫습니다. &lt;br /&gt;달리기는&amp;nbsp;싫어도&amp;nbsp;달리고&amp;nbsp;나면&amp;nbsp;후회는&amp;nbsp;없으니&amp;nbsp;남는&amp;nbsp;장사입니다. &lt;br /&gt;고로&amp;nbsp;지겨워도&amp;nbsp;달린다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;나만의&amp;nbsp;페이스&amp;nbsp;대로&amp;nbsp;살자. &lt;br /&gt;&lt;br /&gt;적당한&amp;nbsp;속도,&amp;nbsp;안정된&amp;nbsp;호흡,&amp;nbsp;감당&amp;nbsp;가능한&amp;nbsp;컨디션,&amp;nbsp;편안한&amp;nbsp;마음 &lt;br /&gt;삶도,&amp;nbsp;생활도,&amp;nbsp;달리기도! &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;더&amp;nbsp;힘들어질수록&amp;nbsp;걱정거리들은&amp;nbsp;조금씩&amp;nbsp;더&amp;nbsp;달아나기&amp;nbsp;시작합니다. &lt;br /&gt;어느새&amp;nbsp;삶을&amp;nbsp;둘러싼&amp;nbsp;팍팍함은&amp;nbsp;사라지고&amp;nbsp;단순&amp;nbsp;무식함이&amp;nbsp;자리합니다. &lt;br /&gt;하지만&amp;nbsp;뛴다고&amp;nbsp;세상&amp;nbsp;시름이&amp;nbsp;없어지지&amp;nbsp;않습니다. &lt;br /&gt;잠시&amp;nbsp;다른&amp;nbsp;생각이&amp;nbsp;차지할&amp;nbsp;뿐입니다.&amp;nbsp;시간이&amp;nbsp;모든&amp;nbsp;걸&amp;nbsp;해결합니다. &lt;br /&gt;그러니까&amp;nbsp;뛰십시오!&amp;nbsp;왜냐하면&amp;nbsp;뛰면&amp;nbsp;시간이&amp;nbsp;가니까요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;http://www.yes24.com/Product/Goods/117290119&quot; href=&quot;http://www.yes24.com/Product/Goods/117290119&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Product/Goods/117290119&lt;/a&gt;&lt;/p&gt;</description>
      <category>읽고 생각하고 쓰기</category>
      <category>달리기</category>
      <category>라이딩</category>
      <category>자전거</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/121</guid>
      <comments>https://darkturtle.tistory.com/121#entry121comment</comments>
      <pubDate>Fri, 14 Apr 2023 18:26:56 +0900</pubDate>
    </item>
    <item>
      <title>PL/SQL 에서 사용하는 않는 CURSOR 는 수행 된다 ? 안된다 ?</title>
      <link>https://darkturtle.tistory.com/120</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;--&amp;nbsp;PL/SQL&amp;nbsp;에서&amp;nbsp;사용하는&amp;nbsp;않는&amp;nbsp;CURSOR&amp;nbsp;는&amp;nbsp;수행&amp;nbsp;된다&amp;nbsp;?&amp;nbsp;안된다&amp;nbsp;?&amp;nbsp;주석&amp;nbsp;처리&amp;nbsp;하기&amp;nbsp;전에&amp;nbsp;확인&amp;nbsp; &lt;br /&gt;&lt;b&gt;--&amp;nbsp;(&amp;nbsp;결과&amp;nbsp;)&amp;nbsp;CURSOR&amp;nbsp;를&amp;nbsp;선언만&amp;nbsp;하고,&amp;nbsp;사용하지&amp;nbsp;않아도,&amp;nbsp;CURSOR&amp;nbsp;관련&amp;nbsp;SQL(일)을&amp;nbsp;수행&amp;nbsp;하게&amp;nbsp;된다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-- 사용하지 않는 커서는 제거&amp;nbsp; 혹은 주석 처리라도하자.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1680325784389&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; --  grant select on sys.DBA_OBJECTS to scott ; -- run by sys 
 
 CREATE OR REPLACE PROCEDURE UPDATE_SAL2 
     /* IN  Parameter */
     (v_empno    IN    NUMBER) 
         
     IS 
     V_OBJECT_NAME VARCHAR2(100); 
     C_LIST SYS_REFCURSOR;  
     BEGIN 
       
       OPEN C_LIST FOR SELECT /*+ UNUSED_CURSOR */  OBJECT_NAME FROM DBA_OBJECTS ; 
   
       UPDATE /*+ TG_UPDATE_FLAG2 */ emp 
       SET sal = sal  * 1.1 
       WHERE empno = v_empno; 

       COMMIT; 

     END UPDATE_SAL2; 
 
SELECT * FROM EMP ;

EXEC UPDATE_SAL2(7934); 

SQL&amp;gt; SELECT SQL_ID, EXECUTIONS, FIRST_LOAD_TIME, SQL_TEXT
FROM  GV$SQLAREA
WHERE PROGRAM_ID = ( SELECT OBJECT_ID FROM DBA_OBJECTS WHERE OWNER ='SCOTT' AND OBJECT_NAME ='UPDATE_SAL2');

SQL_ID        EXECUTIONS  FIRST_LOAD_TIME        SQL_TEXT                                                                 
------------- ----------- ---------------------- -------------------------------------------------------------------------
6k4hmfmz6npq0           1 2023-04-01/14:07:24    SELECT /*+ UNUSED_CURSOR */ OBJECT_NAME FROM DBA_OBJECTS                 
1f8vwm03k3hkt           1 2023-04-01/14:07:24    UPDATE /*+ TG_UPDATE_FLAG2 */ EMP SET SAL = SAL * 1.1 WHERE EMPNO = :B1  

2 rows selected.&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>Cursor</category>
      <category>oracle</category>
      <category>미사용</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/120</guid>
      <comments>https://darkturtle.tistory.com/120#entry120comment</comments>
      <pubDate>Sat, 1 Apr 2023 14:10:03 +0900</pubDate>
    </item>
    <item>
      <title>V$SQLAREA.PROGRAM_ID 를 통한 SQL 확인 하기</title>
      <link>https://darkturtle.tistory.com/119</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;[ 1번째 SQL BLOCK 참조 ]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;V$SQLAREA.PROGRAM_ID&amp;nbsp;를&amp;nbsp;통한&amp;nbsp;SQL&amp;nbsp;확인&amp;nbsp;하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가. 1차원 적인 호출은 확인된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EX) EXEC PROCEDURE('XXX') 이런 식의 호출을 정확하게 확인 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나. 2차원 적인 호출은 역시나 확인된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;( 패키지에서 트로시져를 호출 하는 형태)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ 2번째 SQL BLOCK 참조 ]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;덧) 추가로, 급하게 호출이 잦은프로시져를 컴파일 하려고,기존이름2로 컴파일 및 권한 작업 후에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Public Synonym 을 재생성 했다 ( 1초 소요 )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 보통 Public Synomym 을 통해서 접근 하는 경우엔 기존이름2로 실제 수행 되나.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(나) 경우처럼 내부 호출 이고, 패키지, 프로시져 모두 OWNER 인 경우엔&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Public Synonum 을 타지 않아서 의미가 없다. !!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1680323777049&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--------------------------------------------------------------------------------------------------------------------------
-- PROCDURE 호출 테스트 
--------------------------------------------------------------------------------------------------------------------------
 CREATE OR REPLACE PROCEDURE UPDATE_SAL 
     /* IN  Parameter */
     (v_empno    IN    NUMBER) 
         
     IS 

     BEGIN 
       

       UPDATE /*+ TG_UPDATE_FLAG */ emp 
       SET sal = sal  * 1.1 
       WHERE empno = v_empno; 

       COMMIT; 

     END UPDATE_SAL; 
     /     


EXEC UPDATE_SAL(7369 ) ;


SELECT SQL_ID, EXECUTIONS, FIRST_LOAD_TIME, SQL_TEXT
FROM  GV$SQLAREA
WHERE PROGRAM_ID = ( SELECT OBJECT_ID FROM DBA_OBJECTS WHERE OWNER ='SCOTT' AND OBJECT_NAME ='UPDATE_SAL');

SQL_ID        EXECUTIONS  FIRST_LOAD_TIME       SQL_TEXT                                                                 
------------- ----------- --------------------- -------------------------------------------------------------------------
fzkk5hamhmk64           1 2023-04-01/13:27:06   UPDATE /*+ TG_UPDATE_FLAG */ EMP SET SAL = SAL * 1.1 WHERE EMPNO = :B1   

1 rows selected.


ROLLBACK ;	

--&amp;gt; (결과) SQL -&amp;gt; PL/SQL -&amp;gt; PL/SQL 내 SQL 호출 확인 됨  


--------------------------------------------------------------------------------------------------------------------------	 
--------------------------------------------------------------------------------------------------------------------------
-- PACKAGE - &amp;gt; PROCEDURE 호출 테스트
 CREATE OR REPLACE PACKAGE EMP_INFO AS

       PROCEDURE ALL_EMP_INFO;   -- 모든 사원의  사원 정보
        
        PROCEDURE ALL_SAL_INFO;   -- 모든 사원의  급여 정보

        -- 특정 부서의  사원 정보
        PROCEDURE DEPT_EMP_INFO (V_DEPTNO IN  NUMBER) ;

        -- 특정 부서의  급여 정보
        PROCEDURE DEPT_SAL_INFO (V_DEPTNO IN  NUMBER) ;

    END EMP_INFO;
--------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY EMP_INFO AS

     -- 모든 사원의  사원 정보 
     PROCEDURE ALL_EMP_INFO
     IS

         CURSOR EMP_CURSOR IS
         SELECT EMPNO, ENAME, TO_CHAR(HIREDATE, 'RRRR/MM/DD') HIREDATE
         FROM EMP
         ORDER BY HIREDATE;

     BEGIN

         FOR  AA  IN EMP_CURSOR LOOP

             DBMS_OUTPUT.PUT_LINE('사번 : ' || AA.EMPNO);
             DBMS_OUTPUT.PUT_LINE('성명 : ' || AA.ENAME);
             DBMS_OUTPUT.PUT_LINE('입사일 : ' || AA.HIREDATE);

         END LOOP;

         EXCEPTION
           WHEN OTHERS THEN
             DBMS_OUTPUT.PUT_LINE(SQLERRM||'에러 발생 ');

     END ALL_EMP_INFO;


     -- 모든 사원의  급여 정보 
     PROCEDURE ALL_SAL_INFO
     IS
    
         CURSOR EMP_CURSOR IS
         SELECT ROUND(AVG(SAL),3) AVG_SAL, MAX(SAL) MAX_SAL, MIN(SAL) MIN_SAL
         FROM EMP;
    
     BEGIN

         FOR  AA  IN EMP_CURSOR LOOP
 
             DBMS_OUTPUT.PUT_LINE('전체급여평균 : ' || AA.AVG_SAL);
             DBMS_OUTPUT.PUT_LINE('최대급여금액 : ' || AA.MAX_SAL);
             DBMS_OUTPUT.PUT_LINE('최소급여금액 : ' || AA.MIN_SAL);
         
         END LOOP;
         -- FOR TEST HARD CODEING 
         UPDATE_SAL(7369 ) ;

         EXCEPTION
            WHEN OTHERS THEN
               DBMS_OUTPUT.PUT_LINE(SQLERRM||'에러 발생 ');
     END ALL_SAL_INFO;


     --특정 부서의  사원 정보
     PROCEDURE DEPT_EMP_INFO (V_DEPTNO IN  NUMBER)
     IS

         CURSOR EMP_CURSOR IS
         SELECT EMPNO, ENAME, TO_CHAR(HIREDATE, 'RRRR/MM/DD') HIREDATE
         FROM EMP
         WHERE DEPTNO = V_DEPTNO
         ORDER BY HIREDATE;

     BEGIN

         FOR  AA  IN EMP_CURSOR LOOP

             DBMS_OUTPUT.PUT_LINE('사번 : ' || AA.EMPNO);
             DBMS_OUTPUT.PUT_LINE('성명 : ' || AA.ENAME);
             DBMS_OUTPUT.PUT_LINE('입사일 : ' || AA.HIREDATE);

         END LOOP;

        EXCEPTION
            WHEN OTHERS THEN
               DBMS_OUTPUT.PUT_LINE(SQLERRM||'에러 발생 ');

     END DEPT_EMP_INFO;


     --특정 부서의  급여 정보
     PROCEDURE DEPT_SAL_INFO (V_DEPTNO IN  NUMBER)
     IS
    
         CURSOR EMP_CURSOR IS
         SELECT ROUND(AVG(SAL),3) AVG_SAL, MAX(SAL) MAX_SAL, MIN(SAL) MIN_SAL
         FROM EMP 
         WHERE DEPTNO = V_DEPTNO;
             
     BEGIN

         FOR  AA  IN EMP_CURSOR LOOP 
 
             DBMS_OUTPUT.PUT_LINE('전체급여평균 : ' || AA.AVG_SAL);
             DBMS_OUTPUT.PUT_LINE('최대급여금액 : ' || AA.MAX_SAL);
             DBMS_OUTPUT.PUT_LINE('최소급여금액 : ' || AA.MIN_SAL);
         
         END LOOP;

         EXCEPTION
             WHEN OTHERS THEN
                DBMS_OUTPUT.PUT_LINE(SQLERRM||'에러 발생 ');

     END DEPT_SAL_INFO;        
    
  END EMP_INFO;

EXEC EMP_INFO.ALL_SAL_INFO;


SQL&amp;gt; SELECT SQL_ID, EXECUTIONS, FIRST_LOAD_TIME, SQL_TEXT
FROM  GV$SQLAREA
WHERE PROGRAM_ID = ( SELECT OBJECT_ID FROM DBA_OBJECTS WHERE OWNER ='SCOTT' AND OBJECT_NAME ='UPDATE_SAL');

SQL_ID        EXECUTIONS  FIRST_LOAD_TIME       SQL_TEXT                                                                
------------- ----------- --------------------- ------------------------------------------------------------------------
fzkk5hamhmk64           2 2023-04-01/13:27:06   UPDATE /*+ TG_UPDATE_FLAG */ EMP SET SAL = SAL * 1.1 WHERE EMPNO = :B1  

--&amp;gt; (결과) 마찬가지로 호출 확인됨( 1 -&amp;gt;2 )&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1680324343491&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--------------------------------------------------------------------------------------------------------------------------    
 -- UPDATE_SAL -&amp;gt; UPDATE_SAL2 이름 변경
 -- TG_UPDATE_FLAG -&amp;gt; TG_UPDATE_FLAG2 주석 변경 
 -- 주의 : PL/SQL 에선 주석 처리로 하면 ,나중에 SQL 확인 시, 주석 부분이 사라짐, 반드시 힌트 형식으로 기재해야함 
 
 CREATE OR REPLACE PROCEDURE UPDATE_SAL2 
     /* IN  Parameter */
     (v_empno    IN    NUMBER) 
         
     IS 

     BEGIN 
       

       UPDATE /*+ TG_UPDATE_FLAG2 */ emp 
       SET sal = sal  * 1.1 
       WHERE empno = v_empno; 

       COMMIT; 

     END UPDATE_SAL2; 
     
	 

-- 의미 없는 Public Synonym 생성 
CREATE PUBLIC SYNONYM UPDATE_SAL FOR UPDATE_SAL2 ;

-- 샘플로 수행 
EXEC EMP_INFO.ALL_SAL_INFO;

-- 기존 소스를 그대로 호출 확인됨

SELECT SQL_ID, EXECUTIONS, FIRST_LOAD_TIME, SQL_TEXT
FROM  GV$SQLAREA
WHERE PROGRAM_ID = ( SELECT OBJECT_ID FROM DBA_OBJECTS WHERE OWNER ='SCOTT' AND OBJECT_NAME ='UPDATE_SAL');

SQL_ID        EXECUTIONS  FIRST_LOAD_TIME      SQL_TEXT                                                               
------------- ----------- -------------------- -----------------------------------------------------------------------
fzkk5hamhmk64           3 2023-04-01/13:27:06  UPDATE /*+ TG_UPDATE_FLAG */ EMP SET SAL = SAL * 1.1 WHERE EMPNO = :B1 

-- 혹시나 싶어 추가 확인 

SQL&amp;gt; SELECT SQL_ID, EXECUTIONS, FIRST_LOAD_TIME, SQL_TEXT
FROM  GV$SQLAREA
WHERE PROGRAM_ID = ( SELECT OBJECT_ID FROM DBA_OBJECTS WHERE OWNER ='SCOTT' AND OBJECT_NAME ='UPDATE_SAL2');

SQL_ID        EXECUTIONS  FIRST_LOAD_TIME     SQL_TEXT        
------------- ----------- ------------------- ----------------&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/119</guid>
      <comments>https://darkturtle.tistory.com/119#entry119comment</comments>
      <pubDate>Sat, 1 Apr 2023 13:46:31 +0900</pubDate>
    </item>
    <item>
      <title>2023/04/01[11]  KEEP GOING (오스틴 클레온)</title>
      <link>https://darkturtle.tistory.com/118</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2023/04/01[11]&amp;nbsp; KEEP GOING (오스틴 클레온) &lt;br /&gt;계속&amp;nbsp;갈&amp;nbsp;것인가&amp;nbsp;?&amp;nbsp;여기서&amp;nbsp;내릴&amp;nbsp;것인가&amp;nbsp;?&amp;nbsp;그것이&amp;nbsp;문제로다.&amp;nbsp; &lt;br /&gt;읽고&amp;nbsp;쓰고,&amp;nbsp;걷다&amp;nbsp;보면&amp;nbsp;사인이&amp;nbsp;오겠지 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;살다&amp;nbsp;보면&amp;nbsp;내&amp;nbsp;생각처럼&amp;nbsp;되는&amp;nbsp;일이&amp;nbsp;거의&amp;nbsp;없지만,&amp;nbsp;마음먹은&amp;nbsp;대로&amp;nbsp;실현&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;일이&amp;nbsp;딱&amp;nbsp;한&amp;nbsp;가지&amp;nbsp;있긴&amp;nbsp;하다. &lt;br /&gt;주어진&amp;nbsp;시간을&amp;nbsp;어떻게&amp;nbsp;쓰는가,&amp;nbsp;즉&amp;nbsp;그&amp;nbsp;시간에&amp;nbsp;어떤&amp;nbsp;일을&amp;nbsp;하고&amp;nbsp;얼마나&amp;nbsp;열심히&amp;nbsp;하는지에&amp;nbsp;대한&amp;nbsp;문제가&amp;nbsp;그러하다. &lt;br /&gt;&lt;br /&gt;인간이&amp;nbsp;이성을&amp;nbsp;잃는&amp;nbsp;건&amp;nbsp;오늘&amp;nbsp;경험&amp;nbsp;중인&amp;nbsp;일&amp;nbsp;때문이&amp;nbsp;아니다. &lt;br /&gt;어제&amp;nbsp;벌어진&amp;nbsp;일에&amp;nbsp;대한&amp;nbsp;후회와&amp;nbsp;고통,&amp;nbsp;그리고&amp;nbsp;내일&amp;nbsp;겪게&amp;nbsp;될&amp;nbsp;일에&amp;nbsp;대한&amp;nbsp;두려움이&amp;nbsp;사람을&amp;nbsp;미쳐버리게&amp;nbsp;만드는&amp;nbsp;것이다. &lt;br /&gt;그러니&amp;nbsp;우리&amp;nbsp;모두&amp;nbsp;최선을&amp;nbsp;다해&amp;nbsp;하루하루를&amp;nbsp;살아나가자. &lt;br /&gt;&lt;br /&gt;세상과&amp;nbsp;연결을&amp;nbsp;끊으면&amp;nbsp;나&amp;nbsp;자신과&amp;nbsp;연결될&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;매일&amp;nbsp;시간을&amp;nbsp;내어&amp;nbsp;이런&amp;nbsp;의식을&amp;nbsp;수행하는&amp;nbsp;것이야말로&amp;nbsp;세상에서&amp;nbsp;가장&amp;nbsp;건강한&amp;nbsp;일이다. &lt;br /&gt;&lt;br /&gt;어떻게&amp;nbsp;해야&amp;nbsp;그&amp;nbsp;한&amp;nbsp;사람에게&amp;nbsp;닿을&amp;nbsp;수&amp;nbsp;있을까&amp;nbsp;? &lt;br /&gt;이것이야말로&amp;nbsp;내가&amp;nbsp;진심으로&amp;nbsp;고민했던&amp;nbsp;문제였다. &lt;br /&gt;&lt;br /&gt;다리가&amp;nbsp;움직이기&amp;nbsp;시작해야&amp;nbsp;생각이&amp;nbsp;흐르는&amp;nbsp;것&amp;nbsp;같다. &lt;br /&gt;&lt;br /&gt;그&amp;nbsp;나무에게&amp;nbsp;많이&amp;nbsp;배우셨다고&amp;nbsp;해요.&amp;nbsp;그&amp;nbsp;나무가&amp;nbsp;봄에&amp;nbsp;아름다움을&amp;nbsp;뽐낼&amp;nbsp;수있었던&amp;nbsp;것은&amp;nbsp;겨울을&amp;nbsp;버텨냈기&amp;nbsp;때문이며, &lt;br /&gt;유난히&amp;nbsp;혹독했던&amp;nbsp;겨울이&amp;nbsp;가장&amp;nbsp;찬란한&amp;nbsp;봄을&amp;nbsp;꽃피웠다는&amp;nbsp;걸요. &lt;br /&gt;&lt;br /&gt;조급해하지&amp;nbsp;말고,&amp;nbsp;서두르지&amp;nbsp;말라.&amp;nbsp;무언가를&amp;nbsp;빨리&amp;nbsp;끝내야&amp;nbsp;한다는&amp;nbsp;걱정보다는&amp;nbsp;꼭&amp;nbsp;해야&amp;nbsp;하는&amp;nbsp;무언가를&amp;nbsp;찾을&amp;nbsp;걱정부터&amp;nbsp;해라. &lt;br /&gt;위대한&amp;nbsp;예술가가&amp;nbsp;되려는&amp;nbsp;마음은&amp;nbsp;덜어내고&amp;nbsp;예술을&amp;nbsp;만드는&amp;nbsp;좋은&amp;nbsp;인간이&amp;nbsp;되기위해&amp;nbsp;더&amp;nbsp;애써라. &lt;br /&gt;얼룩을&amp;nbsp;남겨야&amp;nbsp;한다는&amp;nbsp;집착은&amp;nbsp;줄이고,&amp;nbsp;머문&amp;nbsp;자리를&amp;nbsp;더&amp;nbsp;아름답게&amp;nbsp;만드는&amp;nbsp;일에&amp;nbsp;주목해라. &lt;br /&gt;.... &lt;br /&gt;당신만의&amp;nbsp;동사를&amp;nbsp;계속&amp;nbsp;해라.&amp;nbsp;그러다&amp;nbsp;어떤&amp;nbsp;명사가&amp;nbsp;될지라도. &lt;br /&gt;'킵고잉'&amp;nbsp;해라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.yes24.com/Product/Goods/98389349&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Product/Goods/98389349&lt;/a&gt;&lt;/p&gt;</description>
      <category>읽고 생각하고 쓰기</category>
      <category>오스틴클레온</category>
      <category>이연</category>
      <category>킵고잉</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/118</guid>
      <comments>https://darkturtle.tistory.com/118#entry118comment</comments>
      <pubDate>Sat, 1 Apr 2023 12:27:54 +0900</pubDate>
    </item>
    <item>
      <title>2023/03/26[09],[10] 이연님 글</title>
      <link>https://darkturtle.tistory.com/117</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2023/03/26[09],[10]&amp;nbsp;이연님&amp;nbsp;글&amp;nbsp; &lt;br /&gt;유튜브&amp;nbsp;서핑&amp;nbsp;중,&amp;nbsp;착&amp;nbsp;하고&amp;nbsp;와닿는&amp;nbsp;동영상을&amp;nbsp;보고&amp;nbsp;휘리릭&amp;nbsp;하고&amp;nbsp;탐독... &lt;br /&gt;이야기를 통해서, 나의 정답을 찾는데 훌륭한 힌트가 되어주는 글들 &lt;br /&gt;나를&amp;nbsp;객관적으로&amp;nbsp;다시&amp;nbsp;바라보게&amp;nbsp;해주는&amp;nbsp;글들. &lt;br /&gt;Thanks&amp;nbsp;a&amp;nbsp;lot!!! &lt;br /&gt;&lt;br /&gt;2022/03/26&amp;nbsp;[09]겁내지&amp;nbsp;않고&amp;nbsp;그림&amp;nbsp;그리는&amp;nbsp;법&amp;nbsp;(&amp;nbsp;이연&amp;nbsp;)&amp;nbsp; &lt;br /&gt;우리딸이&amp;nbsp;조금&amp;nbsp;더&amp;nbsp;크면&amp;nbsp;다시&amp;nbsp;한번&amp;nbsp;추천&amp;nbsp;해주고&amp;nbsp;싶다. &lt;br /&gt;일차&amp;nbsp;추천은&amp;nbsp;드랍&amp;nbsp;!!! &lt;br /&gt;&lt;br /&gt;당신도&amp;nbsp;지금&amp;nbsp;뭔가를&amp;nbsp;고민하고&amp;nbsp;있다면&amp;nbsp;그것을&amp;nbsp;한번&amp;nbsp;좋이에&amp;nbsp;아주&amp;nbsp;구체적으로&amp;nbsp;적어보길&amp;nbsp;바란다. &lt;br /&gt;상상하지&amp;nbsp;말고,&amp;nbsp;펜을&amp;nbsp;들어&amp;nbsp;종이&amp;nbsp;위에&amp;nbsp;내동댕이치자.&amp;nbsp;재능이&amp;nbsp;없어서,&amp;nbsp;시간이&amp;nbsp;없어서, &lt;br /&gt;돈이&amp;nbsp;없어서,&amp;nbsp;유명해질&amp;nbsp;자신이&amp;nbsp;없어서?&amp;nbsp;뭐든&amp;nbsp;좋으니&amp;nbsp;종이에&amp;nbsp;일단&amp;nbsp;적어보자. &lt;br /&gt;적고&amp;nbsp;나면&amp;nbsp;생각보다&amp;nbsp;대단한&amp;nbsp;녀석들이&amp;nbsp;아니다. &lt;br /&gt;정말이지&amp;nbsp;꺼야&amp;nbsp;알&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;그게&amp;nbsp;얼마나&amp;nbsp;별일이&amp;nbsp;아닌지&amp;nbsp;말이다. &lt;br /&gt;머릿속&amp;nbsp;상상은&amp;nbsp;크고&amp;nbsp;넓지만,&amp;nbsp;앞에&amp;nbsp;있는&amp;nbsp;종이는&amp;nbsp;겨우&amp;nbsp;A4&amp;nbsp;사이즈다. &lt;br /&gt;모든&amp;nbsp;고민이&amp;nbsp;그&amp;nbsp;안에&amp;nbsp;담긴다.아니,&amp;nbsp;여백을&amp;nbsp;철철&amp;nbsp;남긴다.&amp;nbsp; &lt;br /&gt;그러니&amp;nbsp;괴물&amp;nbsp;같은&amp;nbsp;두려움을&amp;nbsp;내&amp;nbsp;머릿속&amp;nbsp;운동장에서&amp;nbsp;뛰놀게&amp;nbsp;하지&amp;nbsp;말고&amp;nbsp; &lt;br /&gt;질문으로&amp;nbsp;바꾸어&amp;nbsp;스스로에게&amp;nbsp;물어보자.. &lt;br /&gt;..&amp;nbsp;물론&amp;nbsp;호락호락하지는&amp;nbsp;않다.&amp;nbsp;문장만&amp;nbsp;보아도&amp;nbsp;마음이&amp;nbsp;쓰리다. &lt;br /&gt;그래서&amp;nbsp;많은&amp;nbsp;이들이&amp;nbsp;싸우기도&amp;nbsp;전에&amp;nbsp;도망친다.&amp;nbsp; &lt;br /&gt;하지만&amp;nbsp;여러분,&amp;nbsp;두려움을&amp;nbsp;링&amp;nbsp;위에서&amp;nbsp;마주하고&amp;nbsp;주먹이라도&amp;nbsp;휘둘러&amp;nbsp;본&amp;nbsp;다음&amp;nbsp;판단하자. &lt;br /&gt;생각보다&amp;nbsp;당신은&amp;nbsp;약하지&amp;nbsp;않다.&amp;nbsp;차근차근&amp;nbsp;이&amp;nbsp;잔인한&amp;nbsp;질문들에&amp;nbsp;답해보자. &lt;br /&gt;아,&amp;nbsp;물론&amp;nbsp;당장&amp;nbsp;모든&amp;nbsp;대답을&amp;nbsp;필요는&amp;nbsp;없다. &lt;br /&gt;당신이&amp;nbsp;사는&amp;nbsp;방식이&amp;nbsp;이&amp;nbsp;질문에&amp;nbsp;답이&amp;nbsp;될&amp;nbsp;테니&amp;nbsp;말이다. &lt;br /&gt;그러니&amp;nbsp;한번&amp;nbsp;해보고&amp;nbsp;답을&amp;nbsp;내려보자. &lt;br /&gt;&lt;br /&gt;부끄러움을&amp;nbsp;아는&amp;nbsp;사람많이&amp;nbsp;성숙해질&amp;nbsp;수&amp;nbsp;있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;http://www.yes24.com/Product/Search?domain=ALL&amp;amp;query=%EA%B2%81%EB%82%B4%EC%A7%80%EC%95%8A%EA%B3%A0+%EA%B7%B8%EB%A6%BC+%EA%B7%B8%EB%A6%AC%EB%8A%94%EB%B2%95&amp;amp;pid=123487&amp;amp;cosemkid=go16161247718562265&amp;amp;gclid=Cj0KCQjwt_qgBhDFARIsABcDjOffEVmbdq6B3XnrUniQVeot-VS7McaTZPvpxzpaa4Og2kVfHn-V1noaArgvEALw_wcB&quot; href=&quot;http://www.yes24.com/Product/Search?domain=ALL&amp;amp;query=%EA%B2%81%EB%82%B4%EC%A7%80%EC%95%8A%EA%B3%A0+%EA%B7%B8%EB%A6%BC+%EA%B7%B8%EB%A6%AC%EB%8A%94%EB%B2%95&amp;amp;pid=123487&amp;amp;cosemkid=go16161247718562265&amp;amp;gclid=Cj0KCQjwt_qgBhDFARIsABcDjOffEVmbdq6B3XnrUniQVeot-VS7McaTZPvpxzpaa4Og2kVfHn-V1noaArgvEALw_wcB&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Product/Search?domain=ALL&amp;amp;query=%EA%B2%81%EB%82%B4%EC%A7%80%EC%95%8A%EA%B3%A0+%EA%B7%B8%EB%A6%BC+%EA%B7%B8%EB%A6%AC%EB%8A%94%EB%B2%95&amp;amp;pid=123487&amp;amp;cosemkid=go16161247718562265&amp;amp;gclid=Cj0KCQjwt_qgBhDFARIsABcDjOffEVmbdq6B3XnrUniQVeot-VS7McaTZPvpxzpaa4Og2kVfHn-V1noaArgvEALw_wcB&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;2022/03/26&amp;nbsp;[10]매일을&amp;nbsp;헤엄치는&amp;nbsp;법&amp;nbsp;(&amp;nbsp;이연&amp;nbsp;그림&amp;nbsp;에세이&amp;nbsp;) &lt;br /&gt;&lt;br /&gt;나는&amp;nbsp;여러&amp;nbsp;가지를&amp;nbsp;포기하고&amp;nbsp;나를&amp;nbsp;자주&amp;nbsp;선택하곤&amp;nbsp;한다. &lt;br /&gt;&lt;br /&gt;불안과&amp;nbsp;싸우는&amp;nbsp;것은&amp;nbsp;생의&amp;nbsp;숙명이다. &lt;br /&gt;지금은&amp;nbsp;불안해도&amp;nbsp;참을성&amp;nbsp;있게&amp;nbsp;노력을&amp;nbsp;이어가는&amp;nbsp;것이&amp;nbsp;중요하다. &lt;br /&gt;뭐든&amp;nbsp;한&amp;nbsp;가지에&amp;nbsp;제대로&amp;nbsp;집중하자. &lt;br /&gt;&lt;a title=&quot;http://www.yes24.com/Product/Goods/110649593?pid=123487&amp;amp;cosemkid=go16577831922579072&amp;amp;gclid=Cj0KCQjwt_qgBhDFARIsABcDjOfR0WW2FMtpw4_Or_RIZZVn2ue1WKHwfqprG0Wh1zESiDpvfc-yvBgaApqyEALw_wcB&quot; href=&quot;http://www.yes24.com/Product/Goods/110649593?pid=123487&amp;amp;cosemkid=go16577831922579072&amp;amp;gclid=Cj0KCQjwt_qgBhDFARIsABcDjOfR0WW2FMtpw4_Or_RIZZVn2ue1WKHwfqprG0Wh1zESiDpvfc-yvBgaApqyEALw_wcB&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Product/Goods/110649593?pid=123487&amp;amp;cosemkid=go16577831922579072&amp;amp;gclid=Cj0KCQjwt_qgBhDFARIsABcDjOfR0WW2FMtpw4_Or_RIZZVn2ue1WKHwfqprG0Wh1zESiDpvfc-yvBgaApqyEALw_wcB&lt;/a&gt;&lt;/p&gt;</description>
      <category>읽고 생각하고 쓰기</category>
      <category>그림</category>
      <category>두려움</category>
      <category>매일</category>
      <category>이연</category>
      <category>헤엄</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/117</guid>
      <comments>https://darkturtle.tistory.com/117#entry117comment</comments>
      <pubDate>Sun, 26 Mar 2023 13:26:12 +0900</pubDate>
    </item>
    <item>
      <title>불친절한 SQL 프로그래밍</title>
      <link>https://darkturtle.tistory.com/116</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;불친절한&amp;nbsp;SQL&amp;nbsp;프로그래밍&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;넓고&amp;nbsp;넓은&amp;nbsp;ORACLE&amp;nbsp;SQL&amp;nbsp;의&amp;nbsp;다룬&amp;nbsp;책,&amp;nbsp;야금야금&amp;nbsp;3달&amp;nbsp;정도&amp;nbsp;본&amp;nbsp;책이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자분 지식이 넓고 깊다, 이 많은 걸 하는 생각이 드는 책이다.감사합니다. (__)(--)(__) &lt;br /&gt;SQL&amp;nbsp;공부를&amp;nbsp;시작&amp;nbsp;하시고&amp;nbsp;싶은&amp;nbsp;분,&amp;nbsp;이&amp;nbsp;참에&amp;nbsp;SQL&amp;nbsp;전반적으로&amp;nbsp;정리&amp;nbsp;하고&amp;nbsp;싶은&amp;nbsp;분,&amp;nbsp; &lt;br /&gt;나의&amp;nbsp;SQL&amp;nbsp;지식을&amp;nbsp;갱신하고&amp;nbsp;싶은&amp;nbsp;분들에게&amp;nbsp;적극&amp;nbsp;추천&amp;nbsp;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;++ 2023/03/10 불친절한 PL/SQL 프로그래밍 요이땅 !!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;http://www.yes24.com/Product/Goods/64391533&quot; href=&quot;http://www.yes24.com/Product/Goods/64391533&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Product/Goods/64391533&lt;/a&gt;&lt;/p&gt;</description>
      <category>기술서적정리</category>
      <category>oracle</category>
      <category>SQL</category>
      <category>불친절한</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/116</guid>
      <comments>https://darkturtle.tistory.com/116#entry116comment</comments>
      <pubDate>Sat, 11 Mar 2023 21:18:49 +0900</pubDate>
    </item>
    <item>
      <title>데이터 중심 애플리케이션 설계 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 시스템을 지탱하는 핵심 아이디어</title>
      <link>https://darkturtle.tistory.com/115</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터 중심 애플리케이션 설계 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 시스템을 지탱하는 핵심 아이디어&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사내 DA 스터디 모임에서 쿽하게 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분산 시스템에 궁금하던 차에 어렵지만 재밌게&amp;nbsp; 봄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽는 내내 무슨 소린지 당최 이해가 안되는 부분도 많았지만 시스템 설계 혹은 구성 시,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템 구성에대한 근원적인 물음과 해답으로 뒤덥힌 책&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어렵지만 이해가 잘 되지 않아도&amp;nbsp; 꼭 한번 읽어 볼것을 강추 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.yes24.com/Main/default.aspx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Main/default.aspx&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1677836561470&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;YES24&quot; data-og-description=&quot;책, 공연, 음악까지! 모든 문화생활을 위한 플랫폼, YES24&quot; data-og-host=&quot;www.yes24.com&quot; data-og-source-url=&quot;http://www.yes24.com/Main/default.aspx&quot; data-og-url=&quot;http://www.yes24.com/Main/default.aspx&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/S6ASK/hyROIMBb6C/0LEd5dPneoWzCt2ORoimYK/img.png?width=640&amp;amp;height=640&amp;amp;face=0_0_640_640,https://scrap.kakaocdn.net/dn/d9qQld/hyROK4HH6C/sxIIEnfCfGNpzjN6jDCJ70/img.jpg?width=1089&amp;amp;height=421&amp;amp;face=723_120_825_230,https://scrap.kakaocdn.net/dn/AOLTZ/hyROIZ8RGF/ny9lvQecSXAJUYKlqDVt7K/img.jpg?width=1089&amp;amp;height=421&amp;amp;face=0_0_1089_421&quot;&gt;&lt;a href=&quot;http://www.yes24.com/Main/default.aspx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://www.yes24.com/Main/default.aspx&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/S6ASK/hyROIMBb6C/0LEd5dPneoWzCt2ORoimYK/img.png?width=640&amp;amp;height=640&amp;amp;face=0_0_640_640,https://scrap.kakaocdn.net/dn/d9qQld/hyROK4HH6C/sxIIEnfCfGNpzjN6jDCJ70/img.jpg?width=1089&amp;amp;height=421&amp;amp;face=723_120_825_230,https://scrap.kakaocdn.net/dn/AOLTZ/hyROIZ8RGF/ny9lvQecSXAJUYKlqDVt7K/img.jpg?width=1089&amp;amp;height=421&amp;amp;face=0_0_1089_421');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;YES24&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;책, 공연, 음악까지! 모든 문화생활을 위한 플랫폼, YES24&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.yes24.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영문판은 무료로 다운도 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/jeffrey-xiao/papers/blob/master/textbooks/designing-data-intensive-applications.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/jeffrey-xiao/papers/blob/master/textbooks/designing-data-intensive-applications.pdf&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1677836585371&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - jeffrey-xiao/papers&quot; data-og-description=&quot;Contribute to jeffrey-xiao/papers development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/jeffrey-xiao/papers/blob/master/textbooks/designing-data-intensive-applications.pdf&quot; data-og-url=&quot;https://github.com/jeffrey-xiao/papers&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bRUqM7/hyROJY1Xn7/cPz57l3w6PbdMYxRSYBZxK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/jeffrey-xiao/papers/blob/master/textbooks/designing-data-intensive-applications.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/jeffrey-xiao/papers/blob/master/textbooks/designing-data-intensive-applications.pdf&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bRUqM7/hyROJY1Xn7/cPz57l3w6PbdMYxRSYBZxK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - jeffrey-xiao/papers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to jeffrey-xiao/papers development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>읽고 생각하고 쓰기</category>
      <category>data</category>
      <category>근본</category>
      <category>설계</category>
      <category>질문</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/115</guid>
      <comments>https://darkturtle.tistory.com/115#entry115comment</comments>
      <pubDate>Fri, 3 Mar 2023 18:44:44 +0900</pubDate>
    </item>
    <item>
      <title>schema expdp -&amp;gt; impdp 시 , 복구된 schema 에 부여된 권한은 ?</title>
      <link>https://darkturtle.tistory.com/114</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;schema&amp;nbsp;expdp&amp;nbsp;-&amp;gt;&amp;nbsp;impdp&amp;nbsp;시&amp;nbsp;,&amp;nbsp;복구된&amp;nbsp;schema&amp;nbsp;에&amp;nbsp;부여된&amp;nbsp;권한은&amp;nbsp;?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이를테면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;1. scott101(테스트 유저 ) 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;2. scott 테이블에 대해서 scott101 유저에 권한 부여&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;3. expdp -&amp;gt; impdp 를 통해서 scott101 을 복구 하면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (2) 에서 부여한 scott 유저 테이블에 대한 scott101 유저의 권한이 복구 될까 ?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;정답은 안된다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;가만히 생각 해보면, exp 나 expdp 시에 권한은 object 단위로 exp/expdp 되고 imp/impdp 된다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 사용자 생성 및 권한 부여&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1677836137650&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 01 CREATE USER
CREATE USER SCOTT101 IDENTIFIED BY TIGER101 DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP ;
GRANT CREATE SESSION, ALTER SESSION TO SCOTT101 ;

-- 02 GRANT SELECT( 46 EA ) 
SELECT OWNER, TABLE_NAME, 'GRANT SELECT ON '||OWNER||'.'||TABLE_NAME ||' TO SCOTT101 ; ' AS G_SQL
FROM   DBA_TABLES
WHERE  OWNER ='SCOTT'
ORDER BY TABLE_NAME ; 

-- 03 CHECK GRANT SELECT 
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE ='SCOTT101';
-- 46 ROWS&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. expdp -&amp;gt; impdp(sqlfile) 을 통해서 expdp 내용 파악 하기&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1677836234085&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 04 expdp schemas scott101
[oracle@oel7 ~]$ cat expdp_scott101.par
userid=scott
directory=DIR_EXT
schemas=scott101
dumpfile=scott101.dmp
logfile=scott101.log
[oracle@oel7 ~]$ expdp parfile=expdp_scott101.par

Export: Release 19.0.0.0.0 - Production on Fri Mar 3 18:25:45 2023
Version 19.14.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
Password:


Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
FLASHBACK automatically enabled to preserve database integrity.
Starting &quot;SCOTT&quot;.&quot;SYS_EXPORT_SCHEMA_01&quot;:  scott/******** parfile=expdp_scott101.par
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PASSWORD_HISTORY
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Master table &quot;SCOTT&quot;.&quot;SYS_EXPORT_SCHEMA_01&quot; successfully loaded/unloaded
******************************************************************************
Dump file set for SCOTT.SYS_EXPORT_SCHEMA_01 is:
  /home/oracle/scott101.dmp
Job &quot;SCOTT&quot;.&quot;SYS_EXPORT_SCHEMA_01&quot; successfully completed at Fri Mar 3 18:26:12 2023 elapsed 0 00:00:18

[oracle@oel7 ~]$

-- 05 impdp sqlfile 
[oracle@oel7 ~]$ cat impdp_scott101.par
userid=scott
directory=DIR_EXT
dumpfile=scott101.dmp
logfile=scott101_impdp.log
sqlfile=scot101_impdp.sql
schemas=scott101
[oracle@oel7 ~]$ impdp parfile=impdp_scott101.par

Import: Release 19.0.0.0.0 - Production on Fri Mar 3 18:29:00 2023
Version 19.14.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
Password:

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Master table &quot;SCOTT&quot;.&quot;SYS_SQL_FILE_SCHEMA_01&quot; successfully loaded/unloaded
Starting &quot;SCOTT&quot;.&quot;SYS_SQL_FILE_SCHEMA_01&quot;:  scott/******** parfile=impdp_scott101.par
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PASSWORD_HISTORY
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Job &quot;SCOTT&quot;.&quot;SYS_SQL_FILE_SCHEMA_01&quot; successfully completed at Fri Mar 3 18:29:06 2023 elapsed 0 00:00:02

[oracle@oel7 ~]$

-- 아래 내용 중 scott 테이블에 대한 권한 46는 보이지 않는다. 
[oracle@oel7 ~]$ cat scot101_impdp.sql
-- CONNECT SCOTT
ALTER SESSION SET EVENTS '10150 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '10904 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '25475 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '10407 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '10851 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '22830 TRACE NAME CONTEXT FOREVER, LEVEL 192 ';
-- new object type path: SCHEMA_EXPORT/USER
 CREATE USER &quot;SCOTT101&quot; IDENTIFIED BY VALUES 'S:85F1D0F90B0CEE5E5718B0BD430A46D6F7FCCF39CAD838B9BF600263ACE0;T:7EBFA78E4985D1B266CC5212F0AEACFD8C4484D347F1A4BFD14C85AB0114C93392DF23130E67EDA36ABDFF58BDD4F7E759A4617BBFFCD2B6D9C75FB8F86F659905F9841D2A2127AD7DC8D421C6D5E525;DBC47A91A7C9C477'
      DEFAULT TABLESPACE &quot;USERS&quot;
      TEMPORARY TABLESPACE &quot;TEMP&quot;;
-- new object type path: SCHEMA_EXPORT/SYSTEM_GRANT
GRANT ALTER SESSION TO &quot;SCOTT101&quot;;
GRANT CREATE SESSION TO &quot;SCOTT101&quot;;
-- new object type path: SCHEMA_EXPORT/DEFAULT_ROLE
 ALTER USER &quot;SCOTT101&quot; DEFAULT ROLE ALL;
-- new object type path: SCHEMA_EXPORT/PASSWORD_HISTORY
 DECLARE
     SUBTYPE HIST_RECORD IS SYS.DBMS_PSWMG_IMPORT.ARRAYOFHISTORYRECORDS;
     HIST_REC HIST_RECORD;
     i number := 0;
 BEGIN
      SYS.DBMS_PSWMG_IMPORT.PURGE_HISTORY('SCOTT101');
      i := i+1;
      HIST_REC(i).USERNAME := 'SCOTT101';
      HIST_REC(i).PASSWORD := 'T:7EBFA78E4985D1B266CC5212F0AEACFD8C4484D347F1A4BFD14C85AB0114C93392DF23130E67EDA36ABDFF58BDD4F7E759A4617BBFFCD2B6D9C75FB8F86F659905F9841D2A2127AD7DC8D421C6D5E525';
      HIST_REC(i).PASSWD_DATE := '2023/03/03 18:21:57';

      SYS.DBMS_PSWMG_IMPORT.IMPORT_HISTORY(HIST_REC,i);
 END;
/
-- new object type path: SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
-- CONNECT SCOTT101

BEGIN
sys.dbms_logrep_imp.instantiate_schema(schema_name=&amp;gt;SYS_CONTEXT('USERENV','CURRENT_SCHEMA'), export_db_name=&amp;gt;'ORACLE19', inst_scn=&amp;gt;'12914034');
COMMIT;
END;
/
-- fixup virtual columns...
-- done fixup virtual columns
[oracle@oel7 ~]$
--&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>expdp</category>
      <category>IMPDP</category>
      <category>Schema</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/114</guid>
      <comments>https://darkturtle.tistory.com/114#entry114comment</comments>
      <pubDate>Fri, 3 Mar 2023 18:37:46 +0900</pubDate>
    </item>
    <item>
      <title>2022/03/01 [08] 그레이트 리세션 2023년 경제전망 ( 김광석 지음 )</title>
      <link>https://darkturtle.tistory.com/113</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2022/03/01&amp;nbsp;[08]&amp;nbsp;그레이트&amp;nbsp;리세션&amp;nbsp;2023년&amp;nbsp;경제전망&amp;nbsp;(&amp;nbsp;김광석&amp;nbsp;지음&amp;nbsp;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;경제에&amp;nbsp;관심을&amp;nbsp;가지게&amp;nbsp;되면서,&amp;nbsp;나름&amp;nbsp;익숙해진&amp;nbsp;분이다. &lt;br /&gt;나처럼&amp;nbsp;경제초보도&amp;nbsp;쉽게&amp;nbsp;이해하며&amp;nbsp;읽을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;책이다. &lt;br /&gt;중요&amp;nbsp;키워드에&amp;nbsp;대해서&amp;nbsp;자세한&amp;nbsp;설명이&amp;nbsp;있어&amp;nbsp;초보에게&amp;nbsp;더욱&amp;nbsp;좋다. &lt;br /&gt;&lt;br /&gt;금리인상이&amp;nbsp;전쟁을&amp;nbsp;멈추고&amp;nbsp;&amp;nbsp;원자재&amp;nbsp;공급을&amp;nbsp;늘릴&amp;nbsp;수는&amp;nbsp;없다. &lt;br /&gt;그러나&amp;nbsp;가계의소비를&amp;nbsp;위축시키고,&amp;nbsp;기업의투자를&amp;nbsp;멈추게&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;부족한&amp;nbsp;공급만큼이나&amp;nbsp;수요를&amp;nbsp;줄여준다면&amp;nbsp;가격은&amp;nbsp;잡히는&amp;nbsp;법이다. &lt;br /&gt;결국&amp;nbsp;지금의&amp;nbsp;인플레이션은&amp;nbsp;경기침체가&amp;nbsp;와야만&amp;nbsp;멈추는&amp;nbsp;것이다. &lt;br /&gt;&lt;br /&gt;&quot;변화에&amp;nbsp;투자하라&quot;&amp;nbsp;매&amp;nbsp;경제전망서를&amp;nbsp;발표할&amp;nbsp;때마다&amp;nbsp;강조하는&amp;nbsp;표현이다. &lt;br /&gt;물론&amp;nbsp;여기서&amp;nbsp;투자는&amp;nbsp;'나&amp;nbsp;자신에&amp;nbsp;대한&amp;nbsp;투자'도&amp;nbsp;포함된다.&amp;nbsp; &lt;br /&gt;즉,&amp;nbsp;2023년&amp;nbsp;경제가&amp;nbsp;어떻게&amp;nbsp;전개될지를&amp;nbsp;들여다보고&amp;nbsp;변화할&amp;nbsp;환경에&amp;nbsp;어떻게&amp;nbsp;대응할지를&amp;nbsp;고민해야&amp;nbsp;한다. &lt;br /&gt;금리를&amp;nbsp;비롯한&amp;nbsp;글로벌&amp;nbsp;통화정책의&amp;nbsp;향방이&amp;nbsp;바뀌기&amp;nbsp;시작했고,&amp;nbsp;돈의&amp;nbsp;가치가&amp;nbsp;움직일&amp;nbsp;수밖에&amp;nbsp;없다. &lt;br /&gt;돈의&amp;nbsp;가치가&amp;nbsp;움직이니&amp;nbsp;자산가치도&amp;nbsp;움직인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;http://www.yes24.com/Product/Goods/114854198&quot; href=&quot;http://www.yes24.com/Product/Goods/114854198&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Product/Goods/114854198&lt;/a&gt;&lt;/p&gt;</description>
      <category>읽고 생각하고 쓰기</category>
      <category>2023</category>
      <category>경제전망</category>
      <category>그레이트</category>
      <category>김광석</category>
      <category>리세션</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/113</guid>
      <comments>https://darkturtle.tistory.com/113#entry113comment</comments>
      <pubDate>Wed, 1 Mar 2023 06:15:53 +0900</pubDate>
    </item>
    <item>
      <title>2022/02/26 [07] I MAY BE WRONG 비욘 나티코 린데블라드 지음</title>
      <link>https://darkturtle.tistory.com/112</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-b22b8100-dcbc-454d-92e2-d63e7ef57169&quot; data-ke-size=&quot;size16&quot;&gt;2022/02/26 [07] I MAY BE WRONG 비욘 나티코 린데블라드 지음&lt;/p&gt;
&lt;p id=&quot;SE-ef9e888e-d067-4dac-b8f0-1c60f392fd56&quot; data-ke-size=&quot;size16&quot;&gt;: 마음챙김을 자신의 삶으로 오롯이 보여주는 책이다.&lt;/p&gt;
&lt;p id=&quot;SE-281e7781-07f0-41a9-ba60-da9684d2b61c&quot; data-ke-size=&quot;size16&quot;&gt;스스로 상처 받고, 깨닫고 내려놓는 모습에서 공감이 되고, 분발의 계기가 되는 책이다.&lt;/p&gt;
&lt;p id=&quot;SE-772501ac-9fbd-4626-8065-b862e4c17517&quot; data-ke-size=&quot;size16&quot;&gt;스스로 삶을 마무리하는 저자의 아버님 그리고 가족의 모습은 너무 충격적이다? 나라면?&lt;/p&gt;
&lt;p id=&quot;SE-f494c8e8-2683-459d-86d0-578bea1db9e1&quot; data-ke-size=&quot;size16&quot;&gt;머리로는 이해가 되지만,아직 나의 가슴은 본인으로서도, 가족으로서도 준비가 되지 않았다.&lt;/p&gt;
&lt;p id=&quot;SE-21e8a1dd-06cc-4ab6-9e1b-e49bd3784486&quot; data-ke-size=&quot;size16&quot;&gt;나라면 슬픔과 두려움에 정신 못 차릴 것 같다.&lt;/p&gt;
&lt;p id=&quot;SE-4bcc21dc-05f8-43fd-91c5-af2b7c0db1fa&quot; data-ke-size=&quot;size16&quot;&gt;이런 류의 책으로 법륜 스님의 기도(마음챙김수련서(?)) 나 마음 챙김(마음 챙김 이론서(?))을 추천한다.&lt;/p&gt;
&lt;p id=&quot;SE-4db8a252-8950-495b-a89f-0fdab8537c40&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-1017f670-54c9-4686-bf03-e7bf57fe6ea4&quot; data-ke-size=&quot;size16&quot;&gt;나에게 울림이 있는 글을 발췌 한다.&lt;/p&gt;
&lt;p id=&quot;SE-29e21bb5-22ed-4722-adb8-297862327c10&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-a61cc078-ef87-4666-94c4-a48c3b1899fb&quot; data-ke-size=&quot;size16&quot;&gt;우리는 생각을 선택하지 못합니다.&lt;/p&gt;
&lt;p id=&quot;SE-513b310a-e820-4ec0-85b5-b1ee68808564&quot; data-ke-size=&quot;size16&quot;&gt;그 생각이 어떤 양상을 취할지도 통제하지 못하지요.&lt;/p&gt;
&lt;p id=&quot;SE-40efd941-180e-4c85-8fcc-af7da534c5aa&quot; data-ke-size=&quot;size16&quot;&gt;다만 어떤 생각은 더 오래 품으며 고취할 수 있고,&lt;/p&gt;
&lt;p id=&quot;SE-cbed171b-4b8a-4658-94ce-13ff62aec38c&quot; data-ke-size=&quot;size16&quot;&gt;어떤 생각에는 최대한 작은 공간만을 내줄 수도 있습니다.&lt;/p&gt;
&lt;p id=&quot;SE-f2cb834e-363f-47c1-acfd-c9157c012f55&quot; data-ke-size=&quot;size16&quot;&gt;마음속에 불쑥 떠오르는 생각을 막을 방법은 없습니다.&lt;/p&gt;
&lt;p id=&quot;SE-c882d898-c04a-4771-a574-bac1cb5232e7&quot; data-ke-size=&quot;size16&quot;&gt;하지만 그 생각을 믿을지 말지는 선택할 수 있습니다.&lt;/p&gt;
&lt;p id=&quot;SE-0da0660d-e448-4d8c-83f6-a3c44c686c0b&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-9410d672-adfc-489f-8ea3-a177b91d4a23&quot; data-ke-size=&quot;size16&quot;&gt;이미 안다고 생각하는 것에만 매달리면, 어떤 경험이나 배움도 우리에게 스며들 수 없게 되어 너무나 많은 것을&lt;/p&gt;
&lt;p id=&quot;SE-844708f3-0e15-4c24-a515-caed05b1df0d&quot; data-ke-size=&quot;size16&quot;&gt;놓치게 됩니다. 더 높은 지혜에 도달하고 싶다면, 신념과 확신을 살짝 내려놓고 우리가 실은 그다지 아는 것이&lt;/p&gt;
&lt;p id=&quot;SE-0174699a-cb28-40c3-a692-867330d1ce2e&quot; data-ke-size=&quot;size16&quot;&gt;없다는 사실에 좀 더 익숙해져야 합니다. 안다고 생각하는 것이야말로 큰 문제로 이어질 수 있습니다.&lt;/p&gt;
&lt;p id=&quot;SE-23d5ae28-9564-48f2-a1e0-e2b24121d056&quot; data-ke-size=&quot;size16&quot;&gt;그렇지만 잘 모른다는 점을 알면, 심각한 문제로 이어지는 일이 좀체 없습니다.&lt;/p&gt;
&lt;p id=&quot;SE-5bdf2096-f2aa-496d-ad1f-f46d6e470fde&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-e09683a5-7226-48ea-b8f1-7cda07cd3b08&quot; data-ke-size=&quot;size16&quot;&gt;인간이 겪는 심리적 고통 대부분은 자발적인 것이며 스스로 초래한 고통입니다.&lt;/p&gt;
&lt;p id=&quot;SE-92681a1a-562c-4962-a4fc-e5977e214488&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-4a968fbb-5658-4b33-97a4-dbe08289d029&quot; data-ke-size=&quot;size16&quot;&gt;생각과 통제력을 내려놓기, 내면을 돌아보고 경청하기, 현재에 집중하기, 정기적으로 편안하게 쉬기,&lt;/p&gt;
&lt;p id=&quot;SE-bb536136-7825-4d98-a6ee-a72f54c078d9&quot; data-ke-size=&quot;size16&quot;&gt;신뢰하며 살기. 이 모든 것들은 서로 연결되어 있습니다.&lt;/p&gt;
&lt;p id=&quot;SE-d845c204-da34-4e9e-b6fe-ceb1cd528ae8&quot; data-ke-size=&quot;size16&quot;&gt;모두 생각에 휘둘리는 대신 우리의 현실에 더 깊이 뿌리내린 소중한 것들을 탐지하는 일이지요.&lt;/p&gt;
&lt;p id=&quot;SE-94eb4be9-5923-433c-9510-91caf9f97b6e&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-e039bfe4-4633-4b15-96f1-db26c83338d7&quot; data-ke-size=&quot;size16&quot;&gt;어떻게 하면 삶이 펼쳐지는 데 잘 대응할 수 있을까요?&lt;/p&gt;
&lt;p id=&quot;SE-29689704-db4b-435a-bddd-6a51355d5a0d&quot; data-ke-size=&quot;size16&quot;&gt;간단합니다. 미래의 계획과 통제와 조직에 덜 신경 쓰고 현재에 더 충실하면 됩니다.&lt;/p&gt;
&lt;p id=&quot;SE-7bff62c8-8f0c-463a-b3c9-036336450dc6&quot; data-ke-size=&quot;size16&quot;&gt;완전한 몰입에 빠졌을 때의 기분을 아실 겁니다. 기민하게 주의를 집중하게 되지요.&lt;/p&gt;
&lt;p id=&quot;SE-bb7618e3-da7e-4f3b-824b-d7f74083dcbf&quot; data-ke-size=&quot;size16&quot;&gt;알아차림이라고 부를 수도 있을 것이다.. 순간에 몰입할 줄 아는 사람은 닥치지도 않은&lt;/p&gt;
&lt;p id=&quot;SE-4e870e42-c124-4e10-be65-28931658e749&quot; data-ke-size=&quot;size16&quot;&gt;온갖 일에 대응할 방법을 궁리하면서, 혹시나 잘못될지도 모를 상활을 미리 숙고하지 않습니다.&lt;/p&gt;
&lt;p id=&quot;SE-a1d24ff8-043c-4201-9d1a-676282bc5070&quot; data-ke-size=&quot;size16&quot;&gt;원하는 대로 상황이 흘러갈지를 끊임없이 걱정하지도 않지요. 오히려 열린 마음으로 현재에&lt;/p&gt;
&lt;p id=&quot;SE-95f7ac22-b4f1-40b7-8763-68baa1384b83&quot; data-ke-size=&quot;size16&quot;&gt;충실히 대응합니다. 더 현명한 방법이지요.&lt;/p&gt;
&lt;p id=&quot;SE-dda72676-47e0-4172-8970-0d715d57f8a6&quot; data-ke-size=&quot;size16&quot;&gt;통제 욕구를 내려놓고 당면한 상황을 의식하려면 불확실성에 직면할 용기를 내야 합니다.&lt;/p&gt;
&lt;p id=&quot;SE-a3c9d80e-ee03-4414-83b2-82beedb6f68c&quot; data-ke-size=&quot;size16&quot;&gt;하지만 대부분의 사람에게는 상당히 벅찬 일입니다.&lt;/p&gt;
&lt;p id=&quot;SE-3327baf2-d669-4281-b95a-6849d086beed&quot; data-ke-size=&quot;size16&quot;&gt;인간은 본래 무엇이든지 알고 싶어 합니다. 지극히 자연스러운 충동이지요.&lt;/p&gt;
&lt;p id=&quot;SE-e0869bea-43fa-45fa-b5a2-50674bd66c60&quot; data-ke-size=&quot;size16&quot;&gt;앞날을&amp;nbsp;알&amp;nbsp;수 없다고&amp;nbsp;느낄&amp;nbsp;때&amp;nbsp;우리는&amp;nbsp;불안을&amp;nbsp;느끼면서&amp;nbsp;행동&amp;nbsp;또한&amp;nbsp;경직됩니다.&lt;/p&gt;
&lt;p id=&quot;SE-bfb9a196-828f-45c0-8ed8-013e068246f4&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-51b8ea5e-f37e-4a09-a319-b9a4dae1567c&quot; data-ke-size=&quot;size16&quot;&gt;어쨌거나 저는 앞일을 머리 걱정하지 않는 법과 떠오르는 생각을 다 믿지 않는 법을 17년 동안이나 수행했으니까요.&lt;/p&gt;
&lt;p id=&quot;SE-bc5924e6-1ab2-4e6a-a665-478517e49901&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-f21689b3-3427-45cd-ba6e-450d06fa8048&quot; data-ke-size=&quot;size16&quot;&gt;만나는 사람마다&lt;/p&gt;
&lt;p id=&quot;SE-65f0f931-b0ec-4acb-a914-63acb16335bc&quot; data-ke-size=&quot;size16&quot;&gt;네가 모르는&lt;/p&gt;
&lt;p id=&quot;SE-09701668-7903-4354-9b61-d2e5a77904a6&quot; data-ke-size=&quot;size16&quot;&gt;전투를 치르고 있다.&lt;/p&gt;
&lt;p id=&quot;SE-19462a04-d7f0-4b48-bc32-cf17d9425743&quot; data-ke-size=&quot;size16&quot;&gt;친절하라,&lt;/p&gt;
&lt;p id=&quot;SE-0059a1dc-635f-42be-bff8-006dc4002433&quot; data-ke-size=&quot;size16&quot;&gt;그 어느 때라도.&lt;/p&gt;
&lt;p id=&quot;SE-3f40ab20-ee91-43c6-b4a3-019eea0f54c3&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-80320061-13a4-4f70-b339-dd06645cdeb2&quot; data-ke-size=&quot;size16&quot;&gt;엘미사베트, 그때 아직 내 곁에 누워 있지 않다면 얼른 침대에 올라와서 나를 안아주구려.&lt;/p&gt;
&lt;p id=&quot;SE-830f7cd5-5a46-42c8-ae56-b0e94584de7d&quot; data-ke-size=&quot;size16&quot;&gt;그리고 내 눈을 바라봐요.&lt;/p&gt;
&lt;p id=&quot;SE-e2d816b1-fee5-432d-aa23-276df3f0f210&quot; data-ke-size=&quot;size16&quot;&gt;내가&amp;nbsp;이 생에서&amp;nbsp;마지막으로&amp;nbsp;보는&amp;nbsp;게&amp;nbsp;당신의&amp;nbsp;눈이었으면&amp;nbsp;좋겠소.&lt;/p&gt;
&lt;p id=&quot;SE-33b58605-7b57-4aea-95b9-cca06f9d04df&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-e90d56f3-9490-45a0-a6ce-09e8ce35d2c6&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-befe1c02-0341-4fb2-b2fb-d19438b16ffb&quot; data-ke-size=&quot;size16&quot;&gt;당신의 존재가 햇볕처럼 따뜻했습니다.&lt;/p&gt;
&lt;p id=&quot;SE-fa8e1764-ede1-4820-98a5-a1bf01d0da1c&quot; data-ke-size=&quot;size16&quot;&gt;온 몸으로 감사합니다.&lt;/p&gt;
&lt;p id=&quot;SE-bf341f4e-d89a-4ad3-90e7-9f0dcf3dd2c2&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-20ced899-7114-4ef1-9aa2-9c541d2123e8&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0070d1;&quot; data-href=&quot;http://www.yes24.com/Product/Goods/108850617&quot;&gt;&lt;a href=&quot;http://www.yes24.com/Product/Goods/108850617&quot;&gt;http://www.yes24.com/Product/Goods/108850617&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>읽고 생각하고 쓰기</category>
      <category>마음챙김</category>
      <category>비욘 나티코 린데블라드</category>
      <category>서양</category>
      <category>스웨덴</category>
      <category>승려</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/112</guid>
      <comments>https://darkturtle.tistory.com/112#entry112comment</comments>
      <pubDate>Sun, 26 Feb 2023 06:26:40 +0900</pubDate>
    </item>
    <item>
      <title>2022/02/17 [06]부자 아빠 가난한 아빠 ( 20주년 특별 기념판 ) 로버트 기요사키</title>
      <link>https://darkturtle.tistory.com/111</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2022/02/17&amp;nbsp;[06]부자&amp;nbsp;아빠&amp;nbsp;가난한&amp;nbsp;아빠&amp;nbsp;(&amp;nbsp;20주년&amp;nbsp;특별&amp;nbsp;기념판&amp;nbsp;)&amp;nbsp;로버트&amp;nbsp;기요사키&amp;nbsp; &lt;br /&gt;&lt;br /&gt;오래&amp;nbsp;전에&amp;nbsp;보았던&amp;nbsp;책이,&amp;nbsp;특별판이&amp;nbsp;나와서&amp;nbsp;다시&amp;nbsp;봐았다. &lt;br /&gt;하도&amp;nbsp;오래&amp;nbsp;전에&amp;nbsp;보았던&amp;nbsp;책이라,&amp;nbsp;완전히&amp;nbsp;새로&amp;nbsp;보는&amp;nbsp;책이었다. &lt;br /&gt;부의&amp;nbsp;추월차선이나,&amp;nbsp;나는&amp;nbsp;4시간만&amp;nbsp;일한다.&amp;nbsp;부자&amp;nbsp;아빠&amp;nbsp;까지&amp;nbsp;읽는&amp;nbsp;내내&amp;nbsp; &lt;br /&gt;열심히는&amp;nbsp;산것&amp;nbsp;같은데..&amp;nbsp;지금&amp;nbsp;상황은&amp;nbsp;모지&amp;nbsp;하는&amp;nbsp;불편함이&amp;nbsp;온다. &lt;br /&gt;현타가&amp;nbsp;와서,&amp;nbsp;급하게&amp;nbsp;몬가&amp;nbsp;시작하기&amp;nbsp;보다는&amp;nbsp;꾸준이&amp;nbsp;나의&amp;nbsp;불편함을&amp;nbsp;건들려&amp;nbsp;주며 &lt;br /&gt;나에게&amp;nbsp;자극이&amp;nbsp;되는&amp;nbsp;책을&amp;nbsp;꾸준히&amp;nbsp;읽으면&amp;nbsp;조금만&amp;nbsp;것부터&amp;nbsp;시작&amp;nbsp;해볼&amp;nbsp;생각이다. &lt;br /&gt;경제에&amp;nbsp;대해서&amp;nbsp;기본&amp;nbsp;개념이&amp;nbsp;생기면,&amp;nbsp;주식&amp;nbsp;투자로&amp;nbsp;로드&amp;nbsp;자전거&amp;nbsp;업그레이드&amp;nbsp;하기&amp;nbsp;...&amp;nbsp;못하면&amp;nbsp;지금것&amp;nbsp;계속&amp;nbsp;타기&amp;nbsp; &lt;br /&gt;옳고,&amp;nbsp;그름의&amp;nbsp;문제가&amp;nbsp;아니라.&amp;nbsp;이런&amp;nbsp;방법도&amp;nbsp;있고,&amp;nbsp;이&amp;nbsp;방법도&amp;nbsp;나에게도&amp;nbsp;잘&amp;nbsp;맞는지&amp;nbsp;조금씩&amp;nbsp;적용해볼&amp;nbsp;생각이다. &lt;br /&gt;&lt;br /&gt;주머니에게&amp;nbsp;돈(세금&amp;nbsp;및&amp;nbsp;대출)을&amp;nbsp;빼내&amp;nbsp;가므로&amp;nbsp;집은&amp;nbsp;부채라고&amp;nbsp;가르친다.&amp;nbsp;(&amp;nbsp;자산이&amp;nbsp;아니다.&amp;nbsp;) &lt;br /&gt;진정한&amp;nbsp;자산&amp;nbsp; &lt;br /&gt;1.&amp;nbsp;내가&amp;nbsp;없어도&amp;nbsp;되는&amp;nbsp;사업 &lt;br /&gt;2.&amp;nbsp;주식 &lt;br /&gt;3.&amp;nbsp;채권 &lt;br /&gt;4.&amp;nbsp;수입을&amp;nbsp;창출하는&amp;nbsp;부동산 &lt;br /&gt;...&amp;nbsp;이하&amp;nbsp;생략.. &lt;br /&gt;&lt;br /&gt;금융&amp;nbsp;지능을&amp;nbsp;키우게&amp;nbsp;되면&amp;nbsp;더&amp;nbsp;많은&amp;nbsp;선택권을&amp;nbsp;갖게&amp;nbsp;된다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;나&amp;nbsp;자신에게&amp;nbsp;먼저&amp;nbsp;지불하면,&amp;nbsp;금전적으로,&amp;nbsp;정신적으로,&amp;nbsp;그리고&amp;nbsp;재정적으로&amp;nbsp;더&amp;nbsp;강해진다.&amp;nbsp;(&amp;nbsp;타인의&amp;nbsp;빛을&amp;nbsp;갖기&amp;nbsp;위해,&amp;nbsp;더&amp;nbsp;분발할수&amp;nbsp;밖에&amp;nbsp;없어서...&amp;nbsp;)&amp;nbsp; &lt;br /&gt;&lt;br /&gt;똑똑한&amp;nbsp;투자가들은&amp;nbsp;시장의&amp;nbsp;타이밍에&amp;nbsp;연연하지&amp;nbsp;않는다. &lt;br /&gt;그들은&amp;nbsp;파도&amp;nbsp;하나를&amp;nbsp;놓치면&amp;nbsp;다음&amp;nbsp;파도를&amp;nbsp;찾아다니며&amp;nbsp;포지션을&amp;nbsp;확보한다. &lt;br /&gt;&lt;br /&gt;2022/02/06&amp;nbsp;[05]일의&amp;nbsp;기쁨과&amp;nbsp;슬픔&amp;nbsp;(&amp;nbsp;장류진&amp;nbsp;)&amp;nbsp; &lt;br /&gt;자기&amp;nbsp;계발서로&amp;nbsp;편중된&amp;nbsp;독서&amp;nbsp;취향을&amp;nbsp;위해&amp;nbsp;가끔씩&amp;nbsp;이렇게&amp;nbsp;의식적으로&amp;nbsp;소설을&amp;nbsp;읽는다.&amp;nbsp; &lt;br /&gt;경제서적도&amp;nbsp;의식적으로&amp;nbsp;읽을&amp;nbsp;생각이다. &lt;br /&gt;역시&amp;nbsp;이야기꾼인가,&amp;nbsp;소재도&amp;nbsp;기발하고,&amp;nbsp;전개도&amp;nbsp;생각&amp;nbsp;밖이라,&amp;nbsp;지루하지&amp;nbsp;않고&amp;nbsp;재미&amp;nbsp;있게&amp;nbsp;읽히는&amp;nbsp;글이다. &lt;br /&gt;무협지가&amp;nbsp;땡기는&amp;nbsp;밤이다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;밥&amp;nbsp;먹고&amp;nbsp;일하고&amp;nbsp;잠자던&amp;nbsp;여자의&amp;nbsp;생활이,&amp;nbsp;단숨에&amp;nbsp;몇개의&amp;nbsp;상자에&amp;nbsp;네모나게&amp;nbsp;포장되었다. &lt;br /&gt;&lt;br /&gt;다만&amp;nbsp;노동과&amp;nbsp;일상의&amp;nbsp;경계를&amp;nbsp;명민하게&amp;nbsp;알고,&amp;nbsp;일의&amp;nbsp;기쁨과&amp;nbsp;슬픔을&amp;nbsp;조화롭게&amp;nbsp;이해하는, &lt;br /&gt;이&amp;nbsp;시대&amp;nbsp;가장&amp;nbsp;보통의&amp;nbsp;우리들이다.(인아영&amp;nbsp;해설자분&amp;nbsp;글중에서&amp;nbsp;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;http://www.yes24.com/Product/Goods/58774995&quot; href=&quot;http://www.yes24.com/Product/Goods/58774995&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Product/Goods/58774995&lt;/a&gt;&lt;/p&gt;</description>
      <category>읽고 생각하고 쓰기</category>
      <category>가난한</category>
      <category>기요사키</category>
      <category>로버트 기요사키</category>
      <category>부자</category>
      <category>아빠</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/111</guid>
      <comments>https://darkturtle.tistory.com/111#entry111comment</comments>
      <pubDate>Sat, 18 Feb 2023 11:54:47 +0900</pubDate>
    </item>
    <item>
      <title>2022/02/06 [05]일의 기쁨과 슬픔 ( 장류진 )</title>
      <link>https://darkturtle.tistory.com/110</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2022/02/06&amp;nbsp;[05]일의&amp;nbsp;기쁨과&amp;nbsp;슬픔&amp;nbsp;(&amp;nbsp;장류진&amp;nbsp;)&amp;nbsp; &lt;br /&gt;자기&amp;nbsp;계발서로&amp;nbsp;편중된&amp;nbsp;독서&amp;nbsp;취향을&amp;nbsp;위해&amp;nbsp;가끔씩&amp;nbsp;이렇게&amp;nbsp;의식적으로&amp;nbsp;소설을&amp;nbsp;읽는다.&amp;nbsp; &lt;br /&gt;경제서적도&amp;nbsp;의식적으로&amp;nbsp;읽을&amp;nbsp;생각이다. &lt;br /&gt;역시&amp;nbsp;이야기꾼인가,&amp;nbsp;소재도&amp;nbsp;기발하고,&amp;nbsp;전개도&amp;nbsp;생각&amp;nbsp;밖이라,&amp;nbsp;지루하지&amp;nbsp;않고&amp;nbsp;재미&amp;nbsp;있게&amp;nbsp;읽히는&amp;nbsp;글이다. &lt;br /&gt;무협지가&amp;nbsp;땡기는&amp;nbsp;밤이다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;밥&amp;nbsp;먹고&amp;nbsp;일하고&amp;nbsp;잠자던&amp;nbsp;여자의&amp;nbsp;생활이,&amp;nbsp;단숨에&amp;nbsp;몇개의&amp;nbsp;상자에&amp;nbsp;네모나게&amp;nbsp;포장되었다. &lt;br /&gt;&lt;br /&gt;다만&amp;nbsp;노동과&amp;nbsp;일상의&amp;nbsp;경계를&amp;nbsp;명민하게&amp;nbsp;알고,&amp;nbsp;일의&amp;nbsp;기쁨과&amp;nbsp;슬픔을&amp;nbsp;조화롭게&amp;nbsp;이해하는, &lt;br /&gt;이&amp;nbsp;시대&amp;nbsp;가장&amp;nbsp;보통의&amp;nbsp;우리들이다.(인아영&amp;nbsp;해설자분&amp;nbsp;글중에서&amp;nbsp;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;http://www.yes24.com/Product/Goods/80742923&quot; href=&quot;http://www.yes24.com/Product/Goods/80742923&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Product/Goods/80742923&lt;/a&gt;&lt;/p&gt;</description>
      <category>읽고 생각하고 쓰기</category>
      <category>기쁨</category>
      <category>슬픔</category>
      <category>일</category>
      <category>장류진</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/110</guid>
      <comments>https://darkturtle.tistory.com/110#entry110comment</comments>
      <pubDate>Mon, 6 Feb 2023 19:10:35 +0900</pubDate>
    </item>
    <item>
      <title>2022/02/05 [04]아침의 재발견 ( 모기 겐이치로 )</title>
      <link>https://darkturtle.tistory.com/109</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2022/02/05&amp;nbsp;[04]아침의&amp;nbsp;재발견&amp;nbsp;(&amp;nbsp;모기&amp;nbsp;겐이치로&amp;nbsp;)&amp;nbsp; &lt;br /&gt;&lt;br /&gt;흐트러진&amp;nbsp;아침&amp;nbsp;루틴을&amp;nbsp;정비하고자&amp;nbsp;구로&amp;nbsp;도서관&amp;nbsp;예약&amp;nbsp;하고&amp;nbsp;읽었다. &lt;br /&gt;뇌과학,&amp;nbsp;작은&amp;nbsp;습관&amp;nbsp;등&amp;nbsp;익숙한&amp;nbsp;내용이고,&amp;nbsp;내용도&amp;nbsp;좋고,&amp;nbsp;읽기&amp;nbsp;쉽게&amp;nbsp;편집된&amp;nbsp;책이다.&amp;nbsp; &lt;br /&gt;저자분&amp;nbsp;생각&amp;nbsp;중&amp;nbsp;특히해서&amp;nbsp;기억에&amp;nbsp;남는건&amp;nbsp;,&amp;nbsp;아침&amp;nbsp;SNS&amp;nbsp;통해서,&amp;nbsp;새로운&amp;nbsp;소식을&amp;nbsp;접하고,&amp;nbsp;인맥을&amp;nbsp;넓히고,&amp;nbsp;글쓰기&amp;nbsp;실력을&amp;nbsp;높혀라 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;누군가에게&amp;nbsp;지금&amp;nbsp;안고&amp;nbsp;있는&amp;nbsp;감정이나&amp;nbsp;고민을&amp;nbsp;드러낼&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;사람이라면&amp;nbsp;좋은&amp;nbsp;출발점에&amp;nbsp;서&amp;nbsp;있다고&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;자신의&amp;nbsp;과거를&amp;nbsp;받아들이고&amp;nbsp;이미&amp;nbsp;적극적으로&amp;nbsp;한&amp;nbsp;걸음을&amp;nbsp;내디딘&amp;nbsp;셈이나&amp;nbsp;마찬&amp;nbsp;가지기&amp;nbsp;때문이다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;안타깝게도&amp;nbsp;뇌는&amp;nbsp;미래를&amp;nbsp;진지하게&amp;nbsp;생각하는&amp;nbsp;일에&amp;nbsp;서투르다. &lt;br /&gt;그래서&amp;nbsp;아무것도&amp;nbsp;하지&amp;nbsp;않고&amp;nbsp;내버려두면&amp;nbsp;눈앞에&amp;nbsp;있는&amp;nbsp;현실망&amp;nbsp;쫓으려&amp;nbsp;든다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;뇌는&amp;nbsp;내버려두면&amp;nbsp;부정적인&amp;nbsp;방향으로&amp;nbsp;사고하려&amp;nbsp;든다. &lt;br /&gt;해내고&amp;nbsp;싶은&amp;nbsp;일보다&amp;nbsp;안하는&amp;nbsp;편이&amp;nbsp;낫다고&amp;nbsp;생각하는&amp;nbsp;일에&amp;nbsp;집중하려&amp;nbsp;든다. &lt;br /&gt;그러니&amp;nbsp;아침에&amp;nbsp;일어나자마자&amp;nbsp;'할&amp;nbsp;수&amp;nbsp;있다','조금만&amp;nbsp;더&amp;nbsp;힘내자'와&amp;nbsp;같은 &lt;br /&gt;적극적인&amp;nbsp;말을&amp;nbsp;스스로에게&amp;nbsp;들려줄&amp;nbsp;필요가&amp;nbsp;있다. &lt;br /&gt;&lt;br /&gt;어떤한&amp;nbsp;습관을&amp;nbsp;들이기&amp;nbsp;싶다면&amp;nbsp;중간중간&amp;nbsp;새로운&amp;nbsp;일들을&amp;nbsp;시도하자. &lt;br /&gt;같은&amp;nbsp;것만&amp;nbsp;계속하지&amp;nbsp;말고&amp;nbsp;가끔은&amp;nbsp;일부러라도&amp;nbsp;큰&amp;nbsp;변화를&amp;nbsp;줘서&amp;nbsp;즐겨보자. &lt;br /&gt;&lt;br /&gt;업무에&amp;nbsp;쫓기는&amp;nbsp;삶은&amp;nbsp;뇌와&amp;nbsp;몸에&amp;nbsp;결코&amp;nbsp;좋은&amp;nbsp;영향을&amp;nbsp;미칠&amp;nbsp;수&amp;nbsp;없기&amp;nbsp;때문이다. &lt;br /&gt;일하는&amp;nbsp;시간을&amp;nbsp;조금&amp;nbsp;줄여서라도&amp;nbsp;몸과&amp;nbsp;마음에&amp;nbsp;여유를&amp;nbsp;주면 &lt;br /&gt;놀라울&amp;nbsp;만큼&amp;nbsp;업무의&amp;nbsp;질이&amp;nbsp;올라간다. &lt;br /&gt;업무의&amp;nbsp;질이&amp;nbsp;올라가면&amp;nbsp;성과&amp;nbsp;역시&amp;nbsp;자연스럽게&amp;nbsp;따라올&amp;nbsp;것이다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;Yes24_책보기&quot; href=&quot;http://www.yes24.com/Product/Goods/78491096&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Product/Goods/78491096&lt;/a&gt;&lt;/p&gt;</description>
      <category>읽고 생각하고 쓰기</category>
      <category>습관</category>
      <category>아침</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/109</guid>
      <comments>https://darkturtle.tistory.com/109#entry109comment</comments>
      <pubDate>Sun, 5 Feb 2023 10:20:13 +0900</pubDate>
    </item>
    <item>
      <title>&amp;quot;PK 설정이 장시간 걸릴때 확인 사항&amp;quot; NOT NULL 과 PK CONSTRAINT  ( 출처 : 불친절한 SQL 프로그래밍 P590 )</title>
      <link>https://darkturtle.tistory.com/108</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;NOT&amp;nbsp;NULL&amp;nbsp;과&amp;nbsp;PK&amp;nbsp;CONSTRAINT&amp;nbsp;&amp;nbsp;(&amp;nbsp;출처&amp;nbsp;:&amp;nbsp;불친절한&amp;nbsp;SQL&amp;nbsp;프로그래밍&amp;nbsp;P590&amp;nbsp;)&lt;/b&gt; &lt;br /&gt;:&amp;nbsp;일반적으로&amp;nbsp;PK&amp;nbsp;대상&amp;nbsp;칼럼에&amp;nbsp;대해서&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp;가.&amp;nbsp; 1) NOT NULL 설정 -&amp;gt; 2) PK UNIQUE INDEX 생성 -&amp;gt; 3) PK CONSTRAINT 순으로 작업 함 &lt;br /&gt;&amp;nbsp; &amp;nbsp;나.&amp;nbsp; 3)번 작업은 1~2초 안에 완료됨&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;( NOT NULL 설정이고, INDEX 가 이미 생성 되어 있어, 데이타 중복에 대한 검증 불필요 ) &lt;br /&gt;&amp;nbsp; &amp;nbsp; 다.&amp;nbsp; 3)번 작업이 오래 걸리는 경우는 PK 칼럼에&amp;nbsp;&amp;nbsp;대해서 NOT NULL 설정이 없는 경우이고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; , Data Migration 시, 종종 발견됨&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; 라.&amp;nbsp; 해소 방안은 PK 칼럼에 대한 NOT NULL 설정 !!! &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1674629284874&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; 
SQL&amp;gt; DROP TABLE T1 PURGE ;

Table dropped.

SQL&amp;gt; CREATE TABLE T1 ( C1 NUMBER NOT NULL, C2 NUMBER, C3 VARCHAR2(4000));

Table created.

SQL&amp;gt; INSERT INTO T1
  2  SELECT ROWNUM AS C1, ROWNUM AS C2 , LPAD('X',4000,'X') AS C3
  3  FROM  XMLTABLE('1 to 1000000');

1000000 rows created.

SQL&amp;gt; COMMIT;

Commit complete.

SQL&amp;gt; CREATE UNIQUE INDEX T1_U1 ON T1 ( C1 ) ;

Index created.

SQL&amp;gt; CREATE UNIQUE INDEX T1_U2 ON T1 ( C2 ) ;

Index created.

SQL&amp;gt; set timing on
-- NOT NULL + INDEX 생성 된 상태라, 바로 처리됨 
SQL&amp;gt; ALTER TABLE T1 ADD CONSTRAINT T1_PK PRIMARY KEY (C1);

Table altered.

Elapsed: 00:00:00.03
SQL&amp;gt; ALTER TABLE T1 DROP CONSTRAINT T1_PK ;

Table altered.

Elapsed: 00:00:00.02
-- NOT NULL 설정이 없고 + INDEX 생성 된 상태라, 바로 시간 걸림
-- 시간 걸림 --&amp;gt; TABLE FULL SCAN 으로 NOT NULL 확인 시간 .. 
SQL&amp;gt; ALTER TABLE T1 ADD CONSTRAINT T1_PK PRIMARY KEY (C2) ;

Table altered.

Elapsed: 00:00:51.94
SQL&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>constraint</category>
      <category>LONG TIME</category>
      <category>NOT NULL</category>
      <category>PK</category>
      <category>PK 설정이 장시간 걸릴때 확인 사항</category>
      <category>Too Long</category>
      <category>장시간</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/108</guid>
      <comments>https://darkturtle.tistory.com/108#entry108comment</comments>
      <pubDate>Wed, 25 Jan 2023 15:51:29 +0900</pubDate>
    </item>
    <item>
      <title>Delete vs ALTER TABLE ... MOVE INCLUDING ROWS WHERE 조건절 TABLESPACE.. UPDATE INDEXEX</title>
      <link>https://darkturtle.tistory.com/107</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문서 보다가 일반 DELETE 와 ALTER TABLE MOVE UPDATE INDEXES 기능비교&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;샘플이지만, CASE 1인 ALTER TABLE MOVE 의 경우, UNDO 발생이 없고, REDO 가 휠씬 적다&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;고려 휠씬 빠르게 수행 될것 같다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;상대적이겠지만, 삭제 량이 그렇게 많지 않다면 ALTER TABLE MOVE ( &lt;span style=&quot;color: #ee2323;&quot;&gt;rollback 안됨 주의 !!!&lt;/span&gt; )&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;삭제 량이 엄청 많다면,평소에 나눠서, LOOPING 식으로 야금야금 삭제..&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-- CASE 1&amp;nbsp; ALTER TABLE ... MOVE INCLUDING ROWS WHERE 조건절 TABLESPACE.. UPDATE INDEXEX&lt;br /&gt;&lt;i&gt;&lt;b&gt;ALTER&amp;nbsp;TABLE&amp;nbsp;T1&amp;nbsp;MOVE&amp;nbsp;INCLUDING&amp;nbsp;ROWS&amp;nbsp;WHERE&amp;nbsp;C1&amp;nbsp;&amp;lt;=&amp;nbsp;500000&amp;nbsp;TABLESPACE&amp;nbsp;USERS&amp;nbsp;UPDATE&amp;nbsp;INDEXES;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;--&amp;gt; WHERE 절에 만족하는 않는 ROW 는 삭제됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--&amp;gt; TABLESPACE USERS 로&amp;nbsp; 특정 TABLE 로 MOVE 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--&amp;gt; UPDATE INDEXES 옵션으로 관련 인덱스 VALID 유지 가능 ,&amp;nbsp; 이 옵셥 빼고 MOVE 시, INVALID 상태로 변경됨&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-- CASE 2 일반적인DELETE&amp;nbsp;&lt;br /&gt;&lt;b&gt;&lt;i&gt;DELETE&amp;nbsp;T1&amp;nbsp;WHERE&amp;nbsp;C1&amp;nbsp;&amp;lt;=&amp;nbsp;500000&amp;nbsp;;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1674195033405&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 1.  샘플 테이블 생성 
DROP TABLE T1 PURGE ;
CREATE TABLE T1 AS SELECT ROWNUM AS C1, SYSDATE - ROWNUM AS C2  FROM XMLTABLE('1 to 1000000');

ALTER TABLE T1 ADD CONSTRAINT T1_PK PRIMARY KEY ( C1 ) ;

-- 삭제 점 테이블 / 인덱스 사이즈 체크 
SELECT SEGMENT_NAME, BYTES/1024/1024 AS SIZE_MB, BLOCKS  FROM DBA_SEGMENTS WHERE SEGMENT_NAME  IN ('T1','T1_PK') ;
--    T1_PK	17	2176
--    T1	20	2560

-- 인덱스 상태 체크 
SELECT INDEX_NAME, STATUS,NUM_ROWS FROM DBA_INDEXES WHERE INDEX_NAME ='T1_PK';
-- T1_PK	VALID	1000000

--  &amp;gt;&amp;gt;&amp;gt;&amp;gt;  테이블 생성 후, 신규 세션으로 테스트 진행 필요 &amp;lt;&amp;lt;&amp;lt;&amp;lt;

-- 샘플 SID 지정 
select distinct sid from v$mystat ;


-- UNDO 및 REDO 측정 하기 
-- Check Undo 
SELECT s.inst_id, s.sid, s.serial#, s.status, t.used_ublk, t.used_urec 
FROM gv$session s, gv$transaction t, gv$process p
WHERE s.taddr = t.addr
and s.inst_id = t.inst_id
and s.paddr= p.addr
and s.INST_ID =p.INST_ID
and s.sid  = :v_sid
ORDER BY t.used_ublk desc, t.used_urec desC ;

-- Check Redo 
select  ss.sid, 'redo size:'||ss.value,    s.program,    s.module
from  v$statname     sn,v$sesstat     ss,v$session s
where ss.statistic#=sn.statistic# 
and   sn.name='redo size' 
and   s.sid=ss.sid 
and   s.sid = :v_sid 
and   ss.value&amp;gt;0
order by  ss.value;


-- 조건에 해당하지 않은 데이터는 재배치되지 않고 제거된다. 
-- CASE 1 
ALTER TABLE T1 MOVE INCLUDING ROWS WHERE C1 &amp;lt;= 500000 TABLESPACE USERS UPDATE INDEXES;

-- CASE 2 
DELETE T1 WHERE C1 &amp;lt;= 500000 ;

-- Check Undo 
SELECT s.inst_id, s.sid, s.serial#, s.status, t.used_ublk, t.used_urec 
FROM gv$session s, gv$transaction t, gv$process p
WHERE s.taddr = t.addr
and s.inst_id = t.inst_id
and s.paddr= p.addr
and s.INST_ID =p.INST_ID
and s.sid  = :v_sid
ORDER BY t.used_ublk desc, t.used_urec desC ;
-- CASE 1 
-- DDL 이라 UNDO 발생 없음

-- CASE 2 
-- USED_UBLK 14282
-- USED_UREC 1000000

-- Check Redo 
select  ss.sid, 'redo size:'||ss.value,    s.program,    s.module
from  v$statname     sn,v$sesstat     ss,v$session s
where ss.statistic#=sn.statistic# 
and   sn.name='redo size' 
and   s.sid=ss.sid 
and   s.sid = :v_sid 
and   ss.value&amp;gt;0
order by  ss.value;
-- CASE 1 
--redo size:936   &amp;gt;&amp;gt; redo size:  19,100,536

-- CASE 2 ( alter table 비교 10배 이상 redo 발생 )
--redo size:936   &amp;gt;&amp;gt; redo size: 263,581,944



SELECT SEGMENT_NAME, BYTES/1024/1024 AS SIZE_MB, BLOCKS  
FROM DBA_SEGMENTS WHERE SEGMENT_NAME  IN ('T1','T1_PK') ;
-- 테스트 전 
--    T1_PK	17	2176
--    T1	20	2560
-- CASE 1 -- ALTER TABLE 결과로 TABLE/INDEX 모두 사이즈가 줄어듦
--    T1_PK	9	1152
--    T1	10	1280
-- CASE 2  -- DELETE 로, TABLE/INDEX 모두 사이즈 변경 없음 
--    T1_PK	17	2176
--    T1	20	2560

-- INDEX 상태 및 NUM_ROWS 체크 
SELECT INDEX_NAME, STATUS,NUM_ROWS FROM DBA_INDEXES WHERE INDEX_NAME ='T1_PK';
-- 테스트 전 
-- T1_PK	VALID	1000000

-- CASE 1 --&amp;gt; DDL 로 자동으로  통계정보 수집 되는것으로 보임 
-- T1_PK    VALID    500000

-- CASE 2 --&amp;gt; DML 이라 변경 없음 
-- VALID	1000000

-- 테스트 후, NUM_ROWS 
SELECT COUNT(*) AS C1 FROM T1 ;
-- CASE1,2 모두 동일
--  500000&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>alter table move</category>
      <category>delete</category>
      <category>including rows</category>
      <category>update indexes</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/107</guid>
      <comments>https://darkturtle.tistory.com/107#entry107comment</comments>
      <pubDate>Fri, 20 Jan 2023 15:12:29 +0900</pubDate>
    </item>
    <item>
      <title>2022/01/14 [03] 루틴의 힘 2 ( 티나 실리그, 조슈아 포어, 스콧 영 외 지음 )</title>
      <link>https://darkturtle.tistory.com/106</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2022/01/14&amp;nbsp;[03]&amp;nbsp;루틴의&amp;nbsp;힘&amp;nbsp;2&amp;nbsp;(&amp;nbsp;티나&amp;nbsp;실리그,&amp;nbsp;조슈아&amp;nbsp;포어,&amp;nbsp;스콧&amp;nbsp;영&amp;nbsp;외&amp;nbsp;지음&amp;nbsp;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;능력자의&amp;nbsp;루틴,&amp;nbsp;네트워크의&amp;nbsp;루틴,&amp;nbsp;기회의&amp;nbsp;루틴,&amp;nbsp;그리고&amp;nbsp;모험의&amp;nbsp;루틴으로&amp;nbsp;구성이&amp;nbsp;맘에&amp;nbsp;들었지만,&amp;nbsp;그뿐이었다. &lt;br /&gt;원문&amp;nbsp;문제&amp;nbsp;인지&amp;nbsp;내&amp;nbsp;능력&amp;nbsp;부족인지&amp;nbsp;맥락이&amp;nbsp;이상하고,&amp;nbsp;당최&amp;nbsp;먼&amp;nbsp;소린가&amp;nbsp;싶은&amp;nbsp;글도&amp;nbsp;있다. &lt;br /&gt;천생&amp;nbsp;쫄보라&amp;nbsp;모험의&amp;nbsp;루틴이&amp;nbsp;가장&amp;nbsp;가슴에&amp;nbsp;와&amp;nbsp;닿았다. &lt;br /&gt;잘하고&amp;nbsp;싶어?&amp;nbsp;선택&amp;nbsp;하고,&amp;nbsp;집중&amp;nbsp;시간을&amp;nbsp;확보하고,&amp;nbsp;Practice,&amp;nbsp;Practice&amp;nbsp;and&amp;nbsp;Practice &lt;br /&gt;&lt;br /&gt;발췌&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;마음속&amp;nbsp;깊이&amp;nbsp;끌리는&amp;nbsp;일이&amp;nbsp;있다면&amp;nbsp;그&amp;nbsp;일을&amp;nbsp;당신이&amp;nbsp;헤라리지&amp;nbsp;못할&amp;nbsp;정도의&amp;nbsp;원동력이&amp;nbsp;될&amp;nbsp;것이다. &lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;그런&amp;nbsp;다음&amp;nbsp;뭔가를&amp;nbsp;끊기지&amp;nbsp;않고&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;시간을&amp;nbsp;마련해야&amp;nbsp;한다. &lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;예를&amp;nbsp;들어&amp;nbsp;원하는&amp;nbsp;기술을&amp;nbsp;연마하기&amp;nbsp;위해&amp;nbsp;평일에&amp;nbsp;1시간씩&amp;nbsp;실행하는&amp;nbsp;식인데, &lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;되도록&amp;nbsp;아침에&amp;nbsp;시작하는&amp;nbsp;것이좋다.&amp;nbsp;집중력이&amp;nbsp;높아지면&amp;nbsp;15분씩&amp;nbsp;늘리고&amp;nbsp;그러다&amp;nbsp;보면 &lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;나중에는&amp;nbsp;중단&amp;nbsp;없이&amp;nbsp;1시간&amp;nbsp;30분도&amp;nbsp;가능해진다.&amp;nbsp;&lt;/b&gt;&lt;/i&gt; &lt;br /&gt;&lt;br /&gt;현&amp;nbsp;상황을&amp;nbsp;깨지&amp;nbsp;않고&amp;nbsp;유지하려&amp;nbsp;애쓰는&amp;nbsp;순간,&amp;nbsp;위험은&amp;nbsp;찾아온다. &lt;br /&gt;&lt;br /&gt;특정&amp;nbsp;역할보다&amp;nbsp;성취하고&amp;nbsp;싶은&amp;nbsp;것을&amp;nbsp;목표로&amp;nbsp;삼는&amp;nbsp;것이&amp;nbsp;&amp;nbsp;좋다. &lt;br /&gt;이렇게&amp;nbsp;자문해&amp;nbsp;보자.&amp;nbsp;&quot;나는&amp;nbsp;어떤&amp;nbsp;문제를&amp;nbsp;해결하고&amp;nbsp;있는가?&amp;nbsp;내가&amp;nbsp;만들고&amp;nbsp;싶은&amp;nbsp;것,&amp;nbsp;바꾸고&amp;nbsp;싶은&amp;nbsp;것은&amp;nbsp;무엇인가?&quot; &lt;br /&gt;나오는&amp;nbsp;답에&amp;nbsp;따라&amp;nbsp;이후&amp;nbsp;과제가&amp;nbsp;달라질&amp;nbsp;것이다. &lt;br /&gt;&lt;br /&gt;실패를&amp;nbsp;편하게&amp;nbsp;받아들이는&amp;nbsp;방법은&amp;nbsp;무엇인가요? &lt;br /&gt;실패&amp;nbsp;이력서를&amp;nbsp;써&amp;nbsp;보라고&amp;nbsp;권해요. &lt;br /&gt;...&amp;nbsp;단,&amp;nbsp;각각의&amp;nbsp;실패에서&amp;nbsp;자신이&amp;nbsp;깨달은&amp;nbsp;내용을&amp;nbsp;써야&amp;nbsp;해요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;YES24_바로가기&quot; href=&quot;http://www.yes24.com/Product/Goods/96830609&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Product/Goods/96830609&lt;/a&gt;&lt;/p&gt;</description>
      <category>읽고 생각하고 쓰기</category>
      <category>기회</category>
      <category>네트워크</category>
      <category>능력</category>
      <category>루틴</category>
      <category>모험</category>
      <category>습관</category>
      <category>쫄보</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/106</guid>
      <comments>https://darkturtle.tistory.com/106#entry106comment</comments>
      <pubDate>Sat, 14 Jan 2023 23:02:51 +0900</pubDate>
    </item>
    <item>
      <title>2023/01/12 [03] 루틴의 힘 [ 댄 애리얼리, 그레첸 루빈, 세스 고딘 이 지음 )</title>
      <link>https://darkturtle.tistory.com/105</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2023/01/12&amp;nbsp;[03]&amp;nbsp;루틴의&amp;nbsp;힘&amp;nbsp;[&amp;nbsp;댄&amp;nbsp;애리얼리,&amp;nbsp;그레첸&amp;nbsp;루빈,&amp;nbsp;세스&amp;nbsp;고딘&amp;nbsp;이&amp;nbsp;지음&amp;nbsp;) &lt;br /&gt;&lt;br /&gt;연말&amp;nbsp;길게&amp;nbsp;휴가&amp;nbsp;길게&amp;nbsp;쉬고,&amp;nbsp;나만의&amp;nbsp;루틴이&amp;nbsp;흔들리던&amp;nbsp;차에,&amp;nbsp; &lt;br /&gt;고척도서관&amp;nbsp;반납된&amp;nbsp;책을&amp;nbsp;보고,&amp;nbsp;루틴의&amp;nbsp;힘&amp;nbsp;1,2권&amp;nbsp;모두&amp;nbsp;대여하고&amp;nbsp;틈틈이&amp;nbsp;소리&amp;nbsp;내여&amp;nbsp;읽기,&amp;nbsp;잠&amp;nbsp;안 오는&amp;nbsp;날&amp;nbsp;읽다가&amp;nbsp;잠들기 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;&amp;lt;&amp;nbsp;한줄&amp;nbsp;요약&amp;nbsp;&amp;nbsp;&amp;gt;&amp;gt;&lt;/b&gt; &lt;br /&gt;자제력이란&amp;nbsp;리소스는&amp;nbsp;한계가&amp;nbsp;있으니,&amp;nbsp;자신만의&amp;nbsp;무의식적인&amp;nbsp;좋은&amp;nbsp;작은&amp;nbsp;습관을&amp;nbsp;가져라,&amp;nbsp;그&amp;nbsp;습관이&amp;nbsp;너의&amp;nbsp;좋은&amp;nbsp;생활(삶)을&amp;nbsp;이룰&amp;nbsp;것이다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;&amp;lt;&amp;nbsp;따라&amp;nbsp;해 보기&amp;nbsp;&amp;gt;&amp;gt;&lt;/b&gt; &lt;br /&gt;1.&amp;nbsp;자주&amp;nbsp;하자,&amp;nbsp;5분만&amp;nbsp;여유가&amp;nbsp;생겨도&amp;nbsp;&amp;nbsp;공부하자 &lt;br /&gt;2.&amp;nbsp;나만의&amp;nbsp;시간을&amp;nbsp;확보하자.&amp;nbsp;(&amp;nbsp;구글&amp;nbsp;캔린더에&amp;nbsp;08:30&amp;nbsp;~&amp;nbsp;10:00&amp;nbsp;&quot;집중&amp;nbsp;근무&amp;nbsp;시간&quot;&amp;nbsp;설정하기&amp;nbsp;)&amp;nbsp; &lt;br /&gt;3.&amp;nbsp;토요일&amp;nbsp;오전&amp;nbsp;반나절,&amp;nbsp;기술&amp;nbsp;안실일&amp;nbsp;(&amp;nbsp;안드로이드폰&amp;nbsp;-&amp;gt;&amp;nbsp;설정&amp;nbsp;-&amp;gt;&amp;nbsp;유용한&amp;nbsp;기능&amp;nbsp;-&amp;gt;&amp;nbsp;나만의&amp;nbsp;시간&amp;nbsp;설정&amp;nbsp;(&amp;nbsp;통화와&amp;nbsp;메시지만&amp;nbsp;가능&amp;nbsp;)) &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;&amp;lt;&amp;nbsp;발췌&amp;nbsp;&amp;gt;&amp;gt;&lt;/b&gt; &lt;br /&gt;매일&amp;nbsp;일을&amp;nbsp;하면&amp;nbsp;당연히&amp;nbsp;더&amp;nbsp;많은&amp;nbsp;것을&amp;nbsp;이뤄&amp;nbsp;낼&amp;nbsp;가능성이&amp;nbsp;커진다. &lt;br /&gt;매일&amp;nbsp;성과를&amp;nbsp;낸다는&amp;nbsp;사실&amp;nbsp;자체만으로&amp;nbsp;다음&amp;nbsp;날&amp;nbsp;작업이&amp;nbsp;좀&amp;nbsp;더&amp;nbsp;수월해지고&amp;nbsp;즐거워지는&amp;nbsp;것이다. &lt;br /&gt;자신의&amp;nbsp;원대한&amp;nbsp;목표를&amp;nbsp;향해&amp;nbsp;한&amp;nbsp;걸음&amp;nbsp;한&amp;nbsp;걸음&amp;nbsp;꾸준히&amp;nbsp;나아가고&amp;nbsp;있다는&amp;nbsp;느낌만큼&amp;nbsp;만족스러운&amp;nbsp;것은&amp;nbsp;없다. &lt;br /&gt;&lt;br /&gt;물론&amp;nbsp;'자주&amp;nbsp;하라'고&amp;nbsp;해서&amp;nbsp;반드시&amp;nbsp;'매일&amp;nbsp;하라'는&amp;nbsp;뜻은&amp;nbsp;아니다. &lt;br /&gt;가장&amp;nbsp;중요한&amp;nbsp;점은&amp;nbsp;지속성이다. &lt;br /&gt;그러나&amp;nbsp;일하는&amp;nbsp;간격이&amp;nbsp;넓어질수록&amp;nbsp;그로&amp;nbsp;인해&amp;nbsp;누릴&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;혜택은&amp;nbsp;줄어들&amp;nbsp;것이다. &lt;br /&gt;&lt;br /&gt;'다른&amp;nbsp;이들의&amp;nbsp;요청을&amp;nbsp;신속하게&amp;nbsp;처리해야&amp;nbsp;프로답다'는&amp;nbsp;망상&amp;nbsp;때문에&amp;nbsp;자신의&amp;nbsp;잠재력을&amp;nbsp;갉아먹게&amp;nbsp;된다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이제&amp;nbsp;제크는&amp;nbsp;하루를&amp;nbsp;시작할&amp;nbsp;때&amp;nbsp;가장&amp;nbsp;중요한&amp;nbsp;일을&amp;nbsp;제일&amp;nbsp;먼저&amp;nbsp;처리&amp;nbsp;한다. &lt;br /&gt;그는&amp;nbsp;장기적으로&amp;nbsp;가치가&amp;nbsp;가장&amp;nbsp;높아질&amp;nbsp;가능성이&amp;nbsp;가장&amp;nbsp;크다고&amp;nbsp;여기는&amp;nbsp;과제에&amp;nbsp;60~90분&amp;nbsp;동안&amp;nbsp;집중한다. &lt;br /&gt;&lt;br /&gt;인간이&amp;nbsp;가진&amp;nbsp;어리석음의&amp;nbsp;가장&amp;nbsp;원초적인&amp;nbsp;형태를,&amp;nbsp;자신이&amp;nbsp;성취하고자&amp;nbsp;노력하는&amp;nbsp;대상을&amp;nbsp;망각하는&amp;nbsp;것이다.&amp;nbsp;(&amp;nbsp;프리드리히&amp;nbsp;니체&amp;nbsp;) &lt;br /&gt;&lt;br /&gt;우리가&amp;nbsp;시간&amp;nbsp;관리를&amp;nbsp;좀&amp;nbsp;더&amp;nbsp;잘하기&amp;nbsp;위해서는&amp;nbsp;무엇에&amp;nbsp;집중해야&amp;nbsp;할까? &lt;br /&gt;저는&amp;nbsp;가장&amp;nbsp;중요한&amp;nbsp;요소가&amp;nbsp;'진전의&amp;nbsp;가시화'라고&amp;nbsp;생각합니다.&amp;nbsp;(&amp;nbsp;일기&amp;nbsp;등&amp;nbsp;기록&amp;nbsp;남기기&amp;nbsp;) &lt;br /&gt;&lt;br /&gt;(&amp;nbsp;동기&amp;nbsp;부여&amp;nbsp;및&amp;nbsp;나만의&amp;nbsp;시간&amp;nbsp;확보를&amp;nbsp;위한&amp;nbsp;)정말&amp;nbsp;하고&amp;nbsp;싶은&amp;nbsp;일은&amp;nbsp;미리&amp;nbsp;일정표에&amp;nbsp;표시해&amp;nbsp;두는&amp;nbsp;것 말이죠&amp;nbsp; &lt;br /&gt;&lt;br /&gt;우리&amp;nbsp;모두에게는&amp;nbsp;이런&amp;nbsp;자각이&amp;nbsp;필요합니다. &lt;br /&gt;우리에게&amp;nbsp;늘&amp;nbsp;시간이&amp;nbsp;없는&amp;nbsp;이유는&amp;nbsp;사실&amp;nbsp;시간이&amp;nbsp;없는&amp;nbsp;편이&amp;nbsp;더&amp;nbsp;편리하기&amp;nbsp;때문이라는&amp;nbsp;깨달음&amp;nbsp;말입니다. &lt;br /&gt;그리고&amp;nbsp;자기&amp;nbsp;자신에게&amp;nbsp;도전하고&amp;nbsp;싶지&amp;nbsp;않기&amp;nbsp;때문이기도&amp;nbsp;하지요. &lt;br /&gt;&lt;br /&gt;일주일에&amp;nbsp;한번,&amp;nbsp;(&amp;nbsp;전자&amp;nbsp;기기&amp;nbsp;전원을&amp;nbsp;끄는&amp;nbsp;)&amp;nbsp;기술&amp;nbsp;안식일&amp;nbsp;가져라&amp;nbsp;(&amp;nbsp;영혼은&amp;nbsp;재설정한다&amp;nbsp;)&amp;nbsp; &lt;br /&gt;&lt;br /&gt;가장&amp;nbsp;곤란한&amp;nbsp;점은&amp;nbsp;우리가&amp;nbsp;'긴급함'과&amp;nbsp;'중요함'을&amp;nbsp;제대로&amp;nbsp;구별하지&amp;nbsp;못해서, &lt;br /&gt;모든&amp;nbsp;일이&amp;nbsp;긴급한&amp;nbsp;일로&amp;nbsp;구분된다는&amp;nbsp;것이다. &lt;br /&gt;솔직히&amp;nbsp;말해&amp;nbsp;소위&amp;nbsp;'긴급'하지만&amp;nbsp;사소한&amp;nbsp;일이,&amp;nbsp;'중요'한&amp;nbsp;일보다&amp;nbsp;먼저&amp;nbsp;처리되기&amp;nbsp;훨씬&amp;nbsp;쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;Yes24_책보기&quot; href=&quot;http://www.yes24.com/Product/Goods/87579834&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Product/Goods/87579834&lt;/a&gt;&lt;/p&gt;</description>
      <category>읽고 생각하고 쓰기</category>
      <category>루틴</category>
      <category>습관</category>
      <category>힘</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/105</guid>
      <comments>https://darkturtle.tistory.com/105#entry105comment</comments>
      <pubDate>Thu, 12 Jan 2023 23:29:04 +0900</pubDate>
    </item>
    <item>
      <title>AUTHID CURRENT_USER(실제 수행 유저 ) VS AUTHID DEFINER(컴파일 유저 기준)</title>
      <link>https://darkturtle.tistory.com/104</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;AUTHID&amp;nbsp;CURRENT_USER&amp;nbsp;VS&amp;nbsp;AUTHID&amp;nbsp;DEFINER&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;1. FUNCTION, PACKAGE, PROCEDURE, TYPE 생성 시, AHTHID 설정 값을 통해서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp; &amp;nbsp; OBJECT 내에서 접근하는 OBJECT 에 대한 권한 체크 방식으로 정의 할수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2. AUTHID DEFINER : 해당 OBJECT 를 DEFINER , 즉 생성한 생성자에 대한 권한 체크 [ Default ]&amp;nbsp;&lt;br /&gt;3. AUTHID CURRENT_USER : 해당 OBJECT를 호출한 호출자에 대한 권한 체크&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4. 보통 (2)으로 생성 하면 , 문제가 없음&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;5. (3)방식으로 생성 하는 경우는 유저별 권한을 구분하고자 할때 (EX) 복제 구성 환경 등 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;매뉴얼이 최고지 &amp;gt;&amp;gt;&amp;nbsp;&lt;a href=&quot;http://%20https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/plsql-subprograms.html#GUID-41D23DE7-3C07-41CF-962B-F92B696594B5&quot;&gt;Oracle_Manual&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;테스트 내용&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672643465456&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- # 1. 테스트 유저 생성 
create user test_user identified by qwer1234 ;
User created.

grant connect to test_user ;
Grant succeeded.

-- # 2. 테스트 테이블 및 프로시져 생성( AUTHID는 설정 없음 =  DEFAULT  ) 
--      Public Synonym 도 추가 함 
CREATE TABLE INSERT_TEST ( A1 DATE, A2 VARCHAR2(30)) ; 
CREATE PUBLIC SYNONYM  INSERT_TEST for INSERT_TEST ;

CREATE OR REPLACE PROCEDURE INSERT_TEST_PRC
IS
BEGIN
-- AUTHID 설정을 특별히 하지 않았으므로, AUTHID CURRENT_USER 이다. 
INSERT INTO INSERT_TEST VALUES ( SYSDATE, TO_CHAR(SYSDATE,'YYYY/MM/DD') ) ;
COMMIT ;
END ;

-- CASE 1 ) 테이블 조회 권한 + 프로시져 수행 권한 + 프로시져 수행 --&amp;gt; 성공 
GRANT SELECT ON INSERT_TEST TO TEST_USER ; 
GRANT EXECUTE ON INSERT_TEST_PRC TO TEST_USER ;

-- 권한 체크 ( 테이블 조회 + 프로시져 수행 권한  ) 
SET LINESIZE 180
COL TABLE_NAME FOR A20
COL GRANTEE FOR A30
COL PRIVILEGE FOR A30
SELECT TABLE_NAME, GRANTEE, PRIVILEGE 
FROM   DBA_TAB_PRIVS 
WHERE  GRANTEE='TEST_USER';

EXECUTE SCOTT.INSERT_TEST_PRC;
SELECT * FROM SCOTT.INSERT_TEST ; 
TABLE_NAME           GRANTEE                        PRIVILEGE
-------------------- ------------------------------ ------------------------------
INSERT_TEST          TEST_USER                      SELECT
INSERT_TEST_PRC      TEST_USER                      EXECUTE


-- 세션 설정 
SET sqlprompt &quot;_USER'@'_CONNECT_IDENTIFIER&amp;gt; &quot;
https://estenpark.tistory.com/293

CONN TEST_USER/TEST_USER
-- 정상 수행 확인 
TEST_USER@oracle19&amp;gt;  SELECT * FROM SCOTT.INSERT_TEST ;
no rows selected

TEST_USER@oracle19&amp;gt; EXECUTE SCOTT.INSERT_TEST_PRC;
PL/SQL procedure successfully completed.

TEST_USER@oracle19&amp;gt;  SELECT * FROM SCOTT.INSERT_TEST ;
A1        A2
--------- ------------------------------
02-JAN-23 2023/01/02                    &amp;lt;&amp;lt;&amp;lt; 정상 수행 확인 


-- CASE 2) INSERT_TEST_PRC 를 AUTHID CURRENT_USER 추가 
CREATE OR REPLACE PROCEDURE INSERT_TEST_PRC
authid current_user
IS
BEGIN
-- AUTHID 설정을 특별히 하지 않았으므로, AUTHID CURRENT_USER 이다. 
INSERT INTO INSERT_TEST VALUES ( SYSDATE, TO_CHAR(SYSDATE,'YYYY/MM/DD') ) ;
COMMIT ;
END ;


COL TABLE_NAME FOR A20
COL GRANTEE FOR A30
COL PRIVILEGE FOR A30
SELECT TABLE_NAME, GRANTEE, PRIVILEGE 
FROM   DBA_TAB_PRIVS 
WHERE  GRANTEE='TEST_USER';

TABLE_NAME           GRANTEE                        PRIVILEGE
-------------------- ------------------------------ ------------------------------
INSERT_TEST          TEST_USER                      SELECT
INSERT_TEST_PRC      TEST_USER                      EXECUTE

-- 테스트 전 데이타 일괄 삭제 
SCOTT@oracle19&amp;gt; truncate table scott.insert_test ;
Table truncated.


TEST_USER@oracle19&amp;gt; SELECT * FROM SCOTT.INSERT_TEST ;
no rows selected

TEST_USER@oracle19&amp;gt; EXECUTE SCOTT.INSERT_TEST_PRC;
BEGIN SCOTT.INSERT_TEST_PRC; END;
*
ERROR at line 1:
ORA-01031: insufficient privileges                    &amp;lt;&amp;lt;&amp;lt;&amp;lt; 권한 없음 오류 발생 
ORA-06512: at &quot;SCOTT.INSERT_TEST_PRC&quot;, line 6
ORA-06512: at line 1

TEST_USER@oracle19&amp;gt; SELECT * FROM SCOTT.INSERT_TEST ;
no rows selected

TEST_USER@oracle19&amp;gt;


-- CASE 3) Case2 상태에서 추가로 INSERT_TEST INSERT 권한 부여 
GRANT INSERT ON INSERT_TEST TO TEST_USER ; 

SET LINESIZE 180
COL TABLE_NAME FOR A20
COL GRANTEE FOR A30
COL PRIVILEGE FOR A30
SELECT TABLE_NAME, GRANTEE, PRIVILEGE 
FROM   DBA_TAB_PRIVS 
WHERE  GRANTEE='TEST_USER';
TABLE_NAME           GRANTEE                        PRIVILEGE
-------------------- ------------------------------ ------------------------------
INSERT_TEST          TEST_USER                      INSERT
INSERT_TEST          TEST_USER                      SELECT
INSERT_TEST_PRC      TEST_USER                      EXECUTE

TEST_USER@oracle19&amp;gt;  SELECT * FROM SCOTT.INSERT_TEST ;
no rows selected

TEST_USER@oracle19&amp;gt; EXECUTE SCOTT.INSERT_TEST_PRC;
PL/SQL procedure successfully completed.

TEST_USER@oracle19&amp;gt;  SELECT * FROM SCOTT.INSERT_TEST ;
A1        A2
--------- ------------------------------
02-JAN-23 2023/01/02                     &amp;lt;&amp;lt;&amp;lt;&amp;lt; 프로시져 통해 정상 데이타 입력 확인 

TEST_USER@oracle19&amp;gt;

-- Oracle Object 찾기 순서
-- SQL 이나 PL/SQL 에서 OBJECT 는 찾는 순서는 아래와 같다.
-- 본인 OBJECT -&amp;gt; Private Object -&amp;gt; Public Object 순으로 

-- TEST_USER 로 Private Synonym 을 생성 하는 것도 방법이지만
-- 계정별로 이렇게생성하기엔 손이 많이 가니,
-- 가급적 Public Synonym 을 생성한다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>AUTHID</category>
      <category>CURRENT_USER</category>
      <category>default</category>
      <category>DEFINER</category>
      <category>direct</category>
      <category>function</category>
      <category>object</category>
      <category>PAKCAGE</category>
      <category>PL/SQL</category>
      <category>procedure</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/104</guid>
      <comments>https://darkturtle.tistory.com/104#entry104comment</comments>
      <pubDate>Mon, 2 Jan 2023 19:00:57 +0900</pubDate>
    </item>
    <item>
      <title>TX-LOCK 이나 Library Cache Lock/Pin 발생 시, 빠르게 파악 및 해소하고 싶습니다.</title>
      <link>https://darkturtle.tistory.com/101</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;질문&amp;nbsp;:&amp;nbsp;TX-LOCK&amp;nbsp;이나&amp;nbsp;Library&amp;nbsp;Cache&amp;nbsp;Lock/Pin&amp;nbsp;발생&amp;nbsp;시,&amp;nbsp;빠르게&amp;nbsp;파악&amp;nbsp;및&amp;nbsp;해소하고&amp;nbsp;싶습니다.&amp;nbsp; &lt;br /&gt;답변&amp;nbsp;:&amp;nbsp;GV$SESSION.FINAL_BLOCKING_SESSION_STATUS='VALID'&amp;nbsp;시,&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GV$SESSION.FINAL_BLOCKING_INSTANCE 와 GV$SESSION.FINAL_BLOCKING_SESSION&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;통해서 빠르게 파악 해보자&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Hang Manager Trace 를 통한 파악 ( 지난 시간 이력 파악 시, 실시간이 파악은 SQL 을 통해서 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://darkturtle.tistory.com/76&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.11.19 - [Oracle/Oh Oracle ] - Hang Manager(HM)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/V-SESSION.html#GUID-28E2DC75-E157-4C0A-94AB-117C205789B9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/V-SESSION.html#GUID-28E2DC75-E157-4C0A-94AB-117C205789B9&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672472314408&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Database Reference&quot; data-og-description=&quot;V$SESSION displays session information for each current session.&quot; data-og-host=&quot;docs.oracle.com&quot; data-og-source-url=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/V-SESSION.html#GUID-28E2DC75-E157-4C0A-94AB-117C205789B9&quot; data-og-url=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/V-SESSION.html#GUID-28E2DC75-E157-4C0A-94AB-117C205789B9&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/V-SESSION.html#GUID-28E2DC75-E157-4C0A-94AB-117C205789B9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/V-SESSION.html#GUID-28E2DC75-E157-4C0A-94AB-117C205789B9&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Database Reference&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;V$SESSION displays session information for each current session.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.oracle.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1672472336863&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CASE 1 ) TX-LOCK 
: 다수 세션의 Update Lock 파익 및 해소 

CREATE TABLE CHECK_LOCK ( A1 NUMBER, A2 VARCHAR2(300)) ;

INSERT INTO CHECK_LOCK VALUES ( 1, 'A') ;

COMMIT ;

-- SESSION 1 &amp;lt;&amp;lt; 이 세션으로 인핸서 TX-LOCK 발생함 
UPDATE CHECK_LOCK SET A2='B'
WHERE A1= 1  ;

-- SESSION 2 
UPDATE CHECK_LOCK SET A2='C'
WHERE A1= 1  ;

-- SESSION 3
UPDATE CHECK_LOCK SET A2='D'
WHERE A1= 1  ;
        

SQL&amp;gt; set linesize 180
SQL&amp;gt; col inst for 9999
SQL&amp;gt; col inst for a12
SQL&amp;gt; col username for a12
SQL&amp;gt; col sid for 999999
SQL&amp;gt; col sid2 for a14
SQL&amp;gt; col status for a14
SQL&amp;gt; col state for a14
SQL&amp;gt; col FINAL_BLOCKER_INFO for a60


SQL&amp;gt; SELECT level,
       LPAD('         ', (level-1)*2, '        ') || NVL(s.username, '(oracle)') AS username,
       s.osuser,
       s.sid,
       s.serial#,
       s.status
       FROM   gv$session s
       WHERE  level &amp;gt; 1
       OR     EXISTS ( SELECT 1
                       FROM   gv$session
                       WHERE  BLOCKING_INSTANCE = S.INST_ID
                       AND    blocking_session = s.sid
                      ) CONNECT BY PRIOR s.sid = s.blocking_session AND S.INST_ID = S.BLOCKING_INSTANCE 
					  START WITH s.blocking_session IS NULL; 


    LEVEL USERNAME     OSUSER                   SID    SERIAL# STATUS
---------- ------------ -------------------- ------- ---------- --------------
         1 SCOTT        TGHOME                    37      36717 INACTIVE      &amp;lt;&amp;lt; FINAL LOCK HOLDER 
         2   SCOTT      TGHOME                    36      51665 ACTIVE        &amp;lt;&amp;lt; WAITER 
         2   SCOTT      TGHOME                   292      49124 ACTIVE        &amp;lt;&amp;lt; WAITER 


SQL&amp;gt; SELECT  s.inst_id as Inst
       ,substr(s.username,1,12 )      as  username
       ,to_char(s.sid)||','||to_char(s.serial# )  as  sid2
       ,status
       ,state
       ,s.sql_id
       ,S.EVENT
       ,last_call_et as lce
       , case when s.FINAL_BLOCKING_SESSION_STATUS ='VALID' THEN
          ( SELECT --'Final Blocker Info :'||SS.INST_ID||' : '||SS.SID||'.'||SS.SERIAL#||
            'ALTER SYSTEM KILL SESSION '''||SS.sid||','||SS.serial#||',@'||SS.INST_ID||''' IMMEDIATE;' AS KILL_IMMEIDATE
            FROM GV$SESSION SS
            WHERE SS.INST_ID = s.FINAL_BLOCKING_INSTANCE
            AND   SS.SID     = s.FINAL_BLOCKING_SESSION )
            END AS FINAL_BLOCKER_INFO
FROM    gv$session  s
       ,gv$process   p
WHERE  s.paddr   = p.addr
AND    s.inst_id = p.inst_id
AND    s.username in ('SCOTT' )
AND    s.event  not in ('queue messages','pipe get','jobq slave wait','Streams AQ: waiting for messages in the queue')
AND  s.username is not null
AND  type ='USER'
order by  lce desc ;

 INST USERNAME     SID2           STATUS         STATE          SQL_ID        EVENT                                 LCE FINAL_BLOCKER_INFO
----- ------------ -------------- -------------- -------------- ------------- ------------------------------ ---------- ------------------------------------------------------------
    1 SCOTT        37,36717       INACTIVE       WAITING                      SQL*Net message from client            53
    1 SCOTT        36,51665       ACTIVE         WAITING        7q04qvxh8vgw1 enq: TX - row lock contention          48 ALTER SYSTEM KILL SESSION '37,36717,@1' IMMEDIATE;           
       &amp;lt;&amp;lt; FINAL LOCK HOLDER
    1 SCOTT        292,49124      ACTIVE         WAITING        18n6djbras9y3 enq: TX - row lock contention          43 ALTER SYSTEM KILL SESSION '37,36717,@1' IMMEDIATE;           
       &amp;lt;&amp;lt; FINAL LOCK HOLDER
    1 SCOTT        237,59754      ACTIVE         WAITED SHORT T 8qqsv498fyfs2 PGA memory operation                    0
                                                 IME


SQL&amp;gt;


SQL&amp;gt; ALTER SYSTEM KILL SESSION '37,36717,@1' IMMEDIATE;

System altered.



SQL&amp;gt; SELECT level,
       LPAD('         ', (level-1)*2, '        ') || NVL(s.username, '(oracle)') AS username,
       s.osuser,
       s.sid,
       s.serial#,
       s.status
       FROM   gv$session s
       WHERE  level &amp;gt; 1
       OR     EXISTS ( SELECT 1
                       FROM   gv$session
                       WHERE  BLOCKING_INSTANCE = S.INST_ID
                       AND    blocking_session = s.sid
                      ) CONNECT BY PRIOR s.sid = s.blocking_session AND S.INST_ID = S.BLOCKING_INSTANCE 
					  START WITH s.blocking_session IS NULL; 


---------- ------------ -------------------- ------- ---------- --------------
         1 SCOTT        TGHOME                    36      51665 INACTIVE       &amp;lt;&amp;lt; FINAL LOCK HOLDER 
         2   SCOTT      TGHOME                   292      49124 ACTIVE



SQL&amp;gt; SELECT  s.inst_id as Inst
       ,substr(s.username,1,12 )      as  username
       ,to_char(s.sid)||','||to_char(s.serial# )  as  sid2
       ,status
       ,state
       ,s.sql_id
       ,S.EVENT
       ,last_call_et as lce
       , case when s.FINAL_BLOCKING_SESSION_STATUS ='VALID' THEN
          ( SELECT --'Final Blocker Info :'||SS.INST_ID||' : '||SS.SID||'.'||SS.SERIAL#||
            'ALTER SYSTEM KILL SESSION '''||SS.sid||','||SS.serial#||',@'||SS.INST_ID||''' IMMEDIATE;' AS KILL_IMMEIDATE
            FROM GV$SESSION SS
            WHERE SS.INST_ID = s.FINAL_BLOCKING_INSTANCE
            AND   SS.SID     = s.FINAL_BLOCKING_SESSION )
            END AS FINAL_BLOCKER_INFO
FROM    gv$session  s
       ,gv$process   p
WHERE  s.paddr   = p.addr
AND    s.inst_id = p.inst_id
AND    s.username in ('SCOTT' )
AND    s.event  not in ('queue messages','pipe get','jobq slave wait','Streams AQ: waiting for messages in the queue')
AND  s.username is not null
AND  type ='USER'
order by  lce desc ;

 INST USERNAME     SID2           STATUS         STATE          SQL_ID        EVENT                                 LCE FINAL_BLOCKER_INFO
----- ------------ -------------- -------------- -------------- ------------- ------------------------------ ---------- ------------------------------------------------------------
    1 SCOTT        292,49124      ACTIVE         WAITING        18n6djbras9y3 enq: TX - row lock contention         150 ALTER SYSTEM KILL SESSION '36,51665,@1' IMMEDIATE;
    1 SCOTT        36,51665       INACTIVE       WAITING                      SQL*Net message from client            68
    1 SCOTT        237,59754      ACTIVE         WAITED SHORT T fdjqwvxhp9x26 PGA memory operation                    0
                                                 IME


SQL&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672494163251&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hang Manager Trace 를 통해서 파악 해보기 

vi `ls -lrt *dia*base*.trc | tail -n 1 | awk '{print $9}'`
: Tree 구조에서 반대로 기술, 즉 Leaf -&amp;gt; Branch -&amp;gt; Root ( Final Blocker ) 순으로 기술됨 
CASE 1 ) TX-LOCK 

*** 2022-12-31T16:24:12.221561+09:00
HM: Hung Sessions (local detect) - output local chains
===============================================================================
Non-intersecting chains:

-------------------------------------------------------------------------------
Chain 1:
-------------------------------------------------------------------------------
    Oracle session identified by:
    {
                instance: 1 (oracle19.oracle19)
                   os id: 9135
              process id: 50, oracle@oel7
              session id: 36
        session serial #: 49742
             module name: 0 (Orange for ORACLE DBA)
    }
    is waiting for 'enq: TX - row lock contention' with wait info:
    {
                      p1: 'name|mode'=0x54580006
                      p2: 'usn&amp;lt;&amp;lt;16 | slot'=0x80014
                      p3: 'sequence'=0x2230
            time in wait: 1 min 36 sec
           timeout after: never
                 wait id: 64
                blocking: 0 sessions
          current sql_id: 2063636191
            wait history:
              * time between current wait and wait #1: 0.002302 sec
              1.       event: 'SQL*Net message from client'
                 time waited: 0.713088 sec
                     wait id: 63               p1: 'driver id'=0x54435000
                                               p2: '#bytes'=0x1
              * time between wait #1 and #2: 0.000008 sec
              2.       event: 'SQL*Net message to client'
                 time waited: 0.000001 sec
                     wait id: 62               p1: 'driver id'=0x54435000
                                               p2: '#bytes'=0x1
              * time between wait #2 and #3: 0.000001 sec
              3.       event: 'SQL*Net break/reset to client'
                 time waited: 0.000178 sec
                     wait id: 61               p1: 'driver id'=0x54435000
                                               p2: 'break?'=0x0
    }
    and is blocked by
 =&amp;gt; Oracle session identified by:
    {
                instance: 1 (oracle19.oracle19)
                   os id: 9125
              process id: 48, oracle@oel7
              session id: 37
        session serial #: 38779
             module name: 0 (Orange for ORACLE DBA)
    }
    which is waiting for 'SQL*Net message from client' with wait info:
    {
                      p1: 'driver id'=0x54435000
                      p2: '#bytes'=0x1
            time in wait: 1 min 26 sec
           timeout after: never
                 wait id: 170
                blocking: 1 session
          current sql_id: 1208101921
            wait history:
              * time between current wait and wait #1: 0.000003 sec
              1.       event: 'SQL*Net message to client'
                 time waited: 0.000001 sec
                     wait id: 169              p1: 'driver id'=0x54435000
                                               p2: '#bytes'=0x1
              * time between wait #1 and #2: 0.000020 sec
              2.       event: 'SQL*Net message from client'
                 time waited: 0.000773 sec
                     wait id: 168              p1: 'driver id'=0x54435000
                                               p2: '#bytes'=0x1
              * time between wait #2 and #3: 0.000260 sec
              3.       event: 'SQL*Net message to client'
                 time waited: 0.000002 sec
                     wait id: 167              p1: 'driver id'=0x54435000
                                               p2: '#bytes'=0x1
    }

Chain 1 Signature: 'SQL*Net message from client'&amp;lt;='enq: TX - row lock contention'
Chain 1 Signature Hash: 0x38c48850
-------------------------------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672472354371&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	
CASE 2 ) Libary Cache Pin (컴파일 시) / lock ( 프로시져 수행 시)
: 프로시져 장시간 수행 -&amp;gt; 컴파일 수행 대기 -&amp;gt; 프로시져 수행 대기 파악 및 해소 

--1. 프로시져 생성 
create or replace procedure sp_lock_test1
is
begin 
-- run by sys
-- grant execute on dbms_lock to scott; 
null ;
dbms_lock.sleep(180);
end ;

--2. 세션1 , 프로시셔 수행 
exec sp_lock_test1

--3. 세션2. 프로시져 컴파일 
create or replace procedure sp_lock_test1
is
begin 
-- run by sys
-- grant execute on dbms_lock to scott; 
null ;
-- dbms_lock.sleep(180);
dbms_lock.sleep(1800);
end ;

--4. 세션 3, 프로시져 수행 
exec sp_lock_test1


--5. 결과 모니터링 및 조치 
SQL&amp;gt; SELECT level,
       LPAD('         ', (level-1)*2, '        ') || NVL(s.username, '(oracle)') AS username,
       s.osuser,
       s.sid,
       s.serial#,
       s.status
       FROM   gv$session s
       WHERE  level &amp;gt; 1
       OR     EXISTS ( SELECT 1
                       FROM   gv$session
                       WHERE  BLOCKING_INSTANCE = S.INST_ID
                       AND    blocking_session = s.sid
                      ) CONNECT BY PRIOR s.sid = s.blocking_session AND S.INST_ID = S.BLOCKING_INSTANCE 
					  START WITH s.blocking_session IS NULL; 
     LEVEL USERNAME     OSUSER                   SID    SERIAL# STATUS
---------- ------------ -------------------- ------- ---------- --------------
         1 SCOTT        TGHOME                    20      22760 ACTIVE   &amp;lt;&amp;lt;&amp;lt; 프로시져 수행 중 세션 
         2   SCOTT      TGHOME                   292      49124 ACTIVE   &amp;lt;&amp;lt;&amp;lt; 프로시져 컴파일 세션 
         3     SCOTT    TGHOME                    36      51665 ACTIVE   &amp;lt;&amp;lt;&amp;lt; 프로시져 수행 시도 세션 ( 컴파일 시도 이후 )


SQL&amp;gt; SELECT  s.inst_id as Inst
       ,substr(s.username,1,12 )      as  username
       ,to_char(s.sid)||','||to_char(s.serial# )  as  sid2
       ,status
       ,state
       ,s.sql_id
       ,S.EVENT
       ,last_call_et as lce
       , case when s.FINAL_BLOCKING_SESSION_STATUS ='VALID' THEN
          ( SELECT --'Final Blocker Info :'||SS.INST_ID||' : '||SS.SID||'.'||SS.SERIAL#||
            'ALTER SYSTEM KILL SESSION '''||SS.sid||','||SS.serial#||',@'||SS.INST_ID||''' IMMEDIATE;' AS KILL_IMMEIDATE
            FROM GV$SESSION SS
            WHERE SS.INST_ID = s.FINAL_BLOCKING_INSTANCE
            AND   SS.SID     = s.FINAL_BLOCKING_SESSION )
            END AS FINAL_BLOCKER_INFO
FROM    gv$session  s
       ,gv$process   p
WHERE  s.paddr   = p.addr
AND    s.inst_id = p.inst_id
AND    s.username in ('SCOTT' )
AND    s.event  not in ('queue messages','pipe get','jobq slave wait','Streams AQ: waiting for messages in the queue')
AND  s.username is not null
AND  type ='USER'
order by  lce desc ;

 INST USERNAME     SID2           STATUS         STATE          SQL_ID        EVENT                                 LCE FINAL_BLOCKER_INFO
----- ------------ -------------- -------------- -------------- ------------- ------------------------------ ---------- ------------------------------------------------------------
    1 SCOTT        20,22760       ACTIVE         WAITING        4059sqacczqbs PL/SQL lock timer                      96                                                             
       &amp;lt;&amp;lt;&amp;lt; 프로시져 수행 중 세션 
    1 SCOTT        292,49124      ACTIVE         WAITING        0aumrmvtht58v library cache pin                      85 ALTER SYSTEM KILL SESSION '20,22760,@1' IMMEDIATE;         
       &amp;lt;&amp;lt;&amp;lt; 프로시져 컴파일 세션   
    1 SCOTT        36,51665       ACTIVE         WAITING        4059sqacczqbs library cache lock                     78 ALTER SYSTEM KILL SESSION '20,22760,@1' IMMEDIATE;          
       &amp;lt;&amp;lt;&amp;lt; 프로시져 수행 시도 세션 ( 컴파일 시도 이후 ) 
    1 SCOTT        237,59754      ACTIVE         WAITED SHORT T 1r1aaq2dfnj91 SQL*Net message to client               0
                                                 IME
SQL&amp;gt;  ALTER SYSTEM KILL SESSION '20,22760,@1' IMMEDIATE;

System altered.

-- 
-- &amp;lt;&amp;lt;&amp;lt; 프로시져 수행 중 세션  &amp;lt;&amp;lt;&amp;lt; 세션 kill 조치 됨 
-- &amp;lt;&amp;lt;&amp;lt; 프로시져 컴파일 세션   &amp;lt;&amp;lt;&amp;lt; 바로 컴파일 됨 
-- &amp;lt;&amp;lt;&amp;lt; 프로시져 수행 시도 세션 ( 컴파일 시도 이후 ) &amp;lt;&amp;lt;&amp;lt; 컴파일 후, 바로 수행 진행 

SQL&amp;gt; SELECT level,
       LPAD('         ', (level-1)*2, '        ') || NVL(s.username, '(oracle)') AS username,
       s.osuser,
       s.sid,
       s.serial#,
       s.status
       FROM   gv$session s
       WHERE  level &amp;gt; 1
       OR     EXISTS ( SELECT 1
                       FROM   gv$session
                       WHERE  BLOCKING_INSTANCE = S.INST_ID
                       AND    blocking_session = s.sid
                      ) CONNECT BY PRIOR s.sid = s.blocking_session AND S.INST_ID = S.BLOCKING_INSTANCE 
					  START WITH s.blocking_session IS NULL; 

no rows selected

SQL&amp;gt; SELECT  s.inst_id as Inst
       ,substr(s.username,1,12 )      as  username
       ,to_char(s.sid)||','||to_char(s.serial# )  as  sid2
       ,status
       ,state
       ,s.sql_id
       ,S.EVENT
       ,last_call_et as lce
       , case when s.FINAL_BLOCKING_SESSION_STATUS ='VALID' THEN
          ( SELECT --'Final Blocker Info :'||SS.INST_ID||' : '||SS.SID||'.'||SS.SERIAL#||
            'ALTER SYSTEM KILL SESSION '''||SS.sid||','||SS.serial#||',@'||SS.INST_ID||''' IMMEDIATE;' AS KILL_IMMEIDATE
            FROM GV$SESSION SS
            WHERE SS.INST_ID = s.FINAL_BLOCKING_INSTANCE
            AND   SS.SID     = s.FINAL_BLOCKING_SESSION )
            END AS FINAL_BLOCKER_INFO
FROM    gv$session  s
       ,gv$process   p
WHERE  s.paddr   = p.addr
AND    s.inst_id = p.inst_id
AND    s.username in ('SCOTT' )
AND    s.event  not in ('queue messages','pipe get','jobq slave wait','Streams AQ: waiting for messages in the queue')
AND  s.username is not null
AND  type ='USER'
order by  lce desc ;

 INST USERNAME     SID2           STATUS         STATE          SQL_ID        EVENT                                 LCE FINAL_BLOCKER_INFO
----- ------------ -------------- -------------- -------------- ------------- ------------------------------ ---------- ------------------------------------------------------------
    1 SCOTT        36,51665       ACTIVE         WAITING        4059sqacczqbs PL/SQL lock timer                     120
    1 SCOTT        292,49124      INACTIVE       WAITING                      SQL*Net message from client            35
    1 SCOTT        237,59754      ACTIVE         WAITED SHORT T 1r1aaq2dfnj91 SQL*Net message to client               0



SQL&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672494192728&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hang Manager Trace 를 통해서 파악 해보기 

vi `ls -lrt *dia*base*.trc | tail -n 1 | awk '{print $9}'`

CASE 2 ) Libary Cache Pin
: Tree 구조에서 반대로 기술, 즉 Leaf -&amp;gt; Branch -&amp;gt; Root ( Final Blocker ) 순으로 기술됨 

*** 2022-12-31T16:32:13.822659+09:00
HM: Hung Sessions (local detect) - output local chains
===============================================================================
Non-intersecting chains:

-------------------------------------------------------------------------------
Chain 1:
-------------------------------------------------------------------------------
    Oracle session identified by:
    {
                instance: 1 (oracle19.oracle19)
                   os id: 9252
              process id: 50, oracle@oel7
              session id: 36
        session serial #: 51665
             module name: 0 (Orange for ORACLE DBA)
    }
    is waiting for 'library cache lock' with wait info:
    {
                      p1: 'handle address'=0x617ddb60
                      p2: 'lock address'=0x618be040
                      p3: '100*mode+namespace'=0x67f000010002
                    Name: SCOTT.SP_LOCK_TEST1   [Nsp: 1 Typ: 7 Id: 26608]
            time in wait: 1 min 20 sec
           timeout after: 13 min 39 sec
                 wait id: 69
                blocking: 0 sessions
          current sql_id: 1075132594
            wait history:
              * time between current wait and wait #1: 0.000196 sec
              1.       event: 'SQL*Net message from client'
                 time waited: 3 min 18 sec
                     wait id: 68               p1: 'driver id'=0x54435000
                                               p2: '#bytes'=0x1
              * time between wait #1 and #2: 0.000001 sec
              2.       event: 'SQL*Net message to client'
                 time waited: 0.000000 sec
                     wait id: 67               p1: 'driver id'=0x54435000
                                               p2: '#bytes'=0x1
              * time between wait #2 and #3: 0.000053 sec
              3.       event: 'log file sync'
                 time waited: 0.000630 sec
                     wait id: 66               p1: 'buffer#'=0x141
                                               p2: 'sync scn'=0x8b49cb
    }
    and is blocked by
 =&amp;gt; Oracle session identified by:
    {
                instance: 1 (oracle19.oracle19)
                   os id: 9259
              process id: 51, oracle@oel7
              session id: 292
        session serial #: 49124
             module name: 0 (Orange for ORACLE DBA)
    }
    which is waiting for 'library cache pin' with wait info:
    {
                      p1: 'handle address'=0x617ddb60
                      p2: 'pin address'=0x6a2f11f8
                      p3: '100*mode+namespace'=0x67f000010003
                    Name: SCOTT.SP_LOCK_TEST1   [Nsp: 1 Typ: 7 Id: 26608]
            time in wait: 1 min 28 sec
           timeout after: 13 min 31 sec
                 wait id: 410
                blocking: 1 session
          current sql_id: 90863518
            wait history:
              * time between current wait and wait #1: 0.000799 sec
              1.       event: 'SQL*Net message from client'
                 time waited: 1.392477 sec
                     wait id: 409              p1: 'driver id'=0x54435000
                                               p2: '#bytes'=0x1
              * time between wait #1 and #2: 0.000003 sec
              2.       event: 'SQL*Net message to client'
                 time waited: 0.000001 sec
                     wait id: 408              p1: 'driver id'=0x54435000
                                               p2: '#bytes'=0x1
              * time between wait #2 and #3: 0.000015 sec
              3.       event: 'SQL*Net message from client'
                 time waited: 0.000797 sec
                     wait id: 407              p1: 'driver id'=0x54435000
                                               p2: '#bytes'=0x1
    }
    and is blocked by
 =&amp;gt; Oracle session identified by:
    {
                instance: 1 (oracle19.oracle19)
                   os id: 9671
              process id: 52, oracle@oel7
              session id: 20
        session serial #: 22760
             module name: 0 (Orange for ORACLE DBA)
    }
    which is waiting for 'PL/SQL lock timer' with wait info:
    {
                      p1: 'duration'=0x0
            time in wait: 1 min 38 sec
           timeout after: 1 min 21 sec
                 wait id: 70
                blocking: 2 sessions
          current sql_id: 1075132594
            wait history:
              * time between current wait and wait #1: 0.002701 sec
              1.       event: 'SQL*Net message from client'
                 time waited: 1.267175 sec
                     wait id: 69               p1: 'driver id'=0x54435000
                                               p2: '#bytes'=0x1
              * time between wait #1 and #2: 0.000009 sec
              2.       event: 'SQL*Net message to client'
                 time waited: 0.000001 sec
                     wait id: 68               p1: 'driver id'=0x54435000
                                               p2: '#bytes'=0x1
              * time between wait #2 and #3: 0.000002 sec
              3.       event: 'SQL*Net break/reset to client'
                 time waited: 0.000195 sec
                     wait id: 67               p1: 'driver id'=0x54435000
                                               p2: 'break?'=0x0
    }

Chain 1 Signature: 'PL/SQL lock timer'&amp;lt;='library cache pin'&amp;lt;='library cache lock'
Chain 1 Signature Hash: 0x38f0a7dd
-------------------------------------------------------------------------------

===============================================================================&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>cache</category>
      <category>Compile</category>
      <category>library</category>
      <category>lock</category>
      <category>oracle</category>
      <category>PIN</category>
      <category>procedure</category>
      <category>SP</category>
      <category>Tree</category>
      <category>Tx</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/101</guid>
      <comments>https://darkturtle.tistory.com/101#entry101comment</comments>
      <pubDate>Sat, 31 Dec 2022 16:40:50 +0900</pubDate>
    </item>
    <item>
      <title>Oracle, Rename Sequence</title>
      <link>https://darkturtle.tistory.com/99</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;Oracle,&amp;nbsp;Rename&amp;nbsp;Sequence&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;업무&amp;nbsp;요건&amp;nbsp;:&amp;nbsp;시퀀스&amp;nbsp;RENAME&amp;nbsp;되나요&amp;nbsp;?&amp;nbsp;채번은요&amp;nbsp;?&lt;br /&gt;결론 : 시퀀스 Rename 지원 되구요, RENAME 시점에 CACHE 만큼 SEQUENCE 값이 증가 합니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EX)&amp;nbsp; 현재 LAST_NUMBER 가 100021 이고, CACHE 20 이면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; , RENAME 시점에 LAST_NUMBER 가 100041 로 변경됨&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;i&gt;&lt;b&gt;RENAME&amp;nbsp;:&amp;nbsp;Use&amp;nbsp;the&amp;nbsp;RENAME&amp;nbsp;statement&amp;nbsp;to&amp;nbsp;rename&amp;nbsp;a&amp;nbsp;table,&amp;nbsp;view,&amp;nbsp;sequence,&amp;nbsp;or&amp;nbsp;private&amp;nbsp;synonym.&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/RENAME.html#GUID-573347CE-3EB8-42E5-B4D5-EF71CA06FAFC&quot;&gt;https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/RENAME.html#GUID-573347CE-3EB8-42E5-B4D5-EF71CA06FAFC&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://darkturtle.tistory.com/entry/Oracle-Sequence-초기화-alter-sequence-시퀀스명-restart&quot;&gt;2022.04.15 - [Oracle/Oh Oracle ] - Oracle Sequence 초기화 : alter sequence 시퀀스명 restart&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671801845950&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 테스트 시퀀스 생성 : TG_SEQ_OLD
SQL&amp;gt; CREATE SEQUENCE TG_SEQ_OLD
     START WITH 100001
     INCREMENT BY 1
     MINVALUE 1
     MAXVALUE 999999
     CACHE 20
     ORDER;  
Sequence created.

-- 테스트 테이블 : 시퀀스 사용해서 INSERT 
SQL&amp;gt; CREATE TABLE CHECK_SEQ_TABLE ( A1 NUMBER, A2 NUMBER, A3 DATE );
Table created.

SQL&amp;gt; set linesize 180
SQL&amp;gt; COL MIN_VALUE FOR 9999999
SQL&amp;gt; COL INCREMENT_BY FOR 9999999
SQL&amp;gt; COL CACHE_SIZE FOR 9999999
SQL&amp;gt; COL LAST_NUMBER FOR 9999999
SQL&amp;gt; COL SEQUENCE_NAME for a14
SQL&amp;gt; SELECT SEQUENCE_NAME, MIN_VALUE, INCREMENT_BY,CACHE_SIZE, LAST_NUMBER
     FROM DBA_SEQUENCES WHERE SEQUENCE_NAME ='TG_SEQ_OLD'; 

SEQUENCE_NAME  MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER
-------------- --------- ------------ ---------- -----------
TG_SEQ_OLD             1            1         20      100001


SQL&amp;gt; DECLARE
     NUM NUMBER := 1 ;
     BEGIN
     WHILE ( NUM &amp;lt; 11 )
     LOOP
     INSERT INTO CHECK_SEQ_TABLE VALUES  ( NUM, TG_SEQ_OLD.NEXTVAL, SYSDATE )  ;
     NUM := NUM+1 ;
     END LOOP ;
     COMMIT ;
     END ;
     /
PL/SQL procedure successfully completed.

SQL&amp;gt; SELECT MIN(A1), MAX(A1), MIN(A2), MAX(A2) FROM CHECK_SEQ_TABLE ;

   MIN(A1)    MAX(A1)    MIN(A2)    MAX(A2)
---------- ---------- ---------- ----------
         1         10     100001     100010  
-- 10개 채번 및 INSERT 완료 

SQL&amp;gt; SELECT  TG_SEQ_OLD.NEXTVAL FROM DUAL ;

   NEXTVAL
----------
    100011   
--- 현재 채번 100011, 아직 9개의 채번이 남은 상태로 확인 

SQL&amp;gt; SELECT SEQUENCE_NAME, MIN_VALUE, INCREMENT_BY,CACHE_SIZE, LAST_NUMBER
     FROM DBA_SEQUENCES WHERE SEQUENCE_NAME ='TG_SEQ_OLD';  

SEQUENCE_NAME  MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER
-------------- --------- ------------ ---------- -----------
TG_SEQ_OLD             1            1         20      100021

SQL&amp;gt; RENAME TG_SEQ_OLD TO TG_SEQ_NEW ;

Table renamed.   
-- Table renamed 이지만, 실제로는 시퀀스 rename 이다. !!

SQL&amp;gt; SELECT  TG_SEQ_NEW.NEXTVAL FROM DUAL ;

   NEXTVAL
----------
    100021   
--- 채번 100011 에서  100021 점프됨 
--- // (추정) RENAME 은 DDL 로, RENAME 시점에 CACHE SIZE 만큼 업데이트 될것으로 보임 

SQL&amp;gt; SELECT SEQUENCE_NAME, MIN_VALUE, INCREMENT_BY,CACHE_SIZE, LAST_NUMBER
     FROM DBA_SEQUENCES WHERE SEQUENCE_NAME ='TG_SEQ_NEW'    ;

SEQUENCE_NAME  MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER
-------------- --------- ------------ ---------- -----------
TG_SEQ_NEW             1            1         20      100041  
-- 역시나 LAST_NUMBER 가 100021 &amp;gt;&amp;gt; 100041 변경&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>cache</category>
      <category>last_number</category>
      <category>oracle</category>
      <category>rename</category>
      <category>sequence</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/99</guid>
      <comments>https://darkturtle.tistory.com/99#entry99comment</comments>
      <pubDate>Fri, 23 Dec 2022 22:25:24 +0900</pubDate>
    </item>
    <item>
      <title>APPEND VS CTAS ( DB FORCE_LOGGING=NO) VS CTAS ( DB FORCE_LOGGING=YES)</title>
      <link>https://darkturtle.tistory.com/97</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;APPEND&amp;nbsp;VS&amp;nbsp;CTAS&amp;nbsp;(&amp;nbsp;DB&amp;nbsp;FORCE_LOGGING=NO)&amp;nbsp;VS&amp;nbsp;CTAS&amp;nbsp;(&amp;nbsp;DB&amp;nbsp;FORCE_LOGGING=YES)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결론,&amp;nbsp;REDO&amp;nbsp;발생&amp;nbsp;량은&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CTAS NOLOGGING DB &amp;lt; APPEND &amp;lt; CATS LOGING FR0CE DB&amp;nbsp;&amp;nbsp;순이다. &lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CTAS LOGGING FORCE DB 상태에서는 REDO 가 무지 많이 발생한다.&amp;nbsp;&amp;nbsp;( 하단 표 참조 )&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://darkturtle.tistory.com/entry/Append-와-Index-Normal-Unique-PK-관계&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.12.13 - [Oracle/Oh Oracle ] - Append 와 Index( Normal, Unique, PK ) 관계&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 68px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 36.8605%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 21.1628%; height: 17px;&quot;&gt;Undo used_ublk&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.9767%; height: 17px;&quot;&gt;Undo use_rec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;Redo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 36.8605%; height: 17px;&quot;&gt;APPEND&amp;nbsp;TEST&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 21.1628%; height: 17px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 16.9767%; height: 17px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: right;&quot;&gt;415,692&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 36.8605%; height: 17px;&quot;&gt;CTAS&amp;nbsp;TEST&amp;nbsp;WITH&amp;nbsp;FORCE_LOGGING=NO&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 21.1628%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 16.9767%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: right;&quot;&gt;&amp;nbsp;311,720&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 36.8605%; height: 17px;&quot;&gt;CTAS&amp;nbsp;TEST&amp;nbsp;WITH&amp;nbsp;FORCE_LOGGING=YES&lt;/td&gt;
&lt;td style=&quot;width: 21.1628%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 16.9767%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: right;&quot;&gt;112,487,632&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** CTAS 는 DDL 로 자동 COMMIT 으로 UNDO 측정 불가&amp;nbsp; &lt;br /&gt;**&amp;nbsp;참고&amp;nbsp;링크&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.orafaq.com/wiki/CTAS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.orafaq.com/wiki/CTAS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671708002399&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 테스트 스크립트 
-- 샘플 테이블 생성 
DROP TABLE  SOURCE_TABLE  ;
-- CREATE TABLE SOURCE_TABLE 
AS SELECT B.NUM, A.*
FROM  DBA_OBJECTS A, 
     ( SELECT (COLUMN_VALUE).GETNUMBERVAL() AS NUM FROM XMLTABLE('1 to 30')  )  B  ;

SELECT COUNT(*) FROM SOURCE_TABLE ;
-- 730,950

CREATE TABLE TARGET_TABLE  AS SELECT * FROM SOURCE_TABLE WHERE 1=2;

-- PK 를 위한 데이타 보정
UPDATE SOURCE_TABLE
SET    SUBOBJECT_NAME ='NO PARITION' -- NVL(SUBOBJECT_NAME,'NO PARTITION')
WHERE SUBOBJECT_NAME IS NULL  ;

COMMIT ;

UPDATE SOURCE_TABLE
SET    OBJECT_ID = 9999 --'NO OBJECT_ID' -- NVL(SUBOBJECT_NAME,'NO PARTITION')
WHERE OBJECT_ID IS NULL  ;

COMMIT ;

-- 1. APPEND TEST                     
DROP TABLE TARGET_TABLE PURGE ;
CREATE TABLE TARGET_TABLE  AS SELECT * FROM SOURCE_TABLE WHERE 1=2;
INSERT /*+ APPEND */ INTO  TARGET_TABLE  SELECT * FROM SOURCE_TABLE ;

-- DROP TABLE TARGET_TABLE PURGE ; -- CASE 1 테스트 및 REDO 측정 후, DROP 

-- 2. CTAS TEST WITH FORCE_LOGGING=NO 
CREATE TABLE TARGET_TABLE NOLOGGING  AS SELECT * FROM SOURCE_TABLE WHERE 1=1;

-- DROP TABLE TARGET_TABLE PURGE ; -- CASE 1 테스트 및 REDO 측정 후, DROP 

-- 3. CTAS TEST WITH FORCE_LOGGING=YES
CREATE TABLE TARGET_TABLE NOLOGGING  AS SELECT * FROM SOURCE_TABLE WHERE 1=1;

-- UNDO 및 REDO 측정 하기 
-- Check Undo 
SELECT s.inst_id, s.sid, s.serial#, s.status, t.used_ublk, t.used_urec 
FROM gv$session s, gv$transaction t, gv$process p
WHERE s.taddr = t.addr
and s.inst_id = t.inst_id
and s.paddr= p.addr
and s.INST_ID =p.INST_ID
and s.sid  = :v_sid
ORDER BY t.used_ublk desc, t.used_urec desC ;

-- Check Redo 
select  ss.sid, 'redo size:'||ss.value,    s.program,    s.module
from  v$statname     sn,v$sesstat     ss,v$session s
where ss.statistic#=sn.statistic# 
and   sn.name='redo size' 
and   s.sid=ss.sid 
and   s.sid = :v_sid 
and   ss.value&amp;gt;0
order by  ss.value;

-- FORCE LOGING 설정 

SQL&amp;gt;  alter database force logging;

Database altered.

SQL&amp;gt; exit

2022-12-22T20:05:49.899849+09:00
 alter database force logging
2022-12-22T20:05:49.901810+09:00
ALTER DATABASE FORCE LOGGING command is waiting for existing direct writes to finish. 
This may take a long time.
Completed:  alter database force logging&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>Append</category>
      <category>ctas</category>
      <category>FORCE</category>
      <category>Logging</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/97</guid>
      <comments>https://darkturtle.tistory.com/97#entry97comment</comments>
      <pubDate>Thu, 22 Dec 2022 20:20:51 +0900</pubDate>
    </item>
    <item>
      <title>PL/SQL 상세 에러 저장 하기</title>
      <link>https://darkturtle.tistory.com/96</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;문의&lt;/b&gt;&amp;nbsp;:&amp;nbsp;PL/SQL&amp;nbsp;에러&amp;nbsp;출력시,&amp;nbsp;DEPTH&amp;nbsp;있는&amp;nbsp;에러&amp;nbsp;코드를&amp;nbsp;찍고&amp;nbsp;싶다. &lt;br /&gt;&amp;nbsp; &amp;nbsp; 일반 ) SQLERRM 를 통해서 에러 로그 출력 혹은 저장&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; 상세 ) DBMS_UTILITY.FORMAT_ERROR_BACKTRACE 를 통해서 에러 상세 로그 출력 혹은 저장&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; 비고 ) 아래 출처와 조금 다르게, log_prc 라고 상세 로그 저장을 위한 별도 PROCEDURE 를 생성함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 출처 :&amp;nbsp;&lt;a href=&quot;https://hrjeong.tistory.com/48&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://hrjeong.tistory.com/48&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671624696255&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 에러관리를 위한 LOG_PRC 생성 
-- 우선 일반적인 SQLERRM 만 저장하도록 컴파일 
CREATE OR REPLACE PROCEDURE LOG_PRC
IS
V_ERROR VARCHAR2(1000); 
PRAGMA AUTONOMOUS_TRANSACTION ; -- 호출 PKGE 와 별도 TRNASACTION 으로 관리
BEGIN
        
V_ERROR := '1: LOG_PRC ZONE !!!';
V_ERROR := V_ERROR||CHR(10)||' 2:'||SQLERRM;
--V_ERROR := V_ERROR||CHR(10)||' 3:'||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;

INSERT INTO CHK_PL_LOG  ( CHK_DT , CHK_LOG ) VALUES ( SYSDATE, V_ERROR ) ;

COMMIT ; 
END LOG_PRC;

-- PKG2 선언부 
CREATE OR REPLACE PACKAGE PKG2
IS
    PROCEDURE P3 (i_p1 IN VARCHAR2);
END PKG2;


CREATE OR REPLACE PACKAGE BODY PKG2
IS
    -- F1
    FUNCTION F1 (i_p1 IN VARCHAR2)
        RETURN NUMBER
    IS
    BEGIN
        RETURN TO_NUMBER (i_p1);
    END F1;
 
    -- P1
    PROCEDURE P1 (i_p1 IN VARCHAR2)
    IS
        l_v1    NUMBER;
    BEGIN
        l_v1 := F1 (i_p1);
        DBMS_OUTPUT.PUT_LINE (l_v1);
    END P1;
 
 
    -- P3
    PROCEDURE P3 (i_p1 IN VARCHAR2)
    IS
    BEGIN
        P1 (i_p1);
    EXCEPTION
        WHEN OTHERS THEN
          DBMS_OUTPUT.PUT_LINE ($$PLSQL_UNIT || ': ' || $$PLSQL_LINE);
          LOG_PRC ;   -- 에러관리를 위한 LOG_PRC 호출 
    END P3;
END PKG2;


SQL&amp;gt; set serveroutput on
SQL&amp;gt; set linesize 180
SQL&amp;gt; col CHK_LOG for a120
SQL&amp;gt; TRUNCATE table CHK_PL_LOG ;

Table truncated.

SQL&amp;gt; EXEC pkg2.p3 ('X');
PKG2: 28

PL/SQL procedure successfully completed.

-- SQLERRM 사용 시, 기본 에러만 확인 됨 
SQL&amp;gt; SELECT * FROM CHK_PL_LOG ;

CHK_DT    CHK_LOG
--------- ------------------------------------------------------------------------------------------------------------------------
21-DEC-22 1: LOG_PRC ZONE !!!
           2:ORA-06502: PL/SQL: numeric or value error: character to number conversion error


SQL&amp;gt;



-- 에러관리를 위한 LOG_PRC 생성 
-- 우선 상세 에러 관리를 위해 DBMS_UTILITY.FORMAT_ERROR_BACKTRACE 사용하는 것으로 재컴파일
CREATE OR REPLACE PROCEDURE LOG_PRC
IS
V_ERROR VARCHAR2(1000); 
PRAGMA AUTONOMOUS_TRANSACTION ; -- 호출 PKGE 와 별도 TRNASACTION 으로 관리
BEGIN
        
V_ERROR := '1: LOG_PRC ZONE !!!';
--V_ERROR := V_ERROR||CHR(10)||' 2:'||SQLERRM;
V_ERROR := V_ERROR||CHR(10)||' 3:'||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;

INSERT INTO CHK_PL_LOG  ( CHK_DT , CHK_LOG ) VALUES ( SYSDATE, V_ERROR ) ;

COMMIT ; 
END LOG_PRC;

SQL&amp;gt; TRUNCATE table CHK_PL_LOG ;

Table truncated.

SQL&amp;gt;  EXEC pkg2.p3 ('X');
PKG2: 28

PL/SQL procedure successfully completed.

-- DBMS_UTILITY.FORMAT_ERROR_BACKTRACE 사용 시, 상세 에러 확인 가능 
SQL&amp;gt; SELECT * FROM CHK_PL_LOG ;

CHK_DT    CHK_LOG
--------- ------------------------------------------------------------------------------------------------------------------------
21-DEC-22 1: LOG_PRC ZONE !!!
           3:ORA-06512: at &quot;SCOTT.PKG2&quot;, line 8
          ORA-06512: at &quot;SCOTT.PKG2&quot;, line 16
          ORA-06512: at &quot;SCOTT.PKG2&quot;, line 25


SQL&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>autonomous_transaction</category>
      <category>DBMS_UTILITY.FORMAT_ERROR_BACKTRACE</category>
      <category>error</category>
      <category>Exception</category>
      <category>oracle</category>
      <category>PL/SQL</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/96</guid>
      <comments>https://darkturtle.tistory.com/96#entry96comment</comments>
      <pubDate>Wed, 21 Dec 2022 21:12:26 +0900</pubDate>
    </item>
    <item>
      <title>Function Execute 권한은 부여 하고, Function Source 는 조회 못하게 하고 싶다. ( feature wrap )</title>
      <link>https://darkturtle.tistory.com/95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;상황&amp;nbsp;:&amp;nbsp;Function&amp;nbsp;Execute&amp;nbsp;권한은&amp;nbsp;부여&amp;nbsp;하고,&amp;nbsp;Function&amp;nbsp;Source&amp;nbsp;는&amp;nbsp;조회&amp;nbsp;못하게&amp;nbsp;하고&amp;nbsp;싶다. &lt;br /&gt;&lt;br /&gt;&amp;lt;&amp;lt; 테스트 결과 &amp;gt;&amp;gt;&amp;nbsp;&lt;br /&gt;1.&amp;nbsp;Function&amp;nbsp;Execute&amp;nbsp;권한을&amp;nbsp;부여&amp;nbsp;받은&amp;nbsp;유저는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Execute 권한은 물론, Function Source 조회 가능 ( Procedure 도 마찬가지 ) &lt;br /&gt;2.&amp;nbsp;Package&amp;nbsp;Execute&amp;nbsp;권한을&amp;nbsp;부여&amp;nbsp;받은&amp;nbsp;유저는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Execute 권한을 갖고, Package 선언부만 조회 가능하고, Pakcage Body 는 조회 불가 &lt;br /&gt;3.&amp;nbsp;(1)&amp;nbsp;Function&amp;nbsp;Execute&amp;nbsp;권한&amp;nbsp;부여&amp;nbsp;+&amp;nbsp;Source&amp;nbsp;조회&amp;nbsp;불가를&amp;nbsp;구현하기&amp;nbsp;위해서는&amp;nbsp;wrap&amp;nbsp;기능&amp;nbsp;필요&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; wrap 결과로, 소스 조회는 되지만, wrap 된 소스가 조회됨&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;%% wrap : 포장하다, 감싸다, 감추가&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;&amp;lt; Oracle execute 권한 설명 &amp;gt;&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1a1816;&quot;&gt;Execute the procedure or function directly, or access any program object declared in the specification of a package, or compile the object implicitly during a call to a currently invalid or uncompiled function or procedure. This privilege does not allow the grantee to explicitly compile using&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;ALTER PROCEDURE&lt;span style=&quot;background-color: #ffffff; color: #1a1816;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;ALTER FUNCTION&lt;span style=&quot;background-color: #ffffff; color: #1a1816;&quot;&gt;. For explicit compilation you need the appropriate&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;ALTER&lt;span style=&quot;background-color: #ffffff; color: #1a1816;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;system privilege.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/GRANT.html#GUID-20B4E2C0-A7F8-4BC8-A5E8-BE61BDC41AC3&quot;&gt;https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/GRANT.html#GUID-20B4E2C0-A7F8-4BC8-A5E8-BE61BDC41AC3&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1671454474383&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- scott 유저로 testuser 생성 
SQL&amp;gt; show user
USER is &quot;SCOTT&quot;
SQL&amp;gt;

SQL&amp;gt; CREATE USER testuser IDENTIFIED BY qwer1234;

User created.

SQL&amp;gt; GRANT CREATE SESSION TO testuser;

Grant succeeded.

-- scott 유저로 test_fnc 평션  생성 
SQL&amp;gt;create or replace function test_fnc
return number
is
v_no number := 1 ;
begin
null;
return v_no;
end;
/
Function created.

SQL&amp;gt; grant execute on test_fnc to testuser;

Grant succeeded.

SQL&amp;gt;

SQL&amp;gt; grant execute on emp_info to testuser ;

Grant succeeded.

SQL&amp;gt;

-- scott 유저로 emp_info 패키지 생성 
-- emp_info 소스 참조 : oracleclub pl/sql 강좌 
-- http://www.gurubee.net/lecture/1075


-- testuser 로 접속 
SQL&amp;gt; conn testuser/qwer1234;
Connected.
SQL&amp;gt;

-- test_fnc 수행 --&amp;gt; 정상 수행 
SQL&amp;gt; select scott.test_fnc() from dual ;

SCOTT.TEST_FNC()
----------------
               1

SQL&amp;gt;
SQL&amp;gt; col owner for a14
SQL&amp;gt; set linesize 180
SQL&amp;gt; col name for a20
SQL&amp;gt; col line for 999
SQL&amp;gt; col text for a80
SQL&amp;gt;
-- execute 권한만 부여 했음에도 불구하고, test_fnc 소스 조회 가능  
SQL&amp;gt; select owner, name, line, text from all_source where owner='SCOTT' and name ='TEST_FNC';

OWNER          NAME                 LINE TEXT
-------------- -------------------- ---- --------------------------------------------------------------------------------
SCOTT          TEST_FNC                1 function test_fnc
SCOTT          TEST_FNC                2 return number
SCOTT          TEST_FNC                3 is
SCOTT          TEST_FNC                4 v_no number := 1 ;
SCOTT          TEST_FNC                5 begin
SCOTT          TEST_FNC                6 null;
SCOTT          TEST_FNC                7 return v_no;
SCOTT          TEST_FNC                8 end;

8 rows selected.

SQL&amp;gt;

SQL&amp;gt; set serveroutput on

-- emp_info 패키지 수행 &amp;gt;&amp;gt; 정상 수행 
SQL&amp;gt; exec scott.emp_info.dept_emp_info(10);
?? : 7782
?? : CLARK
??? : 1981/06/09
?? : 7839
?? : KING
??? : 1981/11/17
?? : 7934
?? : MILLER
??? : 1982/01/23

PL/SQL procedure successfully completed.

-- emp_info 패키지 execute 권한만 부여 했음에도 불구하고, 패키지 선언부만 조회됨 
SQL&amp;gt; select owner, name, line, text from all_source where owner='SCOTT' and name ='EMP_INFO';

OWNER          NAME                 LINE TEXT
-------------- -------------------- ---- --------------------------------------------------------------------------------
SCOTT          EMP_INFO                1 PACKAGE emp_info AS
SCOTT          EMP_INFO                2
SCOTT          EMP_INFO                3        PROCEDURE all_emp_info;   -- ?? ???  ?? ??
SCOTT          EMP_INFO                4
SCOTT          EMP_INFO                5         PROCEDURE all_sal_info;   -- ?? ???  ?? ??
SCOTT          EMP_INFO                6
SCOTT          EMP_INFO                7         -- ?? ???  ?? ??
SCOTT          EMP_INFO                8         PROCEDURE dept_emp_info (v_deptno IN  NUMBER) ;
SCOTT          EMP_INFO                9
SCOTT          EMP_INFO               10         -- ?? ???  ?? ??
SCOTT          EMP_INFO               11         PROCEDURE dept_sal_info (v_deptno IN  NUMBER) ;
SCOTT          EMP_INFO               12
SCOTT          EMP_INFO               13     END emp_info;
SCOTT          EMP_INFO               14

14 rows selected.

SQL&amp;gt;
-- PAKCAGE 경우, PACKAGE BODY 는 조회 되지 않고, 선언부만 조회됨 !!!

-- wrap 수행 
[oracle@oel7 ~]$ cat test_fnc.sql
create or replace function test_fnc
return number
is
v_no number := 1 ;
begin
null;
return v_no;
end;
/
[oracle@oel7 ~]$ which wrap
/ORA19/app/oracle/product/19.0.0/db_1/bin/wrap
[oracle@oel7 ~]$ wrap iname=test_fnc.sql

PL/SQL Wrapper: Release 19.0.0.0.0 - Production on Mon Dec 19 21:46:20 2022
Version 19.14.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Processing test_fnc.sql to test_fnc.plb
[oracle@oel7 ~]$ cat test_fnc.plb
create or replace function test_fnc wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
54 85
xxSk47G/q/rhM3XagiIkyO01Uz4wg8eZgcfLCNL+XhahYtH0rtkMi57Asr2ym16lmYEywLIG
m3SLnm3+TgfAlNh+lHSU2L5ucVUAc1Pk5hDP2Dj8NeXYvnFzcdiIps4Ib6k=

/
[oracle@oel7 ~]$

-- wrap 결과 파일로 재 컴파일 
SQL&amp;gt; conn scott/tiger
Connected.
SQL&amp;gt; @test_fnc.plb

Function created.

SQL&amp;gt;

-- testuser 로 평션 수행 및 평션 소스 조회 
SQL&amp;gt; show user
USER is &quot;TESTUSER&quot;
SQL&amp;gt;
-- test_fnc 수행 --&amp;gt; 정상 수행 
SQL&amp;gt; select scott.test_fnc() from dual ;

SCOTT.TEST_FNC()
----------------
               1
-- execute 권한만 부여 했음에도 불구하고, test_fnc wrap 된 소스 조회 가능  !!!
SQL&amp;gt; select owner, name, line, text from all_source where owner='SCOTT' and name ='TEST_FNC';

OWNER          NAME                 LINE TEXT
-------------- -------------------- ---- --------------------------------------------------------------------------------
SCOTT          TEST_FNC                1 function test_fnc wrapped
                                         a000000
                                         1
                                         abcd
                                         abcd
                                         abcd
                                         abcd
                                         abcd
                                         abcd
                                         abcd
                                         abcd
                                         abcd
                                         abcd
                                         abcd
                                         abcd
                                         abcd
                                         abcd
                                         abcd
                                         8
                                         54 85
                                         xxSk47G/q/rhM3XagiIkyO01Uz4wg8eZgcfLCNL+XhahYtH0rtkMi57Asr2ym16lmYEywLIG
                                         m3SLnm3+TgfAlNh+lHSU2L5ucVUAc1Pk5hDP2Dj8NeXYvnFzcdiIps4Ib6k=


SQL&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>code</category>
      <category>function</category>
      <category>oracle</category>
      <category>Package</category>
      <category>source</category>
      <category>wrap</category>
      <category>보호</category>
      <category>소스</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/95</guid>
      <comments>https://darkturtle.tistory.com/95#entry95comment</comments>
      <pubDate>Mon, 19 Dec 2022 22:00:33 +0900</pubDate>
    </item>
    <item>
      <title>LNNVL 함수</title>
      <link>https://darkturtle.tistory.com/94</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;--&amp;nbsp;LNNVL&amp;nbsp;함수는&amp;nbsp;condition&amp;nbsp;이&amp;nbsp;&amp;nbsp;FALSE&amp;nbsp;나&amp;nbsp;UNKNOWN&amp;nbsp;이면&amp;nbsp;TRUE,&amp;nbsp;TRUE&amp;nbsp;이면&amp;nbsp;FLASE를&amp;nbsp;반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-- 출처 : 불친절한 SQL 프로그래밍 P161&lt;/p&gt;
&lt;pre id=&quot;code_1671021046437&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT  ENAME, COMM
FROM    EMP
WHERE   LNNVL ( COMM &amp;lt;&amp;gt; 0 ) ; 
--  NULL &amp;lt;&amp;gt; 0 -&amp;gt; UNKNOWN -&amp;gt; TRUE
--     0 &amp;lt;&amp;gt; 0 -&amp;gt; FALSE   -&amp;gt; TRUE
--     1 &amp;lt;&amp;gt; 0 -&amp;gt; TRUE    -&amp;gt; FALSE 
--  결국 아래와 같은 의미 
SELECT ENAME, COMM
FROM   EMP
WHERE ( COMM IS NULL OR COMM  = 0  ) ;

-- P 335
-- UNION, INTERSECT, MINUS 연산자는 중복 값을 제거하기위해 데이터 집합을 정렬한다.
-- 대량 데이터의 소트가 발생하면 쿼리 성능이 저하 될 수 있다.
-- INTERSECT, MINU 연산자는 서브 쿼리로의 변경을 통해 소트 발생량을 감소 시킬 수 있다.
DROP TABLE T1 PURGE ;
DROP TABLE T2 PURGE ; 

CREATE TABLE T1 ( C1 VARCHAR2(1) NOT NULL, C2 NUMBER ) ;
CREATE TABLE T2 ( C1 VARCHAR2(1) NOT NULL, C2 NUMBER ) ;

INSERT INTO T1 (C1, C2) VALUES ( 'A',1);
INSERT INTO T1 (C1, C2) VALUES ( 'A',2);
INSERT INTO T1 (C1, C2) VALUES ( 'B',1);
INSERT INTO T1 (C1, C2) VALUES ( 'B',2);
INSERT INTO T1 (C1, C2) VALUES ( 'Z',NULL);

INSERT INTO T2 (C1, C2) VALUES ( 'B',1);
INSERT INTO T2 (C1, C2) VALUES ( 'B',1);
INSERT INTO T2 (C1, C2) VALUES ( 'B',2);
INSERT INTO T2 (C1, C2) VALUES ( 'C',2);
INSERT INTO T2 (C1, C2) VALUES ( 'Z',NULL);
COMMIT;

SELECT C1, C2 FROM T1
INTERSECT 
SELECT C1, C2 FROM T2 
ORDER BY 1,2 ;

SELECT DISTINCT A.C1,A.C2 
FROM  T1 A 
WHERE EXISTS ( SELECT 1 
               FROM   T2 X
               WHERE  X.C1 = A.C1 
               AND    LNNVL(X.C2 &amp;lt;&amp;gt; A.C2 )) 
ORDER BY 1,2 ;      

SELECT DISTINCT A.C1,A.C2 
FROM  T1 A 
WHERE EXISTS ( SELECT 1 
               FROM   T2 X
               WHERE  X.C1 = A.C1               
              AND   ( X.C2 IS NULL OR X.C2 = A.C2 ) ) 
ORDER BY 1,2 ;          
-- 위 3개 쿼리는 모두 동일한 결과 
C         C2
- ----------
B          1
B          2
Z


-- MINUS 연산자는 NOT EXISTS 조건으로 변경할 수 있다.
-- 서브 쿼리를 사용하면 열이 많을 수록 쿼리가 길어지는 단점이 있따.
SELECT C1, C2 FROM T1
MINUS 
SELECT C1, C2 FROM T2 ;

SELECT DISTINCT A.C1, A.C2
FROM  T1 A
WHERE NOT EXISTS ( SELECT 1 
                   FROM  T2 X
                   WHERE X.C1 = A.C1
                   AND  LNNVL(X.C2 = A.C2)) ;

SELECT DISTINCT A.C1, A.C2
FROM  T1 A
WHERE NOT EXISTS ( SELECT 1 
                   FROM  T2 X
                   WHERE X.C1 = A.C1                   
                   AND  ( X.C2 IS NULL OR X.C2 = A.C2 ) ) ;
-- 마찬가지로, 위 3개 쿼리는 모두 동일한 결과                    
C         C2
- ----------
A          2
A          1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>FALSE</category>
      <category>LNNVL</category>
      <category>oracle</category>
      <category>True</category>
      <category>unknown</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/94</guid>
      <comments>https://darkturtle.tistory.com/94#entry94comment</comments>
      <pubDate>Wed, 14 Dec 2022 21:31:57 +0900</pubDate>
    </item>
    <item>
      <title>Append 와 Index( Normal, Unique, PK ) 관계</title>
      <link>https://darkturtle.tistory.com/93</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Index 와 Append 관계에 대한 문의가 있어,&amp;nbsp;예전에 정리했던 글이 있어 찾아봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입맛에 맞는 내용이 없어, 예전 글을 참고해서 테스트 및 정리&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;&amp;lt; 결론 &amp;gt;&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. PK 나 UK 가 있는 상태에선 UNDO 및 REDO 가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. NORMAL INDEX 는 UNUSABLE 로 설정 후, 작업 하면 UNDO 는 1, REDO 도 최소화 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. UNIQUE INDEX 를 UNUSABLE 로 하면 &quot;ORA-26026&quot; 에러가 발생 하고, DML 불가함&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 결론적으로 PK, UK INDEX / CONSTRAINT DROP + Normal Index Unsuable&amp;nbsp; + TABLE NOLOGING 후, APPEND 작업이 가장 효과적이다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. (주의) APPEND 작업 시에, 다른 세션에서 DML 불가, 이행 이나 배치 작업만 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 93.721%; height: 376px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 2.37565%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 15.5785%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 13.4756%;&quot;&gt;Normal / Unique &lt;br /&gt;/PK Index 순서&lt;br /&gt;(&amp;nbsp; Unusable 인덱스 )&lt;/td&gt;
&lt;td style=&quot;width: 10.5959%; height: 17px; text-align: center;&quot;&gt;Undo&lt;br /&gt;( USED_UBLK )&lt;/td&gt;
&lt;td style=&quot;width: 10.7466%; height: 17px; text-align: center;&quot;&gt;Undo&lt;br /&gt;&lt;span&gt;(&lt;span&gt; USED_UREC&lt;/span&gt;&lt;/span&gt;)&lt;/td&gt;
&lt;td style=&quot;width: 10.5657%; height: 17px; text-align: center;&quot;&gt;Redo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 2.37565%; height: 17px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 15.5785%; height: 17px;&quot;&gt;No Index&lt;/td&gt;
&lt;td style=&quot;width: 13.4756%; text-align: center;&quot;&gt;0 / 0 / 0&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 10.5959%; height: 17px; text-align: right;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10.7466%; height: 17px; text-align: right;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10.5657%; height: 17px; text-align: right;&quot;&gt;281,136&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 2.37565%; height: 17px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 15.5785%; height: 17px;&quot;&gt;Normal Index&lt;/td&gt;
&lt;td style=&quot;width: 13.4756%; text-align: center;&quot;&gt;1 / 0 / 0&lt;/td&gt;
&lt;td style=&quot;width: 10.5959%; height: 17px; text-align: right;&quot;&gt;1,700&lt;/td&gt;
&lt;td style=&quot;width: 10.7466%; height: 17px; text-align: right;&quot;&gt;5,099&lt;/td&gt;
&lt;td style=&quot;width: 10.5657%; height: 17px; text-align: right;&quot;&gt;58,518,760&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 2.37565%; height: 17px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 15.5785%; height: 17px;&quot;&gt;Normal Index Unusable&lt;/td&gt;
&lt;td style=&quot;width: 13.4756%; text-align: center;&quot;&gt;1(1) / 0 / 0&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 10.5959%; height: 17px; text-align: right;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10.7466%; height: 17px; text-align: right;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10.5657%; height: 17px; text-align: right;&quot;&gt;300,987&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 2.37565%; height: 17px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 15.5785%; height: 17px;&quot;&gt;Unique Index Unusable&lt;/td&gt;
&lt;td style=&quot;width: 13.4756%; text-align: center;&quot;&gt;1(1) / 1(1) / 0&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 10.5959%; height: 17px; text-align: right;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 10.7466%; height: 17px; text-align: right;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 10.5657%; height: 17px; text-align: right;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;width: 2.37565%; height: 34px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 15.5785%; height: 34px;&quot;&gt;Unique Index Usable&amp;nbsp;&lt;br /&gt;+ Normal Index Unusable&lt;/td&gt;
&lt;td style=&quot;width: 13.4756%; text-align: center;&quot;&gt;1(1) / 1(0) / 0&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 10.5959%; height: 34px; text-align: right;&quot;&gt;3,881&lt;/td&gt;
&lt;td style=&quot;width: 10.7466%; height: 34px; text-align: right;&quot;&gt;7,792&lt;/td&gt;
&lt;td style=&quot;width: 10.5657%; height: 34px; text-align: right;&quot;&gt;129,132,596&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 51px;&quot;&gt;
&lt;td style=&quot;width: 2.37565%; height: 51px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 15.5785%; height: 51px;&quot;&gt;PK Index Usable&lt;br /&gt;+ Unique Index Unusable&lt;br /&gt;+ Normal Index Usable&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 13.4756%; text-align: center;&quot;&gt;1(1) / 1 (0 ) / 1(0)&lt;/td&gt;
&lt;td style=&quot;width: 10.5959%; height: 51px; text-align: right;&quot;&gt;8,886&lt;/td&gt;
&lt;td style=&quot;width: 10.7466%; height: 51px; text-align: right;&quot;&gt;17,801&lt;/td&gt;
&lt;td style=&quot;width: 10.5657%; height: 51px; text-align: right;&quot;&gt;296,275,316&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;width: 2.37565%; height: 34px;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 15.5785%; height: 34px;&quot;&gt;Normal Index Unusable&lt;br /&gt;+ Table Nologging&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 13.4756%; text-align: center;&quot;&gt;1(1) / 0 / 0&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 10.5959%; height: 34px; text-align: right;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10.7466%; height: 34px; text-align: right;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10.5657%; height: 34px; text-align: right;&quot;&gt;281,232&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** 4 Unique Index Unusable 설정 시,&amp;nbsp; DML 수행 불가&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1670911976305&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 샘플 테이블 생성 
DROP TABLE  SOURCE_TABLE  ;
CREATE TABLE SOURCE_TABLE 
AS SELECT B.NUM, A.*
FROM  DBA_OBJECTS A, 
     ( SELECT (COLUMN_VALUE).GETNUMBERVAL() AS NUM FROM XMLTABLE('1 to 30')  )  B  ;

SELECT COUNT(*) FROM SOURCE_TABLE ;
-- 730,950

CREATE TABLE TARGET_TABLE  AS SELECT * FROM SOURCE_TABLE WHERE 1=2;

-- PK 를 위한 데이타 보정
UPDATE SOURCE_TABLE
SET    SUBOBJECT_NAME ='NO PARITION' -- NVL(SUBOBJECT_NAME,'NO PARTITION')
WHERE SUBOBJECT_NAME IS NULL  ;

COMMIT ;

UPDATE SOURCE_TABLE
SET    OBJECT_ID = 9999 --'NO OBJECT_ID' -- NVL(SUBOBJECT_NAME,'NO PARTITION')
WHERE OBJECT_ID IS NULL  ;

COMMIT ;

-- 테스트 세션 체크 ( CASE 별로 매번 새로 접속 후, 테스트 ) 
SELECT DISTINCT SID FROM V$MYSTAT ;
-- 37 

-- Check Undo 
SELECT s.inst_id, s.sid, s.serial#, s.status, t.used_ublk, t.used_urec 
FROM gv$session s, gv$transaction t, gv$process p
WHERE s.taddr = t.addr
and s.inst_id = t.inst_id
and s.paddr= p.addr
and s.INST_ID =p.INST_ID
and s.sid  = :v_sid
ORDER BY t.used_ublk desc, t.used_urec desC ;

-- Check Redo 
select  ss.sid, 'redo size:'||ss.value,    s.program,    s.module
from  v$statname     sn,v$sesstat     ss,v$session s
where ss.statistic#=sn.statistic# 
and   sn.name='redo size' 
and   s.sid=ss.sid 
and   s.sid = :v_sid 
and   ss.value&amp;gt;0
order by  ss.value;

CASE 1 ) 
DROP TABLE TARGET_TABLE PURGE ;
CREATE TABLE TARGET_TABLE  AS SELECT * FROM SOURCE_TABLE WHERE 1=2;
INSERT /*+ APPEND */ INTO  TARGET_TABLE  SELECT * FROM SOURCE_TABLE ;

CASE 2 )
일반 인덱스 추가 
DROP TABLE TARGET_TABLE PURGE ;
CREATE TABLE TARGET_TABLE  AS SELECT * FROM SOURCE_TABLE WHERE 1=2;
CREATE INDEX XAK01_TARGET_TABLE ON TARGET_TABLE ( NUM, OBJECT_ID ) ;
INSERT /*+ APPEND */ INTO  TARGET_TABLE  SELECT * FROM SOURCE_TABLE ;

CASE 3)
일반 인덱스 UNUSABLE 
DROP TABLE TARGET_TABLE PURGE ;
CREATE TABLE TARGET_TABLE  AS SELECT * FROM SOURCE_TABLE WHERE 1=2;
CREATE INDEX XAK01_TARGET_TABLE ON TARGET_TABLE ( NUM, OBJECT_ID ) ;
ALTER INDEX XAK01_TARGET_TABLE UNUSABLE ;
INSERT /*+ APPEND */ INTO  TARGET_TABLE  SELECT * FROM SOURCE_TABLE ;

-- ALTER SESSION SET SKIP_UNUSABLE_INDEXES= TRUE ; 는 DB LEVEL 에서TRUE 로 불필요 
SQL&amp;gt; SELECT NAME, VALUE,DISPLAY_VALUE
FROM V$PARAMETER WHERE NAME ='skip_unusable_indexes';

NAME                        VALUE   DISPLAY_VALUE  
-------------------------- -------- ---------------
skip_unusable_indexes       TRUE     TRUE

CASE 4)
UNIQUE INDEX  UNUSABLE  &amp;gt;&amp;gt; DML 불가
DROP TABLE TARGET_TABLE PURGE ;
CREATE TABLE TARGET_TABLE  AS SELECT * FROM SOURCE_TABLE WHERE 1=2;
CREATE INDEX XAK01_TARGET_TABLE ON TARGET_TABLE ( NUM, OBJECT_ID ) ;
ALTER INDEX XAK01_TARGET_TABLE UNUSABLE ;
CREAET UNIQUE INDEX XUK01_TARGET_TABLE ON TARGET_TABLE ( NUM, OBJECT_ID, OBJECT_NAME ); 

ALTER INDEX XUK01_TARGET_TABLE UNUSABLE ;
INSERT /*+ APPEND */ INTO  TARGET_TABLE  SELECT * FROM SOURCE_TABLE ;
--ORA-26026: 유일 SCOTT.XUK01_TARGET_TABLE 인덱스는 처음과 같은 사용불가능한 상태입니다
-- https://dbaora.com/loading-data-in-direct-mode-and-unique-index-ora-26026/ 
&amp;lt;&amp;lt; UNIQUE INDEX 가 UNUSABLE 상태에서는 DML 불가함 
ALTER INDEX XUK01_TARGET_TABLE REBUILD  ;
INSERT /*+ APPEND */ INTO  TARGET_TABLE  SELECT * FROM SOURCE_TABLE ;

CASE 5)
UNIQUE INDEX  유지 상태에서 ( WITH 일반인덱스 UNUSABLE ) 
DROP TABLE TARGET_TABLE PURGE ;
CREATE TABLE TARGET_TABLE  AS SELECT * FROM SOURCE_TABLE WHERE 1=2;
CREATE INDEX XAK01_TARGET_TABLE ON TARGET_TABLE ( NUM, OBJECT_ID ) ; -- 일반인덱스 존재 
ALTER INDEX XAK01_TARGET_TABLE UNUSABLE ; -- 일반 인덱스 UNUSABLE 조치 
CREAET UNIQUE INDEX XUK01_TARGET_TABLE ON TARGET_TABLE ( NUM, OBJECT_ID, OBJECT_NAME ); 
INSERT /*+ APPEND */ INTO  TARGET_TABLE  SELECT * FROM SOURCE_TABLE ;

CASE 6)
PK CONSTRAINT ( UNIQUE INDEX) 유지 상태에서  ( WITH 일반인덱스 UNUSABLE ) 
DROP TABLE TARGET_TABLE PURGE ;
CREATE TABLE TARGET_TABLE  AS SELECT * FROM SOURCE_TABLE WHERE 1=2; 
CREATE INDEX XAK01_TARGET_TABLE ON TARGET_TABLE ( NUM, OBJECT_ID ) ; -- 일반인덱스
ALTER INDEX XAK01_TARGET_TABLE UNUSABLE ; -- 일반 인덱스 UNUSABLE 조치 
CREATE UNIQUE INDEX XUK01_TARGET_TABLE ON TARGET_TABLE ( NUM, OWNER, OBJECT_ID, OBJECT_NAME ); 
-- UNIQUE INDEX
CREATE UNIQUE INDEX XPK_TARGET_TABLE ON TARGET_TABLE (  NUM, OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID); 
-- PK INDEX
ALTER TABLE TARGET_TABLE ADD CONSTRAINT XPK_TARGET_TABLE PRIMARY KEY (  NUM, OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID);
-- PK CONSTRAINT 
INSERT /*+ APPEND */ INTO  TARGET_TABLE  SELECT * FROM SOURCE_TABLE ;

CASE 7)
일반 인덱스 추가 + TABLE NOLOGING 
DROP TABLE TARGET_TABLE PURGE ;
CREATE TABLE TARGET_TABLE  AS SELECT * FROM SOURCE_TABLE WHERE 1=2;
CREATE INDEX XAK01_TARGET_TABLE ON TARGET_TABLE ( NUM, OBJECT_ID ) ;
SELECT TABLE_NAME, LOGGING FROM DBA_TABLES WHERE  TABLE_NAME ='TARGET_TABLE';
ALTER TABLE TARGET_TABLE NOLOGGING  ;
SELECT TABLE_NAME, LOGGING FROM DBA_TABLES WHERE  TABLE_NAME ='TARGET_TABLE';
INSERT /*+ APPEND */ INTO  TARGET_TABLE  SELECT * FROM SOURCE_TABLE ;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>Append</category>
      <category>constraints</category>
      <category>index</category>
      <category>PK</category>
      <category>unique</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/93</guid>
      <comments>https://darkturtle.tistory.com/93#entry93comment</comments>
      <pubDate>Tue, 13 Dec 2022 15:13:33 +0900</pubDate>
    </item>
    <item>
      <title>데이타의 급격한 증가 시 확인 방법 FROM AWR</title>
      <link>https://darkturtle.tistory.com/91</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;데이타의&amp;nbsp;급격한&amp;nbsp;증가&amp;nbsp;시&amp;nbsp;확인&amp;nbsp;방법&amp;nbsp;FROM&amp;nbsp;AWR&amp;nbsp; &lt;br /&gt;출처&amp;nbsp;:&amp;nbsp;How&amp;nbsp;To&amp;nbsp;Get&amp;nbsp;Table&amp;nbsp;Growth&amp;nbsp;History&amp;nbsp;Information?&amp;nbsp;(문서&amp;nbsp;ID&amp;nbsp;1395195.1)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;&amp;lt; 참고 &amp;gt;&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://darkturtle.tistory.com/entry/Datafile-Resize-Script&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2018.11.05 - [Oracle/Oracle Script] - &amp;lt;&amp;lt; Datafile Resize Script &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1670390026502&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 기잔별 증가가 높은 SEGMENT 뽑기 
select   obj.owner, obj.object_name,
         to_char(sn.BEGIN_INTERVAL_TIME,'YYYY/MM/DD') start_day,
         ROUND(sum(a.SPACE_USED_DELTA)/1024/1024) block_increase_MB 
from     dba_hist_seg_stat a,
         dba_hist_snapshot sn,
         dba_objects obj
where    sn.snap_id = a.snap_id
and      obj.object_id = a.obj#
and      obj.owner not in ('SYS','SYSTEM')
and      end_interval_time between to_timestamp('2022/12/06','YYYY/MM/DD')  and to_timestamp('2022/12/07','YYYY/MM/DD')
group by obj.owner, obj.object_name,
         to_char(sn.BEGIN_INTERVAL_TIME,'YYYY/MM/DD')
ORDER BY block_increase_MB DESC  
/
-- 특정 OBJECT 증가량 뽑기 ( SCOTT.EMP ) 
select   obj.owner, obj.object_name,
         to_char(sn.BEGIN_INTERVAL_TIME,'YYYY/MM/DD') start_day,
         ROUND(sum(a.SPACE_USED_DELTA)/1024/1024) block_increase_MB 
from     dba_hist_seg_stat a,
         dba_hist_snapshot sn,
         dba_objects obj
where    sn.snap_id = a.snap_id
and      obj.object_id = a.obj#
and      obj.owner not in ('SYS','SYSTEM')
and      end_interval_time between to_timestamp('2022/12/06','YYYY/MM/DD')  and to_timestamp('2022/12/06','YYYY/MM/DD') + 1 
AND      obj.owner ='SCOTT'
AND      obj.object_name ='EMP' 
group by obj.owner, obj.object_name,
         to_char(sn.BEGIN_INTERVAL_TIME,'YYYY/MM/DD')
-- order by obj.owner, obj.object_name
ORDER BY start_day 
/&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>awr</category>
      <category>data</category>
      <category>growth</category>
      <category>oracle</category>
      <category>segment</category>
      <category>데이타</category>
      <category>증가</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/91</guid>
      <comments>https://darkturtle.tistory.com/91#entry91comment</comments>
      <pubDate>Wed, 7 Dec 2022 14:14:13 +0900</pubDate>
    </item>
    <item>
      <title>PROFILE 중 PASSWORD_ROLLOVER_TIME 추가됨 ( 19.12 부터 지원 ) 2</title>
      <link>https://darkturtle.tistory.com/90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;&amp;lt;&amp;nbsp;PASSWORD_ROLLOVER_TIME&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;&lt;br /&gt;19.12&amp;nbsp;부터&amp;nbsp;지원&amp;nbsp;&amp;nbsp;19.11&amp;nbsp;에서는&amp;nbsp;PROFILE&amp;nbsp;에&amp;nbsp;RESOURCE_NAME&amp;nbsp;에&amp;nbsp;PASSWORD_ROLLOVER_TIME&amp;nbsp;자체가&amp;nbsp;없음&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;&amp;lt; PASSWORD_ROLLOVER_TIME 어디까지 써봤니 ? &amp;gt;&amp;gt;&amp;nbsp;&lt;br /&gt;1.&amp;nbsp;0&amp;nbsp;-&amp;nbsp;사용&amp;nbsp;하지&amp;nbsp;않음(Disable)&lt;br /&gt;2.&amp;nbsp;1/24&amp;nbsp;-&amp;nbsp;1시간으로&amp;nbsp;최소값,&amp;nbsp;최대값&amp;nbsp;60일&lt;br /&gt;3.&amp;nbsp;(중요)&amp;nbsp;PASSWORD_GRACE_TIME(유예시간)&amp;nbsp;과&amp;nbsp;PASSWORD_LIFE_TIME(사용시간)&amp;nbsp;중&amp;nbsp;최소값보다&amp;nbsp;작다&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PASSWORD_ROLLOVER_TIME &amp;lt; MIN(PASSWORD_GRACE_TIME(유예시간), PASSWORD_LIFE_TIME(사용시간) )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서,&amp;nbsp;PASSWORD_GRACE_TIME&amp;nbsp;이&amp;nbsp;최대&amp;nbsp;값으로&amp;nbsp;이해하면&amp;nbsp;된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;&amp;lt; PASSWORD_ROLLOVER_TIME 소개 &amp;gt;&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://darkturtle.tistory.com/entry/PROFILE-중-PASSWORDROLLOVERTIME-추가됨-1912-부터-지원&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.04.28 - [Oracle/Oh Oracle ] - PROFILE 중 PASSWORD_ROLLOVER_TIME 추가됨 ( 19.12 부터 지원 )&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1670298816774&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[oracle@oel7 ~]$ sqlplus &quot;/as sysdba&quot;

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Dec 6 09:39:16 2022
Version 19.14.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

st
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0

SQL&amp;gt; CREATE USER TEST IDENTIFIED BY Q1W2E3R4 ;
User created.

SQL&amp;gt; GRANT CONNECT TO TEST ;
Grant succeeded.


SQL&amp;gt; SET LINESIZE 180
SQL&amp;gt; COL PROFILE FOR A30
SQL&amp;gt; COL RESOUCE_NAME FOR A50
SQL&amp;gt; COL LIMMIT FOR A50
SQL&amp;gt; SELECT P.PROFILE, P.RESOURCE_NAME, P.LIMIT
     FROM   DBA_USERS U, DBA_PROFILES P
     WHERE  U.USERNAME  IN (  'TEST' )
     AND    U.PROFILE = P.PROFILE  
     AND    P.RESOURCE_NAME IN ('PASSWORD_LIFE_TIME','PASSWORD_GRACE_TIME','PASSWORD_ROLLOVER_TIME')
     ORDER BY U.USERNAME, P.RESOURCE_NAME, P.LIMIT ;  

PROFILE                        RESOURCE_NAME                  LIMIT
------------------------------ ------------------------------ --------------------------------------------------------------------------------
DEFAULT                        PASSWORD_GRACE_TIME            7
DEFAULT                        PASSWORD_LIFE_TIME             180
DEFAULT                        PASSWORD_ROLLOVER_TIME         0            &amp;lt;&amp;lt;&amp;lt;&amp;lt; default 값 0 - disable 

SQL&amp;gt; ALTER PROFILE DEFAULT Limit password_rollover_time 1/24 ;

Profile altered.

SQL&amp;gt; SELECT P.PROFILE, P.RESOURCE_NAME, P.LIMIT
     FROM   DBA_USERS U, DBA_PROFILES P
     WHERE  U.USERNAME  IN (  'TEST' )
     AND    U.PROFILE = P.PROFILE
     AND    P.RESOURCE_NAME IN ('PASSWORD_LIFE_TIME','PASSWORD_GRACE_TIME','PASSWORD_ROLLOVER_TIME')
     ORDER BY U.USERNAME, P.RESOURCE_NAME, P.LIMIT ;  

PROFILE                        RESOURCE_NAME                  LIMIT
------------------------------ ------------------------------ --------------------------------------------------------------------------------
DEFAULT                        PASSWORD_GRACE_TIME            7
DEFAULT                        PASSWORD_LIFE_TIME             180
DEFAULT                        PASSWORD_ROLLOVER_TIME         .0416        &amp;lt;&amp;lt;&amp;lt;&amp;lt; 최소 값 1시간 으로 변경 

SQL&amp;gt; alter profile default limit password_rollover_time 5 ;

Profile altered.

SQL&amp;gt; SELECT P.PROFILE, P.RESOURCE_NAME, P.LIMIT
     FROM   DBA_USERS U, DBA_PROFILES P
     WHERE  U.USERNAME  IN (  'TEST' )
     AND    U.PROFILE = P.PROFILE
     AND    P.RESOURCE_NAME IN ('PASSWORD_LIFE_TIME','PASSWORD_GRACE_TIME','PASSWORD_ROLLOVER_TIME')
     ORDER BY U.USERNAME, P.RESOURCE_NAME, P.LIMIT ;  

PROFILE                        RESOURCE_NAME                  LIMIT
------------------------------ ------------------------------ --------------------------------------------------------------------------------
DEFAULT                        PASSWORD_GRACE_TIME            7
DEFAULT                        PASSWORD_LIFE_TIME             180
DEFAULT                        PASSWORD_ROLLOVER_TIME         5            &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; 5일로 변경 


SQL&amp;gt; alter profile default limit password_rollover_time 7 ;

Profile altered.

SQL&amp;gt; SELECT P.PROFILE, P.RESOURCE_NAME, P.LIMIT
FROM   DBA_USERS U, DBA_PROFILES P
  2    3  WHERE  U.USERNAME  IN (  'TEST' )
AND    U.PROFILE = P.PROFILE
AND    P.RESOURCE_NAME IN ('PASSWORD_LIFE_TIME','PASSWORD_GRACE_TIME','PASSWORD_ROLLOVER_TIME')
ORDER BY U.USERNAME, P.RESOURCE_NAME, P.LIMIT ;  4    5    6

PROFILE                        RESOURCE_NAME                  LIMIT
------------------------------ ------------------------------ --------------------------------------------------------------------------------
DEFAULT                        PASSWORD_GRACE_TIME            7
DEFAULT                        PASSWORD_LIFE_TIME             180
DEFAULT                        PASSWORD_ROLLOVER_TIME         7

-- PASSWORD_GRACE_TIME(7일) 보다 큰 값으로 PASSWORD_ROLLOVER_TIME 변경 시도 &amp;gt;&amp;gt; 변경 불가 
SQL&amp;gt; alter profile default limit password_rollover_time 7.1 ;
alter profile default limit password_rollover_time 7.1
*
ERROR at line 1:
ORA-02377: invalid profile limit PASSWORD_ROLLOVER_TIME

-- PASSWORD_GRACE_TIME(7일)을 190 일로 변경 
SQL&amp;gt; alter profile default limit PASSWORD_GRACE_TIME 190 ;

Profile altered.

SQL&amp;gt; SELECT P.PROFILE, P.RESOURCE_NAME, P.LIMIT
FROM   DBA_USERS U, DBA_PROFILES P
WHERE  U.USERNAME  IN (  'TEST' )
AND    U.PROFILE = P.PROFILE
AND    P.RESOURCE_NAME IN ('PASSWORD_LIFE_TIME','PASSWORD_GRACE_TIME','PASSWORD_ROLLOVER_TIME')
ORDER BY U.USERNAME, P.RESOURCE_NAME, P.LIMIT ;  2    3    4    5    6

PROFILE                        RESOURCE_NAME                  LIMIT
------------------------------ ------------------------------ --------------------------------------------------------------------------------
DEFAULT                        PASSWORD_GRACE_TIME            190
DEFAULT                        PASSWORD_LIFE_TIME             180
DEFAULT                        PASSWORD_ROLLOVER_TIME         7

-- 이젠 PASSWORD_GRACE_TIME(190일) 보다 작은 7.1 값으로 PASSWORD_ROLLOVER_TIME 변경 시도 &amp;gt;&amp;gt; 변경 가능 
SQL&amp;gt; alter profile default limit password_rollover_time 7.1 ;

Profile altered.

SQL&amp;gt; SELECT P.PROFILE, P.RESOURCE_NAME, P.LIMIT
FROM   DBA_USERS U, DBA_PROFILES P
WHERE  U.USERNAME  IN (  'TEST' )
AND    U.PROFILE = P.PROFILE
AND    P.RESOURCE_NAME IN ('PASSWORD_LIFE_TIME','PASSWORD_GRACE_TIME','PASSWORD_ROLLOVER_TIME')
ORDER BY U.USERNAME, P.RESOURCE_NAME, P.LIMIT ;  

PROFILE                        RESOURCE_NAME                  LIMIT
------------------------------ ------------------------------ --------------------------------------------------------------------------------
DEFAULT                        PASSWORD_GRACE_TIME            190
DEFAULT                        PASSWORD_LIFE_TIME             180
DEFAULT                        PASSWORD_ROLLOVER_TIME         7.1

-- PASSWORD_ROLLOVER_TIME &amp;lt; MIN (PASSWORD_LIFE_TIME,  PASSWORD_GRACE_TIME ) 
-- 7.1                    &amp;lt; MIN (180               , 190                  ) 
SQL&amp;gt;  alter profile default limit password_rollover_time 180.1 ;  -- 180 일보다 큰 값으로 변경 시도 -- 불가 
 alter profile default limit password_rollover_time 180.1
*
ERROR at line 1:
ORA-02377: invalid profile limit PASSWORD_ROLLOVER_TIME&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>19.12</category>
      <category>19C</category>
      <category>oracle</category>
      <category>password</category>
      <category>PASSWORD_ROLLOVER_TIME</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/90</guid>
      <comments>https://darkturtle.tistory.com/90#entry90comment</comments>
      <pubDate>Tue, 6 Dec 2022 12:56:07 +0900</pubDate>
    </item>
    <item>
      <title>Oracle 21C New Feature</title>
      <link>https://darkturtle.tistory.com/86</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://medium.com/oracledevs/oracle-database-23c-new-feature-highlights-release-february-2023-c56e5ec5c9a&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://medium.com/oracledevs/oracle-database-23c-new-feature-highlights-release-february-2023-c56e5ec5c9a&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669681458818&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Oracle Database 23c: New feature highlights&quot; data-og-description=&quot;Based on this fascinating Twitter thread by Philipp Salvisberg covering the presentation by Gerald Venzl at DOAG 2022 I would like to&amp;hellip;&quot; data-og-host=&quot;medium.com&quot; data-og-source-url=&quot;https://medium.com/oracledevs/oracle-database-23c-new-feature-highlights-release-february-2023-c56e5ec5c9a&quot; data-og-url=&quot;https://medium.com/oracledevs/oracle-database-23c-new-feature-highlights-release-february-2023-c56e5ec5c9a&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/43jLa/hyQJy5r6ev/GaxNFWsM4AnipeWgR1HPaK/img.png?width=556&amp;amp;height=215&amp;amp;face=0_0_556_215&quot;&gt;&lt;a href=&quot;https://medium.com/oracledevs/oracle-database-23c-new-feature-highlights-release-february-2023-c56e5ec5c9a&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://medium.com/oracledevs/oracle-database-23c-new-feature-highlights-release-february-2023-c56e5ec5c9a&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/43jLa/hyQJy5r6ev/GaxNFWsM4AnipeWgR1HPaK/img.png?width=556&amp;amp;height=215&amp;amp;face=0_0_556_215');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Oracle Database 23c: New feature highlights&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Based on this fascinating Twitter thread by Philipp Salvisberg covering the presentation by Gerald Venzl at DOAG 2022 I would like to&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;lt;&amp;lt;&amp;nbsp;요약&amp;nbsp;&amp;gt;&amp;gt; &lt;br /&gt;1.&amp;nbsp;Select&amp;nbsp;without&amp;nbsp;FROM &lt;br /&gt;2.&amp;nbsp;Use&amp;nbsp;column&amp;nbsp;alias&amp;nbsp;in&amp;nbsp;GROUP&amp;nbsp;BY&amp;nbsp;and&amp;nbsp;HAVING &lt;br /&gt;3.&amp;nbsp;Test&amp;nbsp;for&amp;nbsp;object&amp;nbsp;existence&amp;nbsp;in&amp;nbsp;DDL&amp;nbsp;statements&amp;nbsp;using&amp;nbsp;IF&amp;nbsp;EXISTS&amp;nbsp;and&amp;nbsp;IF&amp;nbsp;NOT&amp;nbsp;EXIST(S?) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;: SQL SERVER 처럼 OBJECT 존재 유무로 로직 분기 가능&amp;nbsp; &lt;br /&gt;4.&amp;nbsp;Table&amp;nbsp;Value&amp;nbsp;Constructor&amp;nbsp;&amp;mdash;&amp;nbsp;allows&amp;nbsp;to&amp;nbsp;group&amp;nbsp;multiple&amp;nbsp;rows&amp;nbsp;of&amp;nbsp;data&amp;nbsp;in&amp;nbsp;a&amp;nbsp;single&amp;nbsp;DML&amp;nbsp;or&amp;nbsp;SELECT&amp;nbsp;statement.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;5.&amp;nbsp;Returning&amp;nbsp;Clause&amp;nbsp;for&amp;nbsp;MERGE&amp;nbsp;statement&amp;nbsp;and&amp;nbsp;also&amp;nbsp;returning&amp;nbsp;OLD&amp;nbsp;column&amp;nbsp;value&amp;nbsp;for&amp;nbsp;UPDATE. &lt;br /&gt;6.&amp;nbsp;Better&amp;nbsp;error&amp;nbsp;messages&amp;nbsp;to&amp;nbsp;explain&amp;nbsp;why&amp;nbsp;a&amp;nbsp;statement&amp;nbsp;failed&amp;nbsp;to&amp;nbsp;execute. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;SQL&amp;nbsp;에러&amp;nbsp;메시지가&amp;nbsp;좀더&amp;nbsp;직관적이고&amp;nbsp;자세하게&amp;nbsp;표기됨,&amp;nbsp;에러가&amp;nbsp;모호해서&amp;nbsp;에러원인&amp;nbsp;파악이&amp;nbsp;힘들었는데,&amp;nbsp;대환영&amp;nbsp; &lt;br /&gt;7.&amp;nbsp;Annotations&amp;nbsp;&amp;mdash;&amp;nbsp;define&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;for&amp;nbsp;database&amp;nbsp;objects.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;8.&amp;nbsp;Developer&amp;nbsp;Role&amp;nbsp;&amp;mdash;&amp;nbsp;quickly&amp;nbsp;provide&amp;nbsp;a&amp;nbsp;user&amp;nbsp;with&amp;nbsp;useful&amp;nbsp;privileges&amp;nbsp;for&amp;nbsp;doing&amp;nbsp;database&amp;nbsp;development. &lt;br /&gt;9.&amp;nbsp;JavaScript&amp;nbsp;Stored&amp;nbsp;Procedures&amp;nbsp; &lt;br /&gt;10.&amp;nbsp;SQL&amp;nbsp;Domains &lt;br /&gt;11.&amp;nbsp;Update&amp;nbsp;records&amp;nbsp;based&amp;nbsp;on&amp;nbsp;a&amp;nbsp;join&amp;nbsp;condition&amp;nbsp; &lt;br /&gt;12.&amp;nbsp;Schema&amp;nbsp;Level&amp;nbsp;Privileges&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;13.&amp;nbsp;JSON&amp;nbsp;Schema&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>23C</category>
      <category>feature</category>
      <category>new</category>
      <category>oracle</category>
      <category>기능</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/86</guid>
      <comments>https://darkturtle.tistory.com/86#entry86comment</comments>
      <pubDate>Tue, 29 Nov 2022 19:00:07 +0900</pubDate>
    </item>
    <item>
      <title>날씨도 추운데, 한강 라이딩 갈까 말까 ?</title>
      <link>https://darkturtle.tistory.com/85</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자줄사 질문이 올라왔다 ?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[자출사화이팅]&amp;nbsp;오늘&amp;nbsp;자전거&amp;nbsp;타기&amp;nbsp;좋은날인가요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cafe.naver.com/bikecity/2776836&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://cafe.naver.com/bikecity/2776836&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669511406074&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;오늘 자전거 타기 좋은날인가요?&quot; data-og-description=&quot;대한민국 모임의 시작, 네이버 카페&quot; data-og-host=&quot;cafe.naver.com&quot; data-og-source-url=&quot;https://cafe.naver.com/bikecity/2776836&quot; data-og-url=&quot;https://cafe.naver.com/bikecity/2776836&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nhlpg/hyQH3xSk82/xAupUAR0K43hBelSSljRck/img.jpg?width=113&amp;amp;height=113&amp;amp;face=0_0_113_113&quot;&gt;&lt;a href=&quot;https://cafe.naver.com/bikecity/2776836&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cafe.naver.com/bikecity/2776836&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nhlpg/hyQH3xSk82/xAupUAR0K43hBelSSljRck/img.jpg?width=113&amp;amp;height=113&amp;amp;face=0_0_113_113');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;오늘 자전거 타기 좋은날인가요?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;대한민국 모임의 시작, 네이버 카페&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cafe.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나도 갈까 ? 말까 ? 하는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 실시간으로 한강 자전거 도로를 볼수 있으면....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도로 cctv 를 통해서 간접적으로 확인 가능&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 도시교통정보센터에서 애용하는 자출 도로인 오목표, 고척교 CCTV 로 확인 할수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금은 10시고, 날씨는 시원해 보이고, 라이더는 한두명 정도 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주저하면 못가는데, 일딴 가다 돌아오더라고 출발해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.utic.go.kr/map/map.do?menu=cctv&quot;&gt;http://www.utic.go.kr/map/map.do?menu=cctv&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1669511467465&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;도시교통정보센터&quot; data-og-description=&quot;도시교통정보센터&quot; data-og-host=&quot;www.utic.go.kr&quot; data-og-source-url=&quot;http://www.utic.go.kr/map/map.do?menu=cctv&quot; data-og-url=&quot;http://도시교통정보센터&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://www.utic.go.kr/map/map.do?menu=cctv&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://www.utic.go.kr/map/map.do?menu=cctv&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;도시교통정보센터&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;도시교통정보센터&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.utic.go.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>내친구자전거</category>
      <category>cctv</category>
      <category>갈까?</category>
      <category>라이딩</category>
      <category>말까?</category>
      <category>보기</category>
      <category>실시간</category>
      <category>한강</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/85</guid>
      <comments>https://darkturtle.tistory.com/85#entry85comment</comments>
      <pubDate>Sun, 27 Nov 2022 10:13:12 +0900</pubDate>
    </item>
    <item>
      <title>&amp;lt;&amp;lt; 자전거 즐겨 찾기 &amp;gt;&amp;gt;</title>
      <link>https://darkturtle.tistory.com/83</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;&amp;lt;&amp;nbsp;자전거&amp;nbsp;즐겨&amp;nbsp;찾기&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;블로그&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피기님 블로그 &lt;a title=&quot;피기님블로그바로가기&quot; href=&quot;https://blog.naver.com/piggybankm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.naver.com/piggybankm&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;유튜브 &lt;br /&gt;뿔난꼬냉이&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@angrycatgogo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@angrycatgogo&lt;/a&gt; &lt;br /&gt;장거리&amp;nbsp;라이딩&amp;nbsp;전문&amp;nbsp;보고&amp;nbsp;있으면&amp;nbsp;나도.... &lt;br /&gt;&lt;br /&gt;민댕_Mindy&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@mindy_cycling&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@mindy_cycling&lt;/a&gt;&amp;nbsp; &lt;br /&gt;자전거&amp;nbsp;여행&amp;nbsp;전문,&amp;nbsp;화면이&amp;nbsp;너무&amp;nbsp;이쁘다. &lt;br /&gt;&lt;br /&gt;인생초보&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@gowingo7123&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@gowingo7123&lt;/a&gt; &lt;br /&gt;서울&amp;nbsp;인근&amp;nbsp;라이딩은&amp;nbsp;거의&amp;nbsp;다&amp;nbsp;있다.&amp;nbsp;무엇보다&amp;nbsp;말이&amp;nbsp;톡톡&amp;nbsp;튐 &lt;br /&gt;&lt;br /&gt;드론&amp;nbsp;라이더:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@dronrider&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@dronrider&lt;/a&gt;&amp;nbsp; &lt;br /&gt;웃고&amp;nbsp;즐기자&amp;nbsp;로드 &lt;br /&gt;&lt;br /&gt;주영&amp;nbsp;사이클링&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@jycycling&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@jycycling&lt;/a&gt; &lt;br /&gt;재밌고,&amp;nbsp;유익하다.&amp;nbsp;인생은&amp;nbsp;라이딩이다. &lt;br /&gt;&lt;br /&gt;자전거개론&amp;nbsp;Bicycle101&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@bicycle1018&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@bicycle1018&lt;/a&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;드론 라이더 : &lt;a href=&quot;https://www.youtube.com/@dronrider&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@dronrider&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완전 웃김 개그 라이더 &lt;br /&gt;&lt;br /&gt;CYCLE&amp;nbsp;LAB&amp;nbsp;(사이클박사&amp;nbsp;박박사)&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/CYCLELABB&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/c/CYCLELABB&lt;/a&gt; &lt;br /&gt;로드(라이딩)&amp;nbsp;배움에&amp;nbsp;대한&amp;nbsp;유튜브,&amp;nbsp;이직&amp;nbsp;부족하지만,&amp;nbsp;&amp;nbsp;따라해&amp;nbsp;보면서&amp;nbsp;많인&amp;nbsp;배움&amp;nbsp; &lt;br /&gt;&lt;br /&gt;백만킬로&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@user-mj2jx5sp9g&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@user-mj2jx5sp9g&lt;/a&gt; &lt;br /&gt;로드(라이딩)&amp;nbsp;배움터&amp;nbsp; &lt;br /&gt;&lt;br /&gt;더더마&amp;nbsp;자전거tube&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@tube8204&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@tube8204&lt;/a&gt; &lt;br /&gt;덕분에&amp;nbsp;올해&amp;nbsp;뚜르드&amp;nbsp;프랑스&amp;nbsp;정말&amp;nbsp;즐감&amp;nbsp;!!!&amp;nbsp; &lt;br /&gt;로드(라이딩)&amp;nbsp;배움터&amp;nbsp; &lt;br /&gt;&lt;br /&gt;박예슬&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@aurora_yeseul&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@aurora_yeseul&lt;/a&gt; &lt;br /&gt;저녁&amp;nbsp;워킹머신&amp;nbsp;하면&amp;nbsp;&amp;nbsp;즐겨봄&amp;nbsp; &lt;br /&gt;&lt;br /&gt;로드타는예롱_YEPPI :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@yeah_road&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@yeah_road&lt;/a&gt;&lt;br /&gt;국토종주&amp;nbsp;찾아&amp;nbsp;찾아... &lt;br /&gt;&lt;br /&gt;유유자덕&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@uujaduck&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@uujaduck&lt;/a&gt; &lt;br /&gt;아재&amp;nbsp;라이더 &lt;br /&gt;&lt;br /&gt;모험왕별이&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@free_star&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@free_star&lt;/a&gt; &lt;br /&gt;최근엔&amp;nbsp;자전거보다는&amp;nbsp;다른게&amp;nbsp;많지만,&amp;nbsp;한때는&amp;nbsp;... &lt;br /&gt;&lt;br /&gt;Reality&amp;nbsp;Bike&amp;nbsp;Show&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@RealityBikeShow&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@RealityBikeShow&lt;/a&gt; &lt;br /&gt;요즘엔&amp;nbsp;드문&amp;nbsp;MTB&amp;nbsp;유튜브 &lt;br /&gt;&lt;br /&gt;Jose&amp;nbsp;Cycling&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@JoseCycling&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@JoseCycling&lt;/a&gt; &lt;br /&gt;Motivation&amp;nbsp;,&amp;nbsp;의욕충전&amp;nbsp;만땅용 &lt;br /&gt;&lt;br /&gt;권산TV&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@user-my8bt3vd7b&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@user-my8bt3vd7b&lt;/a&gt; &lt;br /&gt;코스&amp;nbsp;정말&amp;nbsp;많다&amp;nbsp;!!!&lt;/p&gt;
&lt;figure id=&quot;og_1669415107333&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;profile&quot; data-og-title=&quot;자전거개론 Bicycle101&quot; data-og-description=&quot;자전거에 대한 모든 정보를 일반적이고 쉽게 알아보는 자전거 개론. 영상에서 정보를 완전히 얻어가시려면 영상을 끝까지 보시고, 영상 아래 설명까지 비벼서 드시면 더욱 맛이 좋습니다. 라이&quot; data-og-host=&quot;www.youtube.com&quot; data-og-source-url=&quot;https://www.youtube.com/@bicycle1018&quot; data-og-url=&quot;https://www.youtube.com/channel/UC2wzZ4AgiBesXRldwv344bA&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bh0FdF/hyQGupC5rd/bXOkAIlfbaS5ZKL6GtHLX1/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900,https://scrap.kakaocdn.net/dn/liHh0/hyQHYP9SeM/PJ7UKh9nx38Zva7KJGety1/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900&quot;&gt;&lt;a href=&quot;https://www.youtube.com/@bicycle1018&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.youtube.com/@bicycle1018&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bh0FdF/hyQGupC5rd/bXOkAIlfbaS5ZKL6GtHLX1/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900,https://scrap.kakaocdn.net/dn/liHh0/hyQHYP9SeM/PJ7UKh9nx38Zva7KJGety1/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;자전거개론 Bicycle101&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;자전거에 대한 모든 정보를 일반적이고 쉽게 알아보는 자전거 개론. 영상에서 정보를 완전히 얻어가시려면 영상을 끝까지 보시고, 영상 아래 설명까지 비벼서 드시면 더욱 맛이 좋습니다. 라이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.youtube.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1669381507069&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;piggybankm님의 블로그 : 네이버 블로그&quot; data-og-description=&quot;자전거, 사이클링, 스키. 피기 블로그&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://blog.naver.com/piggybankm&quot; data-og-url=&quot;https://blog.naver.com/piggybankm&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/yx7BW/hyQH1stp1R/o9nXmArVVd59TGnEakzhu0/img.jpg?width=204&amp;amp;height=204&amp;amp;face=0_0_204_204&quot;&gt;&lt;a href=&quot;https://blog.naver.com/piggybankm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.naver.com/piggybankm&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/yx7BW/hyQH1stp1R/o9nXmArVVd59TGnEakzhu0/img.jpg?width=204&amp;amp;height=204&amp;amp;face=0_0_204_204');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;piggybankm님의 블로그 : 네이버 블로그&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;자전거, 사이클링, 스키. 피기 블로그&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>내친구자전거</category>
      <category>더더마 자전거tube</category>
      <category>로드타는예롱</category>
      <category>민댕_Mindy</category>
      <category>박예슬</category>
      <category>뿔난꼬냉이</category>
      <category>인생초보</category>
      <category>자전거</category>
      <category>자전거개론</category>
      <category>주영 사이클링</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/83</guid>
      <comments>https://darkturtle.tistory.com/83#entry83comment</comments>
      <pubDate>Fri, 25 Nov 2022 22:05:15 +0900</pubDate>
    </item>
    <item>
      <title>Oracle 접속, IP 로 접속 차단 하기</title>
      <link>https://darkturtle.tistory.com/82</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Oracle&amp;nbsp;접속,&amp;nbsp;IP&amp;nbsp;로&amp;nbsp;접속&amp;nbsp;차단&amp;nbsp;하기&amp;nbsp; &lt;br /&gt;&lt;br /&gt;출처&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://logic.edchen.org/how-to-make-a-blacklist-for-db-connection/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://logic.edchen.org/how-to-make-a-blacklist-for-db-connection/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;보안정책에&amp;nbsp;따라&amp;nbsp;정기적으로&amp;nbsp;패스워드&amp;nbsp;변경을&amp;nbsp;하고&amp;nbsp;있다 &lt;br /&gt;VDI&amp;nbsp;+&amp;nbsp;웹로직&amp;nbsp;+&amp;nbsp;오렌지&amp;nbsp;+&amp;nbsp;SQL&amp;nbsp;Developer&amp;nbsp;로&amp;nbsp;개발환경인데 &lt;br /&gt;장기&amp;nbsp;휴가자,&amp;nbsp;출산&amp;nbsp;휴가,&amp;nbsp;공용&amp;nbsp;PC&amp;nbsp;등의&amp;nbsp;VDI&amp;nbsp;의&amp;nbsp;웹로직에서&amp;nbsp;Connection&amp;nbsp;pool&amp;nbsp;비번&amp;nbsp;변경을&amp;nbsp;하지&amp;nbsp;않아서 &lt;br /&gt;비번&amp;nbsp;변경&amp;nbsp;후,&amp;nbsp;개발자(~DEV)계정이&amp;nbsp;LOCK&amp;nbsp;이&amp;nbsp;걸려서,&amp;nbsp;5분마다&amp;nbsp;체크&amp;nbsp;하여&amp;nbsp;UNLOCK&amp;nbsp;하고&amp;nbsp;있는데 &lt;br /&gt;근본적으로&amp;nbsp;비번&amp;nbsp;틀리는&amp;nbsp;IP에&amp;nbsp;대한&amp;nbsp;차단,&amp;nbsp;즉,&amp;nbsp;DB&amp;nbsp;접속&amp;nbsp;전&amp;nbsp;Lister&amp;nbsp;Level&amp;nbsp;에서&amp;nbsp;차단을&amp;nbsp;위한&amp;nbsp;Blacklist&amp;nbsp;Test&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1669293824211&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 정상접속 환경

[oracle@oel7 admin]$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 24-NOV-2022 21:28:08

Copyright (c) 1991, 2021, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oel7)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                24-NOV-2022 21:27:26
Uptime                    0 days 0 hr. 0 min. 41 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /ORA19/app/oracle/product/19.0.0/db_1/network/admin/listener.ora
Listener Log File         /ORA19/app/oracle/diag/tnslsnr/oel7/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oel7)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service &quot;oracle19&quot; has 1 instance(s).
  Instance &quot;oracle19&quot;, status READY, has 1 handler(s) for this service...
Service &quot;oracle19XDB&quot; has 1 instance(s).
  Instance &quot;oracle19&quot;, status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@oel7 admin]$



정상 접속 시, listenerlog 
[oracle@oel7 ~]$ tail -f /ORA19/app/oracle/diag/tnslsnr/oel7/listener/alert/log.xml
 
&amp;lt;msg time='2022-11-24T21:28:41.732+09:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='oel7'
 host_addr='192.168.137.50' pid='12707'&amp;gt;
 &amp;lt;txt&amp;gt;24-NOV-2022 21:28:41 * (CONNECT_DATA=(SERVICE_NAME=oracle19)(CID=(PROGRAM=C:\Program?Files??x86?\WareValley\Orange?for?ORACLE?4.0?DBA?Unicode\OrangeMainU.exe)(HOST=LAPTOP-0OKL4MTC)(USER=TGHOME))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.1)(PORT=58852)) * establish * oracle19 * 0
 &amp;lt;/txt&amp;gt;
&amp;lt;/msg&amp;gt;
&amp;lt;msg time='2022-11-24T21:28:42.477+09:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='oel7'
 host_addr='192.168.137.50' pid='12707'&amp;gt;
 &amp;lt;txt&amp;gt;24-NOV-2022 21:28:42 * service_update * oracle19 * 0
 &amp;lt;/txt&amp;gt;
&amp;lt;/msg&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1669293886783&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 접속차단 환경 
## 1) sqlnet.ora 수정 
[oracle@oel7 admin]$ cat sqlnet.ora
#sec_case_sensitive_logon = false
SQLNET.ALLOWED_LOGON_VERSION_SERVER=11

TCP.VALIDNODE_CHECKING=YES
TCP.EXCLUDED_NODES=(192.168.137.1,192.168.137.2)
[oracle@oel7 admin]$

## 2) sqlnet.ora 수정 후, listener 재기동

[oracle@oel7 admin]$ lsnrctl stop

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 24-NOV-2022 21:30:25

Copyright (c) 1991, 2021, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oel7)(PORT=1521)))
The command completed successfully
[oracle@oel7 admin]$ lsnrctl start

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 24-NOV-2022 21:30:28

Copyright (c) 1991, 2021, Oracle.  All rights reserved.

Starting /ORA19/app/oracle/product/19.0.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 19.0.0.0.0 - Production
System parameter file is /ORA19/app/oracle/product/19.0.0/db_1/network/admin/listener.ora
Log messages written to /ORA19/app/oracle/diag/tnslsnr/oel7/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oel7)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oel7)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                24-NOV-2022 21:30:28
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /ORA19/app/oracle/product/19.0.0/db_1/network/admin/listener.ora
Listener Log File         /ORA19/app/oracle/diag/tnslsnr/oel7/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oel7)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
[oracle@oel7 admin]$

## 3) dynamic listener 등록
SQL&amp;gt; alter system register ;

System altered.

SQL&amp;gt;


[oracle@oel7 admin]$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 24-NOV-2022 21:31:11

Copyright (c) 1991, 2021, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oel7)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                24-NOV-2022 21:30:28
Uptime                    0 days 0 hr. 0 min. 42 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /ORA19/app/oracle/product/19.0.0/db_1/network/admin/listener.ora
Listener Log File         /ORA19/app/oracle/diag/tnslsnr/oel7/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oel7)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service &quot;oracle19&quot; has 1 instance(s).
  Instance &quot;oracle19&quot;, status READY, has 1 handler(s) for this service...   &amp;lt;&amp;lt;&amp;lt;&amp;lt; service 등록 완료 
Service &quot;oracle19XDB&quot; has 1 instance(s).
  Instance &quot;oracle19&quot;, status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@oel7 admin]$

## 4) 접속 차단 ip 에서 접속 시도 시

## 5) Clinet 측, 메시지 
Orange 로 접속 시도 시 &amp;gt;&amp;gt; ORA-12537 : tns 연결이 종료되었습니다.

## 6) client 접속 시도 시, listener.log 정보 

C:\Users\TGHOME&amp;gt;

## listener 로그 ( Incoming connection from 192.168.137.1 rejected ) 
&amp;lt;msg time='2022-11-24T21:34:20.932+09:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='oel7'
 host_addr='192.168.137.50' pid='13017'&amp;gt;
 &amp;lt;txt&amp;gt;Incoming connection from 192.168.137.1 rejected
 &amp;lt;/txt&amp;gt;
&amp;lt;/msg&amp;gt;
&amp;lt;msg time='2022-11-24T21:34:20.932+09:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='oel7'
 host_addr='192.168.137.50' pid='13017'&amp;gt;
 &amp;lt;txt&amp;gt;24-NOV-2022 21:34:20 * 12546
 &amp;lt;/txt&amp;gt;
&amp;lt;/msg&amp;gt;
&amp;lt;msg time='2022-11-24T21:34:20.932+09:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='oel7'
 host_addr='192.168.137.50' pid='13017'&amp;gt;
 &amp;lt;txt&amp;gt;TNS-12546: TNS:permission denied
 TNS-12560: TNS:protocol adapter error
  TNS-00516: Permission denied

 &amp;lt;/txt&amp;gt;
&amp;lt;/msg&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1669293945469&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## Client측, tnsping  시도 &amp;gt;&amp;gt; 실패 ( TNS-12537: TNS:연결이 종료되었습니다 )

C:\app\client\TGHOME\product\12.2.0\client_1\network\admin&amp;gt;tnsping oracle19

TNS Ping Utility for 64-bit Windows: Version 21.0.0.0.0 - Production on 24-11월-2022 21:40:41

Copyright (c) 1997, 2021, Oracle.  All rights reserved.

사용된 매개변수 파일:
D:\21c\app\TGHOME\homes\OraDB21Home1\network\admin\sqlnet.ora


별칭 분석을 위해 TNSNAMES 어댑터 사용
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oel7)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = oracle19)))에 접속하려고 시도하는 중
TNS-12537: TNS:연결이 종료되었습니다

C:\app\client\TGHOME\product\12.2.0\client_1\network\admin&amp;gt;

## tsnping 시, listener.log 로그 정보 ( Incoming connection from 192.168.137.1 rejected )
&amp;lt;msg time='2022-11-24T21:41:16.003+09:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='oel7'
 host_addr='192.168.137.50' pid='13661'&amp;gt;
 &amp;lt;txt&amp;gt;Incoming connection from 192.168.137.1 rejected
 &amp;lt;/txt&amp;gt;
&amp;lt;/msg&amp;gt;
&amp;lt;msg time='2022-11-24T21:41:16.004+09:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='oel7'
 host_addr='192.168.137.50' pid='13661'&amp;gt;
 &amp;lt;txt&amp;gt;24-NOV-2022 21:41:16 * 12546
 &amp;lt;/txt&amp;gt;
&amp;lt;/msg&amp;gt;
&amp;lt;msg time='2022-11-24T21:41:16.004+09:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='oel7'
 host_addr='192.168.137.50' pid='13661'&amp;gt;
 &amp;lt;txt&amp;gt;TNS-12546: TNS:permission denied
 TNS-12560: TNS:protocol adapter error
  TNS-00516: Permission denied

 &amp;lt;/txt&amp;gt;
&amp;lt;/msg&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>blacklist</category>
      <category>connection</category>
      <category>ip</category>
      <category>oracle</category>
      <category>sqlnet.ora</category>
      <category>tcp</category>
      <category>차단</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/82</guid>
      <comments>https://darkturtle.tistory.com/82#entry82comment</comments>
      <pubDate>Thu, 24 Nov 2022 21:47:15 +0900</pubDate>
    </item>
    <item>
      <title>db source(pl/sql) backup</title>
      <link>https://darkturtle.tistory.com/81</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;db source(pl/sql) backup&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://logic.edchen.org/how-to-backup-pl-sql-codes-in-oracle/&quot;&gt;https://logic.edchen.org/how-to-backup-pl-sql-codes-in-oracle/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669285158094&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;How to Backup PL/SQL Codes in Oracle - Ed Chen Logic&quot; data-og-description=&quot;Backup Packages and Procedures Usually, source codes of programming unit should be version-controlled by the developer team. Mostly, they use Git, CVS or SVN to keep source codes in control. But if they have never carried out their job, we can also do it b&quot; data-og-host=&quot;logic.edchen.org&quot; data-og-source-url=&quot;https://logic.edchen.org/how-to-backup-pl-sql-codes-in-oracle/&quot; data-og-url=&quot;https://logic.edchen.org/how-to-backup-pl-sql-codes-in-oracle/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://logic.edchen.org/how-to-backup-pl-sql-codes-in-oracle/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://logic.edchen.org/how-to-backup-pl-sql-codes-in-oracle/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;How to Backup PL/SQL Codes in Oracle - Ed Chen Logic&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Backup Packages and Procedures Usually, source codes of programming unit should be version-controlled by the developer team. Mostly, they use Git, CVS or SVN to keep source codes in control. But if they have never carried out their job, we can also do it b&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;logic.edchen.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 형상 반영 하다보면, 가끔 소스를 원복해야 할일이 생긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스 관리는 개발자가 해야 겠지만, 급하게 원복을 위해서, OBJECT 별로 소스 백업을 받아보자 .&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 백업 대상은 PROCEDURE, FUNCTION, PACKAGE, TRIGGER 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Object 별로 SQL 로 보관하여, 소스 원복 시, 개별 원복 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1669285127243&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[oracle@oel7 source_backup]$ ls
getallcode.sql  getcode.sql  getSourceCodes.sh  scott
[oracle@oel7 source_backup]$ pwd
/home/oracle/source_backup
[oracle@oel7 source_backup]$ ls -al
total 16
drwxr-xr-x.  3 oracle oinstall   85 Nov 24 18:50 .
drwx------. 10 oracle oinstall 4096 Nov 24 18:50 ..
-rw-r--r--.  1 oracle oinstall  486 Nov 24 18:49 getallcode.sql
-rw-r--r--.  1 oracle oinstall  467 Nov 24 18:49 getcode.sql
-rw-r--r--.  1 oracle oinstall  379 Nov 24 18:48 getSourceCodes.sh
drwxr-xr-x.  3 oracle oinstall   22 Nov 24 18:49 scott
[oracle@oel7 source_backup]$ cat getSourceCodes.sh
#!/bin/bash
. ~/.bash_profile
USER=scott
PASSWD=tiger
BACKUP_DIR=/home/oracle/source_backup/$USER
BACKUP_DIR_TODAY=$BACKUP_DIR/`date +'%Y%m%d'`

mkdir -p $BACKUP_DIR_TODAY
cd $BACKUP_DIR_TODAY
ln -s ../../getcode.sql getcode.sql
ln -s ../../getallcode.sql getallcode.sql
sqlplus -s $USER/$PASSWD @getallcode.sql
find $BACKUP_DIR -type d -mtime +29 -name '20*' -exec rm -rf {} \;
[oracle@oel7 source_backup]$ cat getallcode.sql
et termout off
set heading off
set feedback off
set linesize 50
spool xtmpx.sql
select '@getcode ' || object_name
from dba_objects
where object_type in ( 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'TRIGGER' )
and owner ='SCOTT'
/
spool off
spool getallcode_INSTALL.sql
select '@' || object_name
from dba_objects
where object_type in ( 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'TRIGGER' )
and owner ='SCOTT'
/
spool off
set heading on
set feedback on
set linesize 130
set termout on
@xtmpx.sql
exit
[oracle@oel7 source_backup]$ cat getcode.sql
set feedback off
set heading off
set termout off
set linesize 1000
set trimspool on
set verify off
spool &amp;amp;1..sql
prompt set define off
select decode( type||'-'||to_char(line,'fm99999'),
'PACKAGE BODY-1', '/'||chr(10),
null) ||
decode(line,1,'create or replace ', '' ) ||
text text
from dba_source
where name = upper('&amp;amp;&amp;amp;1')
and   owner='SCOTT'
order by type, line;
prompt /
prompt set define on
spool off
set feedback on
set heading on
set termout on
set linesize 100
[oracle@oel7 source_backup]$ ls -al
total 16
drwxr-xr-x.  3 oracle oinstall   85 Nov 24 18:50 .
drwx------. 10 oracle oinstall 4096 Nov 24 18:50 ..
-rw-r--r--.  1 oracle oinstall  486 Nov 24 18:49 getallcode.sql
-rw-r--r--.  1 oracle oinstall  467 Nov 24 18:49 getcode.sql
-rw-r--r--.  1 oracle oinstall  379 Nov 24 18:48 getSourceCodes.sh
drwxr-xr-x.  3 oracle oinstall   22 Nov 24 18:49 scott
[oracle@oel7 source_backup]$ cd scott/2022*
[oracle@oel7 20221124]$ ls -al
total 40
drwxr-xr-x. 2 oracle oinstall 4096 Nov 24 18:49 .
drwxr-xr-x. 3 oracle oinstall   22 Nov 24 18:49 ..
-rw-r--r--. 1 oracle oinstall 2837 Nov 24 18:50 EMP_INFO.sql
-rw-r--r--. 1 oracle oinstall  354 Nov 24 18:50 FUNC_ADD_MONTHS.sql
-rw-r--r--. 1 oracle oinstall  113 Nov 24 18:50 getallcode_INSTALL.sql
lrwxrwxrwx. 1 oracle oinstall   20 Nov 24 18:49 getallcode.sql -&amp;gt; ../../getallcode.sql
lrwxrwxrwx. 1 oracle oinstall   17 Nov 24 18:49 getcode.sql -&amp;gt; ../../getcode.sql
-rw-r--r--. 1 oracle oinstall  297 Nov 24 18:50 TABLE_FUNC.sql
-rw-r--r--. 1 oracle oinstall  434 Nov 24 18:50 TEST_INTERIM2_TRG.sql
-rw-r--r--. 1 oracle oinstall  431 Nov 24 18:50 TEST_INTERIM_TRG.sql
-rw-r--r--. 1 oracle oinstall  192 Nov 24 18:50 TR_CHECK_TRIGGER_TABLE.sql
-rw-r--r--. 1 oracle oinstall  264 Nov 24 18:50 UPDATE_SAL.sql
-rw-r--r--. 1 oracle oinstall  169 Nov 24 18:50 xtmpx.sql
[oracle@oel7 20221124]$&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1669285471029&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- crontab 등록을 위해, 퍼미션 조정 
[oracle@oel7 source_backup]$ chmod 770 getSourceCodes.sh
[oracle@oel7 source_backup]$


-- 매일 아침 5시 11분 소스 백업 받도록 crontab 등록 
[oracle@oel7 source_backup]$ crontab -l
#Sample Code
#minute (0-59),
#|      hour (0-23),
#|      |       day of the month (1-31),
#|      |       |       month of the year (1-12),
#|      |       |       |       day of the week (0-6 with 0=Sunday).
#|      |       |       |       |       commands
#0      2       *       *       0,4     /etc/cron.d/logcheck
###################################################################################
# Backup SP Source
11 5 * * * //home/oracle/source_backup/getSourceCodes.sh &amp;gt;/dev/null 2&amp;gt;&amp;amp;1
[oracle@oel7 source_backup]$&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1669285287900&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 패키지 백업 결과 -- 한글이 깨지는게 아쉽지만, 우선 서비스부터 살리고 볼일이다.
[oracle@oel7 20221124]$ cat EMP_INFO.sql
set define off

create or replace PACKAGE emp_info AS

       PROCEDURE all_emp_info;   -- ?? ???  ?? ??

        PROCEDURE all_sal_info;   -- ?? ???  ?? ??

        -- ?? ???  ?? ??
        PROCEDURE dept_emp_info (v_deptno IN  NUMBER) ;

        -- ?? ???  ?? ??
        PROCEDURE dept_sal_info (v_deptno IN  NUMBER) ;

    END emp_info;

/
create or replace PACKAGE BODY emp_info AS


     -- ?? ???  ?? ??
     PROCEDURE all_emp_info
     IS

         CURSOR emp_cursor IS
         SELECT empno, ename, to_char(hiredate, 'RRRR/MM/DD') hiredate
         FROM emp
         ORDER BY hiredate;

     BEGIN

         FOR  aa  IN emp_cursor LOOP

             DBMS_OUTPUT.PUT_LINE('?? : ' || aa.empno);
             DBMS_OUTPUT.PUT_LINE('?? : ' || aa.ename);
             DBMS_OUTPUT.PUT_LINE('??? : ' || aa.hiredate);

         END LOOP;

         EXCEPTION
           WHEN OTHERS THEN
             DBMS_OUTPUT.PUT_LINE(SQLERRM||'?? ?? ');

     END all_emp_info;


     -- ?? ???  ?? ??
     PROCEDURE all_sal_info
     IS

         CURSOR emp_cursor IS
         SELECT round(avg(sal),3) avg_sal, max(sal) max_sal, min(sal) min_sal
         FROM emp;

     BEGIN

         FOR  aa  IN emp_cursor LOOP

             DBMS_OUTPUT.PUT_LINE('?????? : ' || aa.avg_sal);
             DBMS_OUTPUT.PUT_LINE('?????? : ' || aa.max_sal);
             DBMS_OUTPUT.PUT_LINE('?????? : ' || aa.min_sal);

         END LOOP;


         EXCEPTION
            WHEN OTHERS THEN
               DBMS_OUTPUT.PUT_LINE(SQLERRM||'?? ?? ');
     END all_sal_info;


     --?? ???  ?? ??
     PROCEDURE dept_emp_info (v_deptno IN  NUMBER)
     IS

         CURSOR emp_cursor IS
         SELECT empno, ename, to_char(hiredate, 'RRRR/MM/DD') hiredate
         FROM emp
         WHERE deptno = v_deptno
         ORDER BY hiredate;

     BEGIN

         FOR  aa  IN emp_cursor LOOP

             DBMS_OUTPUT.PUT_LINE('?? : ' || aa.empno);
             DBMS_OUTPUT.PUT_LINE('?? : ' || aa.ename);
             DBMS_OUTPUT.PUT_LINE('??? : ' || aa.hiredate);

         END LOOP;

        EXCEPTION
            WHEN OTHERS THEN
               DBMS_OUTPUT.PUT_LINE(SQLERRM||'?? ?? ');

     END dept_emp_info;


     --?? ???  ?? ??
     PROCEDURE dept_sal_info (v_deptno IN  NUMBER)
     IS

         CURSOR emp_cursor IS
         SELECT round(avg(sal),3) avg_sal, max(sal) max_sal, min(sal) min_sal
         FROM emp
         WHERE deptno = v_deptno;

     BEGIN

         FOR  aa  IN emp_cursor LOOP

             DBMS_OUTPUT.PUT_LINE('?????? : ' || aa.avg_sal);
             DBMS_OUTPUT.PUT_LINE('?????? : ' || aa.max_sal);
             DBMS_OUTPUT.PUT_LINE('?????? : ' || aa.min_sal);

         END LOOP;

         EXCEPTION
             WHEN OTHERS THEN
                DBMS_OUTPUT.PUT_LINE(SQLERRM||'?? ?? ');

     END dept_sal_info;

  END emp_info;
/
set define on
[oracle@oel7 20221124]$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>backup</category>
      <category>db source(pl/sql) backup</category>
      <category>oracle</category>
      <category>PL/SQL</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/81</guid>
      <comments>https://darkturtle.tistory.com/81#entry81comment</comments>
      <pubDate>Thu, 24 Nov 2022 19:21:54 +0900</pubDate>
    </item>
    <item>
      <title>Why &amp;quot;_SYSTEM_TRIG_ENABLED=FALSE&amp;quot; needs to be set when Upgrading / Downgrading / Applying Patch Sets (문서 ID 149948.1)</title>
      <link>https://darkturtle.tistory.com/80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Why&amp;nbsp;&quot;_SYSTEM_TRIG_ENABLED=FALSE&quot;&amp;nbsp;needs&amp;nbsp;to&amp;nbsp;be&amp;nbsp;set&amp;nbsp;when&amp;nbsp;Upgrading&amp;nbsp;/&amp;nbsp;Downgrading&amp;nbsp;/&amp;nbsp;Applying&amp;nbsp;Patch&amp;nbsp;Sets&amp;nbsp;(문서&amp;nbsp;ID&amp;nbsp;149948.1) &lt;br /&gt;&lt;br /&gt;12c-&amp;gt;19c&amp;nbsp;Upgrade&amp;nbsp;하면서,&amp;nbsp;형상관리&amp;nbsp;이력을&amp;nbsp;위한&amp;nbsp;DDL&amp;nbsp;Trigger&amp;nbsp;로&amp;nbsp;오류&amp;nbsp;발생,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 사전에 설정한 flashback 설정으로,&amp;nbsp; flashback database 로 원복 하고 다시 업그레이드&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 이력이 있는데, 왜 (DDL) Trigger 를 disable 해야 하는지 설명하는 내용이 있다. &lt;br /&gt;아쉬운건&amp;nbsp;업그레이드나&amp;nbsp;이런&amp;nbsp;경우,&amp;nbsp;내부적으로&amp;nbsp;다이나믹&amp;nbsp;하게&amp;nbsp;disable&amp;nbsp;한다고&amp;nbsp;하는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;,&amp;nbsp;말&amp;nbsp;그대로&amp;nbsp;시스템&amp;nbsp;트리거만&amp;nbsp;disalbe&amp;nbsp;하는&amp;nbsp;듯&amp;nbsp;싶다. &lt;br /&gt;문제가&amp;nbsp;된&amp;nbsp;트리거는&amp;nbsp;일반&amp;nbsp;유저의&amp;nbsp;시스템&amp;nbsp;레벨&amp;nbsp;DDL&amp;nbsp;TRIGGER&amp;nbsp;였다. &lt;br /&gt;&lt;b&gt;&amp;gt;&amp;gt;&amp;nbsp;체크&amp;nbsp;결과,히든&amp;nbsp;파라미터로&amp;nbsp;SYSTEM&amp;nbsp;TRIGGER&amp;nbsp;를&amp;nbsp;FALSE&amp;nbsp;로&amp;nbsp;하여도&amp;nbsp;일반&amp;nbsp;유저&amp;nbsp;TRIGGER&amp;nbsp;는&amp;nbsp;정상&amp;nbsp;작동&amp;nbsp;함&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&quot;The&amp;nbsp;parameter&amp;nbsp;should&amp;nbsp;be&amp;nbsp;set&amp;nbsp;to&amp;nbsp;FALSE&amp;nbsp;for&amp;nbsp;scripts&amp;nbsp;which&amp;nbsp;perform&amp;nbsp;dictionary&amp;nbsp;operations&amp;nbsp;as&amp;nbsp;the&amp;nbsp;objects&amp;nbsp;on&amp;nbsp;which&amp;nbsp;the&amp;nbsp;triggers&amp;nbsp;depend&amp;nbsp; &lt;br /&gt;may&amp;nbsp;become&amp;nbsp;&amp;nbsp;&amp;nbsp;invalid&amp;nbsp;or&amp;nbsp;be&amp;nbsp;dropped,&amp;nbsp;causing&amp;nbsp;the&amp;nbsp;triggers&amp;nbsp;to&amp;nbsp;fail&amp;nbsp;and&amp;nbsp;thus&amp;nbsp;preventing&amp;nbsp;the&amp;nbsp;scripts&amp;nbsp;from&amp;nbsp;running&amp;nbsp;successfully.&amp;nbsp;Some&amp;nbsp;examples&amp;nbsp;are&amp;nbsp;given&amp;nbsp;below.&quot; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Versions&amp;nbsp;&amp;amp;&amp;nbsp;Platforms&amp;nbsp;Affected&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;o&amp;nbsp;The&amp;nbsp;information&amp;nbsp;here&amp;nbsp;applies&amp;nbsp;to&amp;nbsp;Oracle&amp;nbsp;8i,&amp;nbsp;Oracle&amp;nbsp;9i,&amp;nbsp;and&amp;nbsp;Oracle&amp;nbsp;10g&amp;nbsp;on&amp;nbsp;all&amp;nbsp;platforms. &lt;br /&gt;&amp;nbsp;&amp;nbsp;o&amp;nbsp;It&amp;nbsp;does&amp;nbsp;NOT&amp;nbsp;apply&amp;nbsp;to&amp;nbsp;Oracle8.0&amp;nbsp;or&amp;nbsp;Oracle7&amp;nbsp;databases&amp;nbsp;UNLESS&amp;nbsp;they&amp;nbsp;are&amp;nbsp;being&amp;nbsp;upgraded&amp;nbsp;/&amp;nbsp;migrated&amp;nbsp;to&amp;nbsp;an&amp;nbsp;Oracle8i&amp;nbsp;or&amp;nbsp;9i&amp;nbsp;release&amp;nbsp;or&amp;nbsp;later. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;b&gt;Description&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;When&amp;nbsp;performing&amp;nbsp;any&amp;nbsp;of&amp;nbsp;the&amp;nbsp;following&amp;nbsp;actions&amp;nbsp;on&amp;nbsp;an&amp;nbsp;Oracle&amp;nbsp;database: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o&amp;nbsp;Installing&amp;nbsp;a&amp;nbsp;patch&amp;nbsp;set &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o&amp;nbsp;Upgrading &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o&amp;nbsp;Downgrading &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o&amp;nbsp;Performing&amp;nbsp;any&amp;nbsp;other&amp;nbsp;operation&amp;nbsp;which&amp;nbsp;requires&amp;nbsp;catalog&amp;nbsp;or&amp;nbsp;catproc&amp;nbsp;to&amp;nbsp;be&amp;nbsp;run&amp;nbsp;(Except&amp;nbsp;when&amp;nbsp;we&amp;nbsp;create&amp;nbsp;a&amp;nbsp;DB&amp;nbsp;in&amp;nbsp;8i&amp;nbsp;/&amp;nbsp;9i) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o&amp;nbsp;Installing&amp;nbsp;Java&amp;nbsp;(initjvm) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o&amp;nbsp;Any&amp;nbsp;other&amp;nbsp;action&amp;nbsp;which&amp;nbsp;runs&amp;nbsp;scripts&amp;nbsp;which&amp;nbsp;modify&amp;nbsp;objects&amp;nbsp;owned&amp;nbsp;by&amp;nbsp;SYS &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;then&amp;nbsp;you&amp;nbsp;should&amp;nbsp;set&amp;nbsp;the&amp;nbsp;hidden&amp;nbsp;init.ora&amp;nbsp;parameter&amp;nbsp;_SYSTEM_TRIG_ENABLED&amp;nbsp;to&amp;nbsp;FALSE&amp;nbsp;before&amp;nbsp;starting&amp;nbsp;the&amp;nbsp;instance&amp;nbsp;under&amp;nbsp;Oracle8i&amp;nbsp;(or&amp;nbsp;9i)&amp;nbsp;to&amp;nbsp;perform&amp;nbsp;the &lt;br /&gt;&amp;nbsp;&amp;nbsp;respective&amp;nbsp;maintenance&amp;nbsp;operation&amp;nbsp;unless&amp;nbsp;the&amp;nbsp;steps&amp;nbsp;you&amp;nbsp;are&amp;nbsp;following&amp;nbsp;advise&amp;nbsp;otherwise. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Eg:&amp;nbsp;In&amp;nbsp;Oracle8i&amp;nbsp;add&amp;nbsp;the&amp;nbsp;lines&amp;nbsp;below&amp;nbsp;to&amp;nbsp;the&amp;nbsp;init.ora&amp;nbsp;file&amp;nbsp;used&amp;nbsp;to&amp;nbsp;start&amp;nbsp;the&amp;nbsp;instance&amp;nbsp;then&amp;nbsp;stop&amp;nbsp;and&amp;nbsp;restart&amp;nbsp;the&amp;nbsp;instance&amp;nbsp;before&amp;nbsp;performing&amp;nbsp;the &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;maintenance&amp;nbsp;actions. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;Disable&amp;nbsp;system&amp;nbsp;triggers&amp;nbsp;for&amp;nbsp;the&amp;nbsp;duration&amp;nbsp;of&amp;nbsp;the&amp;nbsp;maintenance &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;operation. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_SYSTEM_TRIG_ENABLED=FALSE &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;IMPORTANT:&amp;nbsp;This&amp;nbsp;parameter&amp;nbsp;must&amp;nbsp;be&amp;nbsp;commented&amp;nbsp;out&amp;nbsp;and&amp;nbsp;the&amp;nbsp;instance&amp;nbsp;re-started&amp;nbsp;once&amp;nbsp;the&amp;nbsp;required&amp;nbsp;maintenance&amp;nbsp;operations&amp;nbsp;have&amp;nbsp;been&amp;nbsp;performed. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Oracle9i&amp;nbsp;and&amp;nbsp;later&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;Most&amp;nbsp;Oracle9i&amp;nbsp;scripts&amp;nbsp;include&amp;nbsp;statements&amp;nbsp;to&amp;nbsp;dynamically&amp;nbsp;set&amp;nbsp;_SYSTEM_TRIG_ENABLED&amp;nbsp;to&amp;nbsp;FALSE&amp;nbsp;when&amp;nbsp;required. &lt;br /&gt;&amp;nbsp;&amp;nbsp;However&amp;nbsp;it&amp;nbsp;is&amp;nbsp;possible&amp;nbsp;that&amp;nbsp;some&amp;nbsp;scripts&amp;nbsp;have&amp;nbsp;omitted&amp;nbsp;this&amp;nbsp;step&amp;nbsp;so&amp;nbsp;it&amp;nbsp;is&amp;nbsp;still&amp;nbsp;advisable&amp;nbsp;to&amp;nbsp;set&amp;nbsp;this&amp;nbsp;to&amp;nbsp;FALSE. &lt;br /&gt;&amp;nbsp;&amp;nbsp;You&amp;nbsp;can&amp;nbsp;do&amp;nbsp;this&amp;nbsp;in&amp;nbsp;Oracle9i&amp;nbsp;using&amp;nbsp;the&amp;nbsp;command: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ALTER&amp;nbsp;SYSTEM&amp;nbsp;SET&amp;nbsp;&quot;_system_trig_enabled&quot;=FALSE; &lt;br /&gt;&amp;nbsp;&amp;nbsp;Once&amp;nbsp;the&amp;nbsp;required&amp;nbsp;steps&amp;nbsp;are&amp;nbsp;complete&amp;nbsp;you&amp;nbsp;can&amp;nbsp;reenable&amp;nbsp;triggers&amp;nbsp;thus: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ALTER&amp;nbsp;SYSTEM&amp;nbsp;SET&amp;nbsp;&quot;_system_trig_enabled&quot;=TRUE; &lt;br /&gt;&amp;nbsp;&amp;nbsp;If&amp;nbsp;you&amp;nbsp;are&amp;nbsp;using&amp;nbsp;an&amp;nbsp;init.ora&amp;nbsp;file&amp;nbsp;(rather&amp;nbsp;than&amp;nbsp;an&amp;nbsp;SPFILE)&amp;nbsp;then&amp;nbsp;the&amp;nbsp;parameter&amp;nbsp;can&amp;nbsp;also&amp;nbsp;be&amp;nbsp;set&amp;nbsp;there&amp;nbsp;as&amp;nbsp;described&amp;nbsp;above. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Explanation&lt;/b&gt; &lt;br /&gt;&amp;nbsp;What&amp;nbsp;does&amp;nbsp;_SYSTEM_TRIG_ENABLED&amp;nbsp;do&amp;nbsp;? &lt;br /&gt;&amp;nbsp;&amp;nbsp;This&amp;nbsp;hidden&amp;nbsp;parameter&amp;nbsp;is&amp;nbsp;described&amp;nbsp;in&amp;nbsp;Note:68636.1. &lt;br /&gt;&amp;nbsp;&amp;nbsp;A&amp;nbsp;value&amp;nbsp;of&amp;nbsp;FALSE&amp;nbsp;stops&amp;nbsp;system&amp;nbsp;triggers&amp;nbsp;from&amp;nbsp;firing&amp;nbsp;(eg:&amp;nbsp;triggers&amp;nbsp;on&amp;nbsp;various&amp;nbsp;DDL&amp;nbsp;or&amp;nbsp;database&amp;nbsp;events&amp;nbsp;are&amp;nbsp;disabled). &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;b&gt;Why&amp;nbsp;should&amp;nbsp;it&amp;nbsp;be&amp;nbsp;set&amp;nbsp;to&amp;nbsp;false&amp;nbsp;?&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;The&amp;nbsp;parameter&amp;nbsp;should&amp;nbsp;be&amp;nbsp;set&amp;nbsp;to&amp;nbsp;FALSE&amp;nbsp;for&amp;nbsp;scripts&amp;nbsp;which&amp;nbsp;perform&amp;nbsp;dictionary&amp;nbsp;operations&amp;nbsp;as&amp;nbsp;the&amp;nbsp;objects&amp;nbsp;on&amp;nbsp;which&amp;nbsp;the&amp;nbsp;triggers&amp;nbsp;depend&amp;nbsp;may&amp;nbsp;become &lt;br /&gt;&amp;nbsp;&amp;nbsp;invalid&amp;nbsp;or&amp;nbsp;be&amp;nbsp;dropped,&amp;nbsp;causing&amp;nbsp;the&amp;nbsp;triggers&amp;nbsp;to&amp;nbsp;fail&amp;nbsp;and&amp;nbsp;thus&amp;nbsp;preventing&amp;nbsp;the&amp;nbsp;scripts&amp;nbsp;from&amp;nbsp;running&amp;nbsp;successfully.&amp;nbsp;Some&amp;nbsp;examples&amp;nbsp;are&amp;nbsp;given&amp;nbsp;below. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example&amp;nbsp;Problem&amp;nbsp;Scenarios&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;There&amp;nbsp;are&amp;nbsp;many&amp;nbsp;potential&amp;nbsp;problem&amp;nbsp;scenarios&amp;nbsp;if&amp;nbsp;you&amp;nbsp;have&amp;nbsp;system&amp;nbsp;triggers&amp;nbsp;in&amp;nbsp;place&amp;nbsp;when&amp;nbsp;performing&amp;nbsp;dictionary&amp;nbsp;maintenance&amp;nbsp;operations. &lt;br /&gt;&amp;nbsp;&amp;nbsp;Some&amp;nbsp;of&amp;nbsp;the&amp;nbsp;more&amp;nbsp;common&amp;nbsp;symptoms&amp;nbsp;are&amp;nbsp;described&amp;nbsp;below. &lt;br /&gt;&amp;nbsp;&amp;nbsp;In&amp;nbsp;most&amp;nbsp;cases&amp;nbsp;setting&amp;nbsp;_SYSTEM_TRIG_ENABLED=FALSE&amp;nbsp;and&amp;nbsp;re-performing&amp;nbsp;the&amp;nbsp;operation&amp;nbsp;will&amp;nbsp;allow&amp;nbsp;you&amp;nbsp;to&amp;nbsp;proceed. &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;b&gt;Q: ALL TRIGGER DISABLE ? 혹은 USER TRIGGER 는 예외 ?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; User Trigger 는 제외!!!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;pre id=&quot;code_1669206152530&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create table master_table  ( a1 date, a2 varchar2(200) ) ;
create table trigger_table ( a1 date, a2 varchar2(200) ) ;

create or replace trigger tr_check_trigger_table
after insert on master_table
for each row 
begin 
insert into trigger_table values ( :new.a1, :new.a2 ) ;

end ; 

select OWNER, TRIGGER_NAME, TRIGGER_TYPE, TRIGGERING_EVENT, STATUS
from dba_triggers where trigger_name =UPPER('tr_check_trigger_table');

select a.ksppinm &quot;Parameter&quot;, c.ksppstvl &quot;Instance Value&quot;, ksppdesc &quot;Desc&quot;
from sys.x$ksppi a, sys.x$ksppcv b, sys.x$ksppsv c
where a.indx = b.indx and a.indx = c.indx
and substr(ksppinm,1,1)='_'
and a.ksppinm in ('_system_trig_enabled');


INSERT INTO master_table VALUES ( SYSDATE, TO_CHAR(SYSDATE) ) ;
COMMIT ;

SELECT * FROM master_table ;
SELECT * FROM trigger_table ;

alter system set &quot;_system_trig_enabled&quot; = false scope=memory;

select a.ksppinm &quot;Parameter&quot;, c.ksppstvl &quot;Instance Value&quot;, ksppdesc &quot;Desc&quot;
from sys.x$ksppi a, sys.x$ksppcv b, sys.x$ksppsv c
where a.indx = b.indx and a.indx = c.indx
and substr(ksppinm,1,1)='_'
and a.ksppinm in ('_system_trig_enabled');


INSERT INTO master_table VALUES ( SYSDATE, TO_CHAR(SYSDATE) ) ;
COMMIT ;

SELECT * FROM master_table ;
SELECT * FROM trigger_table ;
&amp;gt;&amp;gt; 정상 작동 확인됨 !!!

alter system set &quot;c&quot; = true scope=memory;

select a.ksppinm &quot;Parameter&quot;, c.ksppstvl &quot;Instance Value&quot;, ksppdesc &quot;Desc&quot;
from sys.x$ksppi a, sys.x$ksppcv b, sys.x$ksppsv c
where a.indx = b.indx and a.indx = c.indx
and substr(ksppinm,1,1)='_'
and a.ksppinm in ('_system_trig_enabled');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>disable</category>
      <category>Enable</category>
      <category>oracle</category>
      <category>System</category>
      <category>trigger</category>
      <category>_SYSTEM_TRIG_ENABLED</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/80</guid>
      <comments>https://darkturtle.tistory.com/80#entry80comment</comments>
      <pubDate>Wed, 23 Nov 2022 21:23:43 +0900</pubDate>
    </item>
    <item>
      <title>SMCO, &amp;quot;_kttext_warning&amp;quot;, _max_spacebg_slaves&amp;quot;</title>
      <link>https://darkturtle.tistory.com/78</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;A.&amp;nbsp;잦은&amp;nbsp;Resize&amp;nbsp;Datafile&amp;nbsp;이슈&amp;nbsp;(&amp;nbsp;약&amp;nbsp;2&amp;nbsp;TB&amp;nbsp;증가함&amp;nbsp;)&amp;nbsp; &lt;br /&gt;가. 12c-&amp;gt; 19c Upgrade 이후, 잦은 Resize Datafile 이슈 ( 약 2 TB 증가함 )&amp;nbsp; &lt;br /&gt;&lt;br /&gt;나. 조치&amp;nbsp;내용&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;SMCO&amp;nbsp;(Space&amp;nbsp;Management&amp;nbsp;Coordinator)&amp;nbsp;background&amp;nbsp;가&amp;nbsp;과도하게&amp;nbsp;Resize&amp;nbsp;한&amp;nbsp;결과로&amp;nbsp;파악&amp;nbsp;되어, &lt;br /&gt;&amp;nbsp;&amp;nbsp;SQL&amp;gt;&amp;nbsp;alter&amp;nbsp;system&amp;nbsp;set&amp;nbsp;&quot;_kttext_warning&quot;=2&amp;nbsp;scope=both&amp;nbsp;; &lt;br /&gt;&lt;br /&gt;다. 참고&amp;nbsp; &lt;br /&gt;SMCO&amp;nbsp;(Space&amp;nbsp;Management&amp;nbsp;Coordinator)&amp;nbsp;For&amp;nbsp;Autoextend&amp;nbsp;On&amp;nbsp;Datafiles&amp;nbsp;And&amp;nbsp;How&amp;nbsp;To&amp;nbsp;Disable/Enable(문서&amp;nbsp;ID&amp;nbsp;743773.1) &lt;br /&gt;AUTOEXTEND&amp;nbsp;Grows&amp;nbsp;To&amp;nbsp;Full&amp;nbsp;Size&amp;nbsp;Without&amp;nbsp;Reason&amp;nbsp;(문서&amp;nbsp;ID&amp;nbsp;1459097.1) &lt;br /&gt;&lt;br /&gt;B. 12c Patch 반영 후, RAC Interconnect N/W&amp;nbsp; &lt;br /&gt;가.&amp;nbsp;12c&amp;nbsp;패치&amp;nbsp;후,&amp;nbsp;interconnect&amp;nbsp;n/w&amp;nbsp;이&amp;nbsp;급격히&amp;nbsp;증가하여&amp;nbsp;Peak&amp;nbsp;Time&amp;nbsp;DB&amp;nbsp;성능&amp;nbsp;저하&amp;nbsp;발생&amp;nbsp; &lt;br /&gt;Default&amp;nbsp;값은&amp;nbsp;1024라,&amp;nbsp;2&amp;nbsp;Node&amp;nbsp;RAC&amp;nbsp;에서,&amp;nbsp;120개&amp;nbsp;이상&amp;nbsp;세션이&amp;nbsp;발생&amp;nbsp;하고,&amp;nbsp;Node&amp;nbsp;간&amp;nbsp;통신으로&amp;nbsp;Interconnect&amp;nbsp;N/W&amp;nbsp;성능&amp;nbsp;저하&amp;nbsp;발생&amp;nbsp; &lt;br /&gt;&lt;br /&gt;나.&amp;nbsp;조치&amp;nbsp;내요&amp;nbsp; &lt;br /&gt;아래와&amp;nbsp;같이&amp;nbsp;히든&amp;nbsp;파라미터&amp;nbsp;조정&amp;nbsp;하여&amp;nbsp;이슈&amp;nbsp;해결&amp;nbsp;+&amp;nbsp;10G&amp;nbsp;interconnect&amp;nbsp;증설&amp;nbsp;함&amp;nbsp; &lt;br /&gt;&lt;br /&gt;다.&amp;nbsp;참고&amp;nbsp; &lt;br /&gt;SMCO&amp;nbsp;&amp;nbsp;관련&amp;nbsp;파라미터&amp;nbsp;&quot;_max_spacebg_slaves&quot;&amp;nbsp;와&amp;nbsp;&quot;_kttext_warning&quot;&amp;nbsp;은&amp;nbsp;연관&amp;nbsp;관계가&amp;nbsp;있음&amp;nbsp; &lt;br /&gt;ALTER&amp;nbsp;SYSTEM&amp;nbsp;SET&amp;nbsp;_max_spacebg_slaves&amp;nbsp;=&amp;nbsp;10&amp;nbsp;scope=both&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;SMCO 는 segment 증가 시, datafile 에 space 용량 요청 전에 Oracle DBMS가 space 요청 trend 를 미리저장 해두었다가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;segment 증가 시, 요청 전에 미리 미리 datafile resize 해서 늘려두는 방식을 말하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;53 TB 에서 하루에 2TB 정도 Datafile 이 resize 되어 ASM LEVEL 에서 용량이 부족해지는현상이 발생함&amp;nbsp;&lt;br /&gt;&lt;br /&gt;select&amp;nbsp;a.ksppinm&amp;nbsp;&quot;Parameter&quot;,&amp;nbsp;c.ksppstvl&amp;nbsp;&quot;Instance&amp;nbsp;Value&quot;,&amp;nbsp;ksppdesc&amp;nbsp;&quot;Desc&quot; &lt;br /&gt;from&amp;nbsp;sys.x$ksppi&amp;nbsp;a,&amp;nbsp;sys.x$ksppcv&amp;nbsp;b,&amp;nbsp;sys.x$ksppsv&amp;nbsp;c &lt;br /&gt;where&amp;nbsp;a.indx&amp;nbsp;=&amp;nbsp;b.indx&amp;nbsp;and&amp;nbsp;a.indx&amp;nbsp;=&amp;nbsp;c.indx &lt;br /&gt;and&amp;nbsp;substr(ksppinm,1,1)='_' &lt;br /&gt;and&amp;nbsp;a.ksppinm&amp;nbsp;in&amp;nbsp;('_max_spacebg_slaves');&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>&amp;quot;_kttext_warning&amp;quot;</category>
      <category>SmCo</category>
      <category>_max_spacebg_slaves&amp;quot;</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/78</guid>
      <comments>https://darkturtle.tistory.com/78#entry78comment</comments>
      <pubDate>Sun, 20 Nov 2022 20:15:46 +0900</pubDate>
    </item>
    <item>
      <title>Hang Manager(HM)</title>
      <link>https://darkturtle.tistory.com/76</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Oracle SR 진행 및 구글링 결과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 실시간 혹은 지난 시간에대한 hang 발생 시, 바로 확인 가능&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. v$session 에 FINAL_BLOCKING_SESSION 을 통해서도 확인 가능 할듯 (11g 부터 지원 된다고함 )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;Hang&amp;nbsp;Manager(HM)&amp;nbsp;Phases &lt;br /&gt;HM은&amp;nbsp;각&amp;nbsp;Instance의&amp;nbsp;DIA0&amp;nbsp;process에서&amp;nbsp;실행되며,&amp;nbsp;HM&amp;nbsp;Operation은&amp;nbsp;크게&amp;nbsp;5&amp;nbsp;Phase로&amp;nbsp;구분됩니다. &lt;br /&gt;DETECT&amp;nbsp;Phase&amp;nbsp;-&amp;gt;&amp;nbsp;HA&amp;nbsp;(Global&amp;nbsp;Hang&amp;nbsp;Analyze)&amp;nbsp;Phase&amp;nbsp;-&amp;gt;&amp;nbsp;ANALYZE&amp;nbsp;Phase&amp;nbsp;-&amp;gt;&amp;nbsp;VERIFY&amp;nbsp;Phase&amp;nbsp; &lt;br /&gt;-&amp;gt;&amp;nbsp;VICTIM(victim&amp;nbsp;selection&amp;nbsp;and&amp;nbsp;hang&amp;nbsp;resolution)&amp;nbsp;Phase &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;Hang&amp;nbsp;가능성이&amp;nbsp;있는&amp;nbsp;Session을&amp;nbsp;각각의&amp;nbsp;Local&amp;nbsp;Instance&amp;nbsp;Session에서&amp;nbsp;scan&amp;nbsp;(Interval은&amp;nbsp;대략&amp;nbsp;30초&amp;nbsp;정도) &lt;br /&gt;-&amp;nbsp;이러한&amp;nbsp;Local&amp;nbsp;Hang&amp;nbsp;정보를&amp;nbsp;HA단계에서&amp;nbsp;취합하여&amp;nbsp;전체적인&amp;nbsp;Hang&amp;nbsp;tree&amp;nbsp;및&amp;nbsp;root&amp;nbsp;hang&amp;nbsp;session을&amp;nbsp;분석&amp;nbsp;합니다. &lt;br /&gt;-&amp;nbsp;이후&amp;nbsp;verify&amp;nbsp;단계를&amp;nbsp;거처&amp;nbsp;해당&amp;nbsp;process&amp;nbsp;또는&amp;nbsp;Instance를&amp;nbsp;terminate&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;Hang&amp;nbsp;Manager(HM)&amp;nbsp;파라미터&amp;nbsp; &lt;br /&gt;_hang_resolution_scope&amp;nbsp;=&amp;nbsp;PROCESS|INSTANCE|OFF&amp;nbsp;[PROCESS&amp;nbsp;가&amp;nbsp;DEFAULT&amp;nbsp;]&amp;nbsp; &lt;br /&gt;&lt;br /&gt;select&amp;nbsp;a.ksppinm&amp;nbsp;&quot;Parameter&quot;,&amp;nbsp;c.ksppstvl&amp;nbsp;&quot;Instance&amp;nbsp;Value&quot;,&amp;nbsp;ksppdesc&amp;nbsp;&quot;Desc&quot; &lt;br /&gt;from&amp;nbsp;sys.x$ksppi&amp;nbsp;a,&amp;nbsp;sys.x$ksppcv&amp;nbsp;b,&amp;nbsp;sys.x$ksppsv&amp;nbsp;c &lt;br /&gt;where&amp;nbsp;a.indx&amp;nbsp;=&amp;nbsp;b.indx&amp;nbsp;and&amp;nbsp;a.indx&amp;nbsp;=&amp;nbsp;c.indx &lt;br /&gt;and&amp;nbsp;substr(ksppinm,1,1)='_' &lt;br /&gt;and&amp;nbsp;a.ksppinm&amp;nbsp;in&amp;nbsp;('_hang_resolution_scope'); &lt;br /&gt;&lt;br /&gt;--&amp;nbsp;현재&amp;nbsp;상태&amp;nbsp;및&amp;nbsp;spfile&amp;nbsp;적용&amp;nbsp;할&amp;nbsp;겅우 &lt;br /&gt;alter&amp;nbsp;system&amp;nbsp;set&amp;nbsp;&quot;_hang_resolution_scope&quot;=OFF&amp;nbsp;scope=both&amp;nbsp;sid='*'; &lt;br /&gt;&lt;br /&gt;--&amp;nbsp;현재&amp;nbsp;상태만&amp;nbsp;변경&amp;nbsp;할&amp;nbsp;겅우 &lt;br /&gt;alter&amp;nbsp;system&amp;nbsp;set&amp;nbsp;&quot;_hang_resolution_scope&quot;=OFF&amp;nbsp;scope=memory&amp;nbsp;sid='*'; &lt;br /&gt;&lt;br /&gt;--&amp;nbsp;rollback &lt;br /&gt;alter&amp;nbsp;system&amp;nbsp;set&amp;nbsp;&quot;_hang_resolution_scope&quot;=INSTANCE&amp;nbsp;scope=both&amp;nbsp;sid='*'; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;참고&amp;nbsp;사항&amp;nbsp; &lt;br /&gt;1.&amp;nbsp;DB&amp;nbsp;및&amp;nbsp;ASM&amp;nbsp;LEVEL&amp;nbsp;설정&amp;nbsp;가능&amp;nbsp; &lt;br /&gt;2.&amp;nbsp;RAC&amp;nbsp;에서만&amp;nbsp;작동함&amp;nbsp;[&amp;nbsp;CLUSTER_DATABASE&amp;nbsp;=&amp;nbsp;TRUE,&amp;nbsp;Single&amp;nbsp;에서&amp;nbsp;도&amp;nbsp;Trace&amp;nbsp;가&amp;nbsp;떨어짐&amp;nbsp;]&amp;nbsp; &lt;br /&gt;3.&amp;nbsp;User&amp;nbsp;Process&amp;nbsp;에&amp;nbsp;대해서는&amp;nbsp;작동&amp;nbsp;하지&amp;nbsp;않음&amp;nbsp; &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp; &lt;br /&gt;참고&amp;nbsp;링크 &lt;br /&gt;&lt;a href=&quot;http://orclbykuber.blogspot.com/2016/01/oracle-hang-management.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://orclbykuber.blogspot.com/2016/01/oracle-hang-management.html&lt;/a&gt; &lt;br /&gt;http://mydbspace.com/?p=100 &lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;관련&amp;nbsp;파일 &lt;br /&gt;bdump&amp;nbsp;에서 &lt;br /&gt;tail&amp;nbsp;-f&amp;nbsp;`ls&amp;nbsp;-lrt&amp;nbsp;*dia*base*.trc&amp;nbsp;|&amp;nbsp;tail&amp;nbsp;-n&amp;nbsp;1&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;'{print&amp;nbsp;$9}'` &lt;br /&gt;vi&amp;nbsp;`ls&amp;nbsp;-lrt&amp;nbsp;*dia*base*.trc&amp;nbsp;|&amp;nbsp;tail&amp;nbsp;-n&amp;nbsp;1&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;'{print&amp;nbsp;$9}'` &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/76</guid>
      <comments>https://darkturtle.tistory.com/76#entry76comment</comments>
      <pubDate>Sat, 19 Nov 2022 17:32:35 +0900</pubDate>
    </item>
    <item>
      <title>Supplemental Logging 설정에 따른 테이블 Logging</title>
      <link>https://darkturtle.tistory.com/75</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Supplemental&amp;nbsp;Logging&amp;nbsp;설정에&amp;nbsp;따른&amp;nbsp;테이블&amp;nbsp;Logging&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;결론&amp;nbsp;:&lt;br /&gt;1.&amp;nbsp;Database&amp;nbsp;PK,&amp;nbsp;UK&amp;nbsp;에&amp;nbsp;대한&amp;nbsp;Supplemental&amp;nbsp;Logging&amp;nbsp;설정&amp;nbsp;환경에서&amp;nbsp;PK,UK&amp;nbsp;가&amp;nbsp;없는&amp;nbsp;테이블&amp;nbsp;생성&amp;nbsp;하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;, 전체 칼럼에 대한 Logging 이 설정됨&lt;br /&gt;2.&amp;nbsp;(1)&amp;nbsp;상황에서&amp;nbsp;PK&amp;nbsp;추가하면,&amp;nbsp;PK&amp;nbsp;칼럼에&amp;nbsp;대한&amp;nbsp;Logging&amp;nbsp;설정됨&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의문 (나중에 확인 해보자 ) :&amp;nbsp;&lt;br /&gt;1.&amp;nbsp;logging&amp;nbsp;설정이&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;table(LOGMNR$ALWAYS_SUPLOG_COLUMNS('SCOTT','LOGGING_TEST_01'))&amp;nbsp;&amp;nbsp;조회&amp;nbsp;되지만,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dba_log_groups,&amp;nbsp;dba_log_group_columns&amp;nbsp;에선&amp;nbsp;확인&amp;nbsp;불가&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1652783151724&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE LOGGING_TEST_01 ( A1 NUMBER, A2 VARCHAR2(10), A3 DATE ) ;

SELECT * FROM table(LOGMNR$ALWAYS_SUPLOG_COLUMNS('SCOTT','LOGGING_TEST_01'))   ;
-- 결과 없음 


SELECT g.owner, g.log_group_name, g.table_name, g.log_group_type,
LISTAGG(c.column_name, ', ') WITHIN GROUP (ORDER BY c.POSITION) column_list
FROM dba_log_groups g,
     dba_log_group_columns c
WHERE g.owner = c.owner(+)
AND   g.log_group_name = c.log_group_name(+)
AND   g.table_name = c.table_name(+)
AND   g.owner ='SCOTT' 
AND   g.TABLE_NAME ='LOGGING_TEST_01'
GROUP BY g.owner, g.log_group_name, g.table_name, g.log_group_type
ORDER BY g.owner, g.log_group_name, g.table_name, g.log_group_type
-- 결과 없음

SELECT NAME, LOG_MODE, SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI, FORCE_LOGGING
, SUPPLEMENTAL_LOG_DATA_FK, SUPPLEMENTAL_LOG_DATA_ALL
FROM V$DATABASE ;

ORACLE19 NOARCHIVELOG NO NO NO NO NO NO

-- logging 설정 
SQL&amp;gt; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA ;
Database altered.

SQL&amp;gt; ALTER SYSTEM SWITCH LOGFILE ;
System altered.

SQL&amp;gt;

SELECT NAME, LOG_MODE, SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI, FORCE_LOGGING
, SUPPLEMENTAL_LOG_DATA_FK, SUPPLEMENTAL_LOG_DATA_ALL
FROM V$DATABASE ;

ORACLE19 NOARCHIVELOG YES NO NO NO NO NO
SUPPLEMENTAL_LOG_DATA_MIN = YES 

CREATE TABLE LOGGING_TEST_02 ( A1 NUMBER, A2 VARCHAR2(10), A3 DATE ) ;
SELECT * FROM table(LOGMNR$ALWAYS_SUPLOG_COLUMNS('SCOTT','LOGGING_TEST_02'))   ;
-- 결과 없음 
SELECT g.owner, g.log_group_name, g.table_name, g.log_group_type,
LISTAGG(c.column_name, ', ') WITHIN GROUP (ORDER BY c.POSITION) column_list
FROM dba_log_groups g,
     dba_log_group_columns c
WHERE g.owner = c.owner(+)
AND   g.log_group_name = c.log_group_name(+)
AND   g.table_name = c.table_name(+)
AND   g.owner ='SCOTT' 
AND   g.TABLE_NAME ='LOGGING_TEST_02'
GROUP BY g.owner, g.log_group_name, g.table_name, g.log_group_type
ORDER BY g.owner, g.log_group_name, g.table_name, g.log_group_type 
-- 결과 없음 

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA ( PRIMARY KEY) COLUMNS ;
Database altered.

SELECT NAME, LOG_MODE, SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI, FORCE_LOGGING
, SUPPLEMENTAL_LOG_DATA_FK, SUPPLEMENTAL_LOG_DATA_ALL
FROM V$DATABASE ;

ORACLE19 NOARCHIVELOG YES YES NO NO NO NO
SUPPLEMENTAL_LOG_DATA_MIN = YES 
SUPPLEMENTAL_LOG_DATA_PK  = YES 

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA ( UNIQUE ) COLUMNS ;
Database altered.

SELECT NAME, LOG_MODE, SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI, FORCE_LOGGING
, SUPPLEMENTAL_LOG_DATA_FK, SUPPLEMENTAL_LOG_DATA_ALL
FROM V$DATABASE ;

ORACLE19 NOARCHIVELOG YES YES YES NO NO NO
SUPPLEMENTAL_LOG_DATA_MIN = YES 
SUPPLEMENTAL_LOG_DATA_PK  = YES 
SUPPLEMENTAL_LOG_DATA_UI  = YES 

CREATE TABLE LOGGING_TEST_03 ( A1 NUMBER, A2 VARCHAR2(10), A3 DATE ) ;
SELECT * FROM table(LOGMNR$ALWAYS_SUPLOG_COLUMNS('SCOTT','LOGGING_TEST_03'))   ;
OWNER             TABLE_NAME         COLUMN_NAME   INTCOL      SEGCOL      USERCOL    
----------------- ------------------ ------------- ----------- ----------- -----------
SCOTT             LOGGING_TEST_03    A1                      1           1           1
SCOTT             LOGGING_TEST_03    A2                      2           2           2
SCOTT             LOGGING_TEST_03    A3                      3           3           3
-- PK, UK SUPPLEMENTAL 설정 상태에서, PK,UK 없는 테이블 생성 시, 테이블 전체 칼럼에 대한 Logging 


SELECT g.owner, g.log_group_name, g.table_name, g.log_group_type,
LISTAGG(c.column_name, ', ') WITHIN GROUP (ORDER BY c.POSITION) column_list
FROM dba_log_groups g,
     dba_log_group_columns c
WHERE g.owner = c.owner(+)
AND   g.log_group_name = c.log_group_name(+)
AND   g.table_name = c.table_name(+)
AND   g.owner ='SCOTT' 
AND   g.TABLE_NAME ='LOGGING_TEST_03'
GROUP BY g.owner, g.log_group_name, g.table_name, g.log_group_type
ORDER BY g.owner, g.log_group_name, g.table_name, g.log_group_type
-- 결과 없음 

-- PK 추가
ALTER TABLE LOGGING_TEST_03 ADD CONSTRAINT LOGGING_TEST_03_PK PRIMARY KEY ( A1 ) ;

SQL&amp;gt; SELECT * FROM table(LOGMNR$ALWAYS_SUPLOG_COLUMNS('SCOTT','LOGGING_TEST_03'));

OWNER    TABLE_NAME       COLUMN_NAME    INTCOL      SEGCOL      USERCOL    
-------- ---------------- -------------- ----------- ----------- -----------
SCOTT    LOGGING_TEST_03  A1                       1           1           1

1 rows selected.

SQL&amp;gt; SELECT g.owner, g.log_group_name, g.table_name, g.log_group_type,
LISTAGG(c.column_name, ', ') WITHIN GROUP (ORDER BY c.POSITION) column_list
FROM dba_log_groups g,
     dba_log_group_columns c
WHERE g.owner = c.owner(+)
AND   g.log_group_name = c.log_group_name(+)
AND   g.table_name = c.table_name(+)
AND   g.owner ='SCOTT' 
AND   g.TABLE_NAME ='LOGGING_TEST_03'
GROUP BY g.owner, g.log_group_name, g.table_name, g.log_group_type
ORDER BY g.owner, g.log_group_name, g.table_name, g.log_group_type;
-- 결과 없음&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>Supplemental</category>
      <category>supplemental logging</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/75</guid>
      <comments>https://darkturtle.tistory.com/75#entry75comment</comments>
      <pubDate>Tue, 17 May 2022 19:27:01 +0900</pubDate>
    </item>
    <item>
      <title>통계정보 확인 / 복원 / 수집 / 변경 이력 확인</title>
      <link>https://darkturtle.tistory.com/74</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Snapshot too old 가 날만큼 오래 걸리는 쿼리&lt;br /&gt;&amp;nbsp;평소&amp;nbsp;안보이던건데....&amp;nbsp;dba_hist_sqlstat&amp;nbsp;에&amp;nbsp;과거&amp;nbsp;이력도&amp;nbsp;없다.&lt;br /&gt;&amp;nbsp;최근&amp;nbsp;추가된건가&amp;nbsp;?&amp;nbsp;데이타가&amp;nbsp;좀&amp;nbsp;이상하데..&amp;nbsp;힌트도&amp;nbsp;좀&amp;nbsp;이상하고..&lt;br /&gt;&amp;nbsp;힌트로&amp;nbsp;제어&amp;nbsp;시작&amp;nbsp;...&amp;nbsp;요상하네...&amp;nbsp;의도한대로&amp;nbsp;잘&amp;nbsp;되지&amp;nbsp;않는다..&lt;br /&gt;&amp;nbsp;&lt;b&gt;음&amp;nbsp;결국&amp;nbsp;원인은&amp;nbsp;최근&amp;nbsp;추가된&amp;nbsp;테이블에&amp;nbsp;주말&amp;nbsp;통계정보&amp;nbsp;수집으로&amp;nbsp;row=0&amp;nbsp;인&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;상태에서&amp;nbsp;월요일&amp;nbsp;100만건&amp;nbsp;가까이&amp;nbsp;데이타가&amp;nbsp;유입되고&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;row=0&amp;nbsp;이&amp;nbsp;원인인지,&amp;nbsp;non-equal&amp;nbsp;join&amp;nbsp;이란&amp;nbsp;그런지,&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그것도 아님 내가 부족한건지, 내가 의도한대로 힌트가 먹지 않는다.&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&lt;b&gt;통계정보&amp;nbsp;수집으로&amp;nbsp;간단히&amp;nbsp;해결되었음&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022/05/13 오늘 동일 문제로 삽질&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cardinality 힌트도 써보고 별거 별거 다 해봤는데, 내 맘같지 않군 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시나 통계정보 수집해서 dba_tables.num_rows= 0 에 벗어나자 마자 Good Plan 으로 안착&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1652267822700&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 통계정보 확인 및 데이타 건수 확인해보기 
SELECT T.OWNER, T.TABLE_NAME, T.TABLESPACE_NAME, T.LAST_ANALYZED, T.SAMPLE_SIZE, T.NUM_ROWS, T.IOT_TYPE
     , to_number(extractvalue(xmltype(DBMS_XMLGEN.getxml('select count(*) c from '||B.OWNER||'.'||B.table_name)),'/ROWSET/ROW/C')) Actual_count   
FROM   DBA_TABLES T
WHERE  T.OWNER ='SCOTT'
AND    T.NUM_ROWS = 0 
AND    T.TABLE_NAME ='EMP'
AND    T.LAST_ANALYZED &amp;gt; SYSDATE - 4
AND    T.PARTITIONED = 'NO'
AND    T.TEMPORARY  ='N' ;


-- 통계정보 이력 확인 및 복원 하기 
SELECT OWNER, TABLE_NAME, PARTITION_NAME, STATS_UPDATE_TIME
          , 'EXEC DBMS_STATS.RESTORE_TABLE_STATS('''||OWNER||''','''||TABLE_NAME||''','''||STATS_UPDATE_TIME||''',TRUE,TRUE,TRUE);' AS RESTORE_TABLE_STATS
FROM   DBA_TAB_STATS_HISTORY
WHERE  OWNER      ='OPUSADM'
AND    TABLE_NAME ='EMP'
ORDER BY STATS_UPDATE_TIME DESC ;


-- 테이블 통계정보 변경 내역 상세 확인  
-- ANALYZETIME &amp;gt;&amp;gt; 통계정보 수집 시간
-- SAVTIME     &amp;gt;&amp;gt; 신규 통계정보 수집으로 복구를 위한 SAVTIME 시간 , DBA_TAB_STATS_HISTORY
SELECT ob.owner, ob.object_name, ob.object_type, rowcnt, avgrln ,samplesize, analyzetime, A.*
FROM sys.WRI$_OPTSTAT_TAB_HISTORY A, dba_objects ob
WHERE owner=upper('SCOTT')
and object_name=upper('EMP')
and object_type in ('TABLE')
and object_id=obj#
order by savtime asc;

-- 통계정보 수동 수집 
EXEC  SYS.DBMS_STATS.GATHER_TABLE_STATS
    (
       OWNNAME      =&amp;gt; 'SCOTT ',
       TABNAME      =&amp;gt; 'EMP',
       ESTIMATE_PERCENT   =&amp;gt; DBMS_STATS.AUTO_SAMPLE_SIZE,     
       GRANULARITY =&amp;gt; 'AUTO',
       DEGREE =&amp;gt; null,
       METHOD_OPT      =&amp;gt; 'FOR ALL COLUMNS SIZE AUTO',
       CASCADE      =&amp;gt; TRUE
    ) ;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>dbms_stats.gather_table_stats</category>
      <category>oracle</category>
      <category>이력</category>
      <category>통계정보</category>
      <category>통계정보복원</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/74</guid>
      <comments>https://darkturtle.tistory.com/74#entry74comment</comments>
      <pubDate>Wed, 11 May 2022 20:18:52 +0900</pubDate>
    </item>
    <item>
      <title>PROFILE 중 PASSWORD_ROLLOVER_TIME 추가됨 ( 19.12 부터 지원 )</title>
      <link>https://darkturtle.tistory.com/73</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;PROFILE&amp;nbsp;중&amp;nbsp;PASSWORD_ROLLOVER_TIME&amp;nbsp;추가됨&amp;nbsp;(&amp;nbsp;19.12&amp;nbsp;부터&amp;nbsp;지원&amp;nbsp;)&amp;nbsp; &lt;br /&gt;원문&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://oracle-base.com/articles/21c/gradual-database-password-rollover-time-21c&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://oracle-base.com/articles/21c/gradual-database-password-rollover-time-21c&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PASSWORD_ROLLOVER_TIME 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://darkturtle.tistory.com/entry/PROFILE-중-PASSWORDROLLOVERTIME-추가됨-1912-부터-지원-2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.12.06 - [Oracle/Oh Oracle ] - PROFILE 중 PASSWORD_ROLLOVER_TIME 추가됨 ( 19.12 부터 지원 ) 2&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PASSWORD_ROLLOVER_TIME&amp;nbsp; : 쉽게 말해서, PASSWORD 변경 후, 한시적으로 이전 비번/현재 비번으로 로그인 가능하도록 지원 해주는 기능으로 19.12 부터 지원됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안 강화로, 주기적으로 비번 변경 시, 변경 후, Application(WAS) 재기동에 여유를 갖을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;------------------------------------------------------------------------------------------- &lt;br /&gt;1차&amp;nbsp;테스트&amp;nbsp;--&amp;nbsp;원문&amp;nbsp;따라&amp;nbsp;하기&amp;nbsp; &lt;br /&gt;------------------------------------------------------------------------------------------- &lt;br /&gt;------------------------------------------------------------------------------------------- &lt;br /&gt;2차&amp;nbsp;테스트&amp;nbsp;--&amp;nbsp;PASSWORD_ROLLOVER_TIME&amp;nbsp;활성화&amp;nbsp;와&amp;nbsp;비번&amp;nbsp;변경&amp;nbsp;순서&amp;nbsp; &lt;br /&gt;------------------------------------------------------------------------------------------- &lt;br /&gt;PASSWORD_ROLLOVER_TIME&amp;nbsp;을&amp;nbsp;할당&amp;nbsp;혹은&amp;nbsp;활성화&amp;nbsp;후에&amp;nbsp;비번&amp;nbsp;변경&amp;nbsp;시만,&amp;nbsp;ROLLOVER가&amp;nbsp;적용&amp;nbsp;된다. &lt;br /&gt;EX)&amp;nbsp;PASSWORD_ROLLOVER_TIME&amp;nbsp;할당/활성화&amp;nbsp;-&amp;gt;&amp;nbsp;비번&amp;nbsp;변경&amp;nbsp;-&amp;gt;&amp;nbsp;전/후&amp;nbsp;비번으로&amp;nbsp;로그인&amp;nbsp;성공 &lt;br /&gt;EX)&amp;nbsp;비번&amp;nbsp;변경&amp;nbsp;-&amp;gt;&amp;nbsp;PASSWORD_ROLLOVER_TIME&amp;nbsp;할당/활성화&amp;nbsp;-&amp;gt;&amp;nbsp;후(최근)&amp;nbsp;비번으로만&amp;nbsp;로그인&amp;nbsp;성공&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1651149032536&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Gradual Database Password Rollover Time (PASSWORD_ROLLOVER_TIME) in Oracle Database 19c and 21c&quot; data-og-description=&quot;From Oracle 21c onward we can define a password rollover time, which allows us to connect using both the old and the new passwords during the gradual rollover time period. This feature was backported to Oracle 19c in the 19.12 release update.&quot; data-og-host=&quot;oracle-base.com&quot; data-og-source-url=&quot;https://oracle-base.com/articles/21c/gradual-database-password-rollover-time-21c&quot; data-og-url=&quot;https://oracle-base.com/articles/21c/gradual-database-password-rollover-time-21c&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/XRtJN/hyOcArCBG5/ZP3WB233K5TcCKZwFlfVZ1/img.png?width=1754&amp;amp;height=945&amp;amp;face=696_282_978_588&quot;&gt;&lt;a href=&quot;https://oracle-base.com/articles/21c/gradual-database-password-rollover-time-21c&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://oracle-base.com/articles/21c/gradual-database-password-rollover-time-21c&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/XRtJN/hyOcArCBG5/ZP3WB233K5TcCKZwFlfVZ1/img.png?width=1754&amp;amp;height=945&amp;amp;face=696_282_978_588');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Gradual Database Password Rollover Time (PASSWORD_ROLLOVER_TIME) in Oracle Database 19c and 21c&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;From Oracle 21c onward we can define a password rollover time, which allows us to connect using both the old and the new passwords during the gradual rollover time period. This feature was backported to Oracle 19c in the 19.12 release update.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;oracle-base.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651148881749&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-------------------------------------------------------------------------------------------
1차 테스트 -- 원문 따라 하기 
-------------------------------------------------------------------------------------------
#1. PASSWORD ROLLOVER 활성화 
SCOTT@ORACLE19&amp;gt;create user testuser1 identified by testuser1 quota unlimited on users ;

User created.

SCOTT@ORACLE19&amp;gt;grant connect, resource to testuser1 ;

Grant succeeded.

SCOTT@ORACLE19&amp;gt;create profile pw_rollover_time_prof limit password_rollover_time 1 ;

Profile created.

SCOTT@ORACLE19&amp;gt;alter user testuser1 profile pw_rollover_time_prof ;

User altered.

TESTUSER1@ORACLE19&amp;gt;alter user testuser1 identified by newpasswd1;
User altered.


-- password_rollover_time 설정 및 User 에 할당
-- User 비번 변경 이후, rollover 가 활성화 됨 

-- 기존 비번 로그인 성공
TESTUSER1@ORACLE19&amp;gt;conn testuser1/testuser1
Connected.

Session altered.

-- 신규 비번 로그인 성공 
TESTUSER1@ORACLE19&amp;gt;conn testuser1/newpasswd1
Connected.

Session altered.

-- DBA_USERS 의 account_status 를 통해서 open &amp;amp; IN ROLLOVER 상태 확인됨 
-- PASSWORD_CAHGE_DATE (비번 변경 후 ) , ROLLOVER 상태 확인 가능 

SCOTT@ORACLE19&amp;gt;select account_status,
               to_char(password_change_date, 'yyyy-mm-dd hh24:mi:ss') as password_change_date
               from   dba_users
               where  username = 'TESTUSER1';  

ACCOUNT_STATUS                   PASSWORD_CHANGE_DATE
-------------------------------- ------------------------------
OPEN &amp;amp; IN ROLLOVER               2022-04-27 21:00:01

SCOTT@ORACLE19&amp;gt;select resource_name,        limit
              from   dba_profiles
              where  profile = 'PW_ROLLOVER_TIME_PROF'
              and    resource_name = 'PASSWORD_ROLLOVER_TIME';  
RESOURCE_NAME             LIMIT
------------------------- ----------
PASSWORD_ROLLOVER_TIME    1


#2. PASSWORD ROLLOVER 비활성화 

SCOTT@ORACLE19&amp;gt;alter profile pw_rollover_time_prof limit password_rollover_time 0 ;

Profile altered.

SCOTT@ORACLE19&amp;gt;select resource_name, limit
               from   dba_profiles
               where  profile = 'PW_ROLLOVER_TIME_PROF'
               and    resource_name = 'PASSWORD_ROLLOVER_TIME';  
RESOURCE_NAME             LIMIT
------------------------- ----------
PASSWORD_ROLLOVER_TIME    0            

SCOTT@ORACLE19&amp;gt;select account_status,
               to_char(password_change_date, 'dd-mon-yyyy hh24:mi:ss') as password_change_date
               from   dba_users
               where  username = 'TESTUSER1';  

ACCOUNT_STATUS                   PASSWORD_CHANGE_DATE
-------------------------------- ------------------------------
OPEN                             27-apr-2022 21:00:01
-- ACCOUNT_STATUS 이 &quot;OPEN &amp;amp; IN ROLLOVER&quot; 에서 &quot;OPEN&quot; 으로 변경됨 

-- 기본 비번으로 로그인 시도 -&amp;gt; 실패 
TESTUSER1@ORACLE19&amp;gt;conn testuser1/testuser1
ERROR:
ORA-01017: invalid username/password; logon denied

-- 신규 비번으로 로그인 시도 -&amp;gt; 성공 
TESTUSER1@ORACLE19&amp;gt;conn testuser1/newpasswd1
Connected.

Session altered.


#3. 주의 
SCOTT@ORACLE19&amp;gt;alter profile pw_rollover_time_prof limit password_rollover_time 1.5;

Profile altered.

SCOTT@ORACLE19&amp;gt;select account_status,
               to_char(password_change_date, 'dd-mon-yyyy hh24:mi:ss') as password_change_date
               from   dba_users
               where  username = 'TESTUSER1'; 

ACCOUNT_STATUS                   PASSWORD_CHANGE_DATE
-------------------------------- ------------------------------
OPEN &amp;amp; IN ROLLOVER               27-apr-2022 21:04:48

SCOTT@ORACLE19&amp;gt;select resource_name,       limit
               from   dba_profiles
               where  profile = 'PW_ROLLOVER_TIME_PROF'
               and    resource_name = 'PASSWORD_ROLLOVER_TIME';  
RESOURCE_NAME             LIMIT
------------------------- ----------
PASSWORD_ROLLOVER_TIME    1.5

-- password_rollover_time PROFILE 설정 -&amp;gt; 비번 변경 -&amp;gt; 전/후 비번 로그인 성공 확인 

TESTUSER1@ORACLE19&amp;gt;alter user testuser1 identified by newpasswd2;
User altered.

-- 기존 비번 로그인 성공 
TESTUSER1@ORACLE19&amp;gt;conn testuser1/newpasswd1
Connected.

Session altered.

-- 신규 비번 로그인 성공 
TESTUSER1@ORACLE19&amp;gt;conn testuser1/newpasswd2
Connected.

Session altered.



SCOTT@ORACLE19&amp;gt;alter profile pw_rollover_time_prof limit password_rollover_time 0;
Profile altered.


TESTUSER1@ORACLE19&amp;gt;conn testuser1/newpasswd2
Connected.

Session altered.


SCOTT@ORACLE19&amp;gt;select resource_name,limit
               from   dba_profiles
               where  profile = 'PW_ROLLOVER_TIME_PROF'
               and    resource_name = 'PASSWORD_ROLLOVER_TIME';  
RESOURCE_NAME             LIMIT
------------------------- ----------
PASSWORD_ROLLOVER_TIME    0

SCOTT@ORACLE19&amp;gt;select account_status,
               to_char(password_change_date, 'dd-mon-yyyy hh24:mi:ss') as password_change_date
               from   dba_users
               where  username = 'TESTUSER1'; 

ACCOUNT_STATUS                   PASSWORD_CHANGE_DATE
-------------------------------- ------------------------------
OPEN                             27-apr-2022 21:04:48        



TESTUSER1@ORACLE19&amp;gt;conn testuser1/newpasswd2
Connected.

Session altered.

TESTUSER1@ORACLE19&amp;gt;conn testuser1/newpasswd1
ERROR:
ORA-01017: invalid username/password; logon denied


Warning: You are no longer connected to ORACLE.
TESTUSER1@ORACLE19&amp;gt;

-------------------------------------------------------------------------------------------
2차 테스트 -- PASSWORD_ROLLOVER_TIME 활성화 와 비번 변경 순서 
-------------------------------------------------------------------------------------------
--PASSWORD_ROLLOVER_TIME 을 할당 혹은 활성화 후에 비번 변경 시만, ROLLOVER가 적용 된다.
--EX) PASSWORD_ROLLOVER_TIME 할당/활성화 -&amp;gt; 비번 변경 -&amp;gt; 전/후 비번으로 로그인 성공
--EX) 비번 변경 -&amp;gt; PASSWORD_ROLLOVER_TIME 할당/활성화 -&amp;gt; 후(최근) 비번으로만 로그인 성공 

SQL&amp;gt; create user testuser101 identified by testuser101 quota unlimited on users ;

User created.

SQL&amp;gt; create user testuser102 identified by testuser102 quota unlimited on users ;

User created.

SQL&amp;gt;
SQL&amp;gt;
SQL&amp;gt; grant connect, resource to testuser101 ;

Grant succeeded.

SQL&amp;gt; grant connect, resource to testuser102 ;

Grant succeeded.

SQL&amp;gt; select account_status,
               to_char(password_change_date, 'yyyy-mm-dd hh24:mi:ss') as password_change_date
               from   dba_users
               where  username in ( 'TESTUSER101','TESTUSER102' );   2    3    4

ACCOUNT_STATUS                   PASSWORD_CHANGE_DAT
-------------------------------- -------------------
OPEN                             2022-04-28 21:17:22
OPEN                             2022-04-28 21:17:18


SYS@ORACLE19&amp;gt;conn testuser101/testuser101
Connected.

Session altered.

TESTUSER101@ORACLE19&amp;gt;alter user testuser101 identified by newpasswd1;  ---- testuser01 을 PASSWORD_ROLLOVER_TIME 할당전 비번 변경

User altered.

SYS@ORACLE19&amp;gt;conn testuser102/testuser102
Connected.

Session altered.

SQL&amp;gt; alter user testuser101 profile pw_rollover_time_prof ;

User altered.

SQL&amp;gt; alter user testuser102 profile pw_rollover_time_prof ;

User altered.

SQL&amp;gt; select account_status,
               to_char(password_change_date, 'yyyy-mm-dd hh24:mi:ss') as password_change_date
               from   dba_users
               where  username in ( 'TESTUSER101','TESTUSER102' );   2    3    4

ACCOUNT_STATUS                   PASSWORD_CHANGE_DAT
-------------------------------- -------------------
OPEN                             2022-04-28 21:17:22
OPEN                             2022-04-28 21:18:23


TESTUSER102@ORACLE19&amp;gt;alter user testuser102 identified by newpasswd1; -- testuser102 비번 변경 

User altered.


SQL&amp;gt;  select username, account_status,
                   to_char(password_change_date, 'yyyy-mm-dd hh24:mi:ss') as password_change_date
                   from   dba_users
                  where  username in ( 'TESTUSER101','TESTUSER102' ) ; 

USERNAME                       ACCOUNT_STATUS                   PASSWORD_CHANGE_DAT
------------------------------ -------------------------------- -------------------
TESTUSER102                    OPEN &amp;amp; IN ROLLOVER               2022-04-28 21:19:11
TESTUSER101                    OPEN                             2022-04-28 21:18:23
-- TESTUSE102 만 ROLLOVER 활성화 

-- 로그인 테스트 
TESTUSER101@ORACLE19&amp;gt;conn testuser101/newpasswd1
Connected.

Session altered.

TESTUSER101@ORACLE19&amp;gt;conn testuser101/testuser101
ERROR:
ORA-01017: invalid username/password; logon denied


Warning: You are no longer connected to ORACLE.
TESTUSER101@ORACLE19&amp;gt;
-- TESTUSER101 는 최신 비번으로만 로그인 가능 

TESTUSER102@ORACLE19&amp;gt;conn testuser102/newpasswd1
Connected.

Session altered.

TESTUSER102@ORACLE19&amp;gt;conn testuser102/testuser102
Connected.

Session altered.

TESTUSER102@ORACLE19&amp;gt;
-- TESTUSER102 는 전/후 비번 모두 로그인 성공&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>19.12</category>
      <category>oracle</category>
      <category>password</category>
      <category>PASSWORD_ROLLOVER_TIME</category>
      <category>비번</category>
      <category>비번변경</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/73</guid>
      <comments>https://darkturtle.tistory.com/73#entry73comment</comments>
      <pubDate>Thu, 28 Apr 2022 21:29:48 +0900</pubDate>
    </item>
    <item>
      <title>SQL PROFILE ( FROM V$SQL , AWR )</title>
      <link>https://darkturtle.tistory.com/72</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SQL&amp;nbsp;PROFILE&amp;nbsp;로&amp;nbsp;SQL&amp;nbsp;TEXT&amp;nbsp;수정&amp;nbsp;없이,&amp;nbsp;튜닝&amp;nbsp;하기 &lt;br /&gt;-.&amp;nbsp;ORACLE&amp;nbsp;Tuning&amp;nbsp;Pack&amp;nbsp;라이센스&amp;nbsp;필요&amp;nbsp;(&amp;nbsp;SQL&amp;nbsp;PLAN&amp;nbsp;BASELINES&amp;nbsp;는&amp;nbsp;별도&amp;nbsp;라이센스&amp;nbsp;필요&amp;nbsp;없음&amp;nbsp;) &lt;br /&gt;-.&amp;nbsp;SQL&amp;nbsp;PROFILE&amp;nbsp;로&amp;nbsp;긴급&amp;nbsp;조치&amp;nbsp;후,&amp;nbsp;반드시&amp;nbsp;Application(SQL&amp;nbsp;TEXT)&amp;nbsp;수정&amp;nbsp;필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650973600565&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
-- 1. V$SQL 통해 SQL PROFILE 적용하기 
-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------

SCOTT@ORACLE19&amp;gt;alter system flush shared_pool;
System altered.

-- 적용하고 싶은 PLAN : aq1rf843yf3bm  ( NL PLAN ) 
-- 수정 하고 싶은 SQL : 6d1sumdtz1mr8  ( HASH PLAN )
SCOTT@ORACLE19&amp;gt;set autotrace on explain
SCOTT@ORACLE19&amp;gt;SELECT /*+ TG_PROFILE ORDERED USE_NL(B) */ * FROM dept a, emp b WHERE b.deptno = a.deptno;

    DEPTNO DNAME          LOC                EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- -------------- ------------- ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
        10 ACCOUNTING     NEW YORK            7782 CLARK      MANAGER         7839 1981.06.09 00:00:00       2450                    10
        10 ACCOUNTING     NEW YORK            7839 KING       PRESIDENT            1981.11.17 00:00:00       5000                    10
        10 ACCOUNTING     NEW YORK            7934 MILLER     CLERK           7782 1982.01.23 00:00:00       1300                    10
        20 RESEARCH       DALLAS              7369 SMITH      CLERK           7902 1980.12.17 00:00:00        800                    20
        20 RESEARCH       DALLAS              7566 JONES      MANAGER         7839 1981.04.02 00:00:00       2975                    20
        20 RESEARCH       DALLAS              7788 SCOTT      ANALYST         7566 1982.12.09 00:00:00       3000                    20
        20 RESEARCH       DALLAS              7876 ADAMS      CLERK           7788 1983.01.12 00:00:00       1100                    20
        20 RESEARCH       DALLAS              7902 FORD       ANALYST         7566 1981.12.03 00:00:00       3000                    20
        30 SALES          CHICAGO             7499 ALLEN      SALESMAN        7698 1981.02.20 00:00:00       1600        300         30
        30 SALES          CHICAGO             7521 WARD       SALESMAN        7698 1981.02.22 00:00:00       1250        500         30
        30 SALES          CHICAGO             7654 MARTIN     SALESMAN        7698 1981.09.28 00:00:00       1250       1400         30
        30 SALES          CHICAGO             7698 BLAKE      MANAGER         7839 1981.05.01 00:00:00       2850                    30
        30 SALES          CHICAGO             7844 TURNER     SALESMAN        7698 1981.09.08 00:00:00       1500          0         30
        30 SALES          CHICAGO             7900 JAMES      CLERK           7698 1981.12.03 00:00:00        950                    30

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 4192419542

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |    14 |   812 |    10   (0)| 00:00:01 |
|   1 |  NESTED LOOPS      |      |    14 |   812 |    10   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| DEPT |     4 |    80 |     3   (0)| 00:00:01 |
|*  3 |   TABLE ACCESS FULL| EMP  |     4 |   152 |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter(&quot;B&quot;.&quot;DEPTNO&quot;=&quot;A&quot;.&quot;DEPTNO&quot;)

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1 (E - Syntax error (1))
---------------------------------------------------------------------------

   1 -  SEL$1
         E -  TG_PROFILE

SCOTT@ORACLE19&amp;gt;SELECT /*+ TG_PROFILE ORDERED USE_HASH(B) */ * FROM dept a, emp b WHERE b.deptno = a.deptno;

    DEPTNO DNAME          LOC                EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- -------------- ------------- ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
        20 RESEARCH       DALLAS              7369 SMITH      CLERK           7902 1980.12.17 00:00:00        800                    20
        30 SALES          CHICAGO             7499 ALLEN      SALESMAN        7698 1981.02.20 00:00:00       1600        300         30
        30 SALES          CHICAGO             7521 WARD       SALESMAN        7698 1981.02.22 00:00:00       1250        500         30
        20 RESEARCH       DALLAS              7566 JONES      MANAGER         7839 1981.04.02 00:00:00       2975                    20
        30 SALES          CHICAGO             7654 MARTIN     SALESMAN        7698 1981.09.28 00:00:00       1250       1400         30
        30 SALES          CHICAGO             7698 BLAKE      MANAGER         7839 1981.05.01 00:00:00       2850                    30
        10 ACCOUNTING     NEW YORK            7782 CLARK      MANAGER         7839 1981.06.09 00:00:00       2450                    10
        20 RESEARCH       DALLAS              7788 SCOTT      ANALYST         7566 1982.12.09 00:00:00       3000                    20
        10 ACCOUNTING     NEW YORK            7839 KING       PRESIDENT            1981.11.17 00:00:00       5000                    10
        30 SALES          CHICAGO             7844 TURNER     SALESMAN        7698 1981.09.08 00:00:00       1500          0         30
        20 RESEARCH       DALLAS              7876 ADAMS      CLERK           7788 1983.01.12 00:00:00       1100                    20
        30 SALES          CHICAGO             7900 JAMES      CLERK           7698 1981.12.03 00:00:00        950                    30
        20 RESEARCH       DALLAS              7902 FORD       ANALYST         7566 1981.12.03 00:00:00       3000                    20
        10 ACCOUNTING     NEW YORK            7934 MILLER     CLERK           7782 1982.01.23 00:00:00       1300                    10

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 615168685

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |    14 |   812 |     6   (0)| 00:00:01 |
|*  1 |  HASH JOIN         |      |    14 |   812 |     6   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| DEPT |     4 |    80 |     3   (0)| 00:00:01 |
|   3 |   TABLE ACCESS FULL| EMP  |    14 |   532 |     3   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access(&quot;B&quot;.&quot;DEPTNO&quot;=&quot;A&quot;.&quot;DEPTNO&quot;)

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1 (E - Syntax error (1))
---------------------------------------------------------------------------

   1 -  SEL$1
         E -  TG_PROFILE

SCOTT@ORACLE19&amp;gt;


SCOTT@ORACLE19&amp;gt;set autotrace off
SCOTT@ORACLE19&amp;gt;  SELECT /*+ SEARCH_SQL_ID */ A.SQL_ID, A.PLAN_HASH_VALUE, CHILD_NUMBER, A.ADDRESS, A.SQL_FULLTEXT, EXECUTIONS, SQL_PROFILE
                 FROM   GV$SQL A
                 WHERE  1=1
                 AND    ( INSTR(SQL_TEXT,'/*+ TG_PROFILE ORDERED',1,1) &amp;gt;= 1 )
                 AND    ( INSTR(SQL_TEXT,'SEARCH_SQL_ID',1,1) =  0 )
                 AND   SQL_TEXT NOT LIKE 'EXPLAIN PLAN%'
                 AND   SQL_TEXT NOT LIKE 'DECLARE%'
                 ORDER BY LAST_ACTIVE_TIME ; 


SQL_ID        PLAN_HASH_VALUE CHILD_NUMBER ADDRESS          SQL_FULLTEXT                                       EXECUTIONS SQL_PROFILE
------------- --------------- ------------ ---------------- -------------------------------------------------- ---------- ------------------------------
aq1rf843yf3bm      4192419542            0 000000006A603308 SELECT /*+ TG_PROFILE ORDERED USE_NL(B) */ * FROM           1
                                                            dept a, emp b WHERE b.deptno = a.deptno

6d1sumdtz1mr8       615168685            0 0000000068EAC8E8 SELECT /*+ TG_PROFILE ORDERED USE_HASH(B) */ * FRO          1
                                                            M dept a, emp b WHERE b.deptno = a.deptno
                                                            

------------------------------------------------------------------------------------------------------------------------------------
-- V$SQL PLAN 가지고 SQL PROFILE 생성 하기 
------------------------------------------------------------------------------------------------------------------------------------
-- 적용하고 싶은 PLAN : aq1rf843yf3bm  ( NL PLAN ) 
-- 수정 하고 싶은 SQL : 6d1sumdtz1mr8  ( HASH PLAN )

declare
ar_profile_hints sys.sqlprof_attr;
cl_sql_text clob;
begin
select extractvalue(value(d), '/hint') as outline_hints bulk collect
into ar_profile_hints
from xmltable('/*/outline_data/hint' passing (select xmltype(other_xml) as xmlval
from v$sql_plan
where sql_id = 'aq1rf843yf3bm'    -- apply plan  
and child_number = 0              -- apply plan   
and other_xml is not null ) ) d;

select sql_fulltext
into cl_sql_text
from v$sql
where sql_id = '6d1sumdtz1mr8'    -- target sql  
and child_number = 0;             -- target sql 

dbms_sqltune.import_sql_profile(
sql_text =&amp;gt; cl_sql_text
, profile =&amp;gt; ar_profile_hints
, category =&amp;gt; 'DEFAULT'
, name =&amp;gt; '6d1sumdtz1mr8_profile'
-- use force_match =&amp;gt; true
-- to use CURSOR_SHARING=SIMILAR
-- behaviour, i.e. match even with
-- differing literals
, REPLACE =&amp;gt; TRUE
);
end;
/
------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------

-- ENDABLE / DISABLED 확인
SELECT NAME, CATEGORY, SQL_TEXT, CREATED, DESCRIPTION, TYPE, STATUS, FORCE_MATCHING
FROM DBA_SQL_PROFILES ;
-- DROP SQL PROFILE 
EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE(NAME=&amp;gt;'6d1sumdtz1mr8');
-- DISABLED
EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE(NAME =&amp;gt; 'tune_tg_full', ATTRIBUTE_NAME  =&amp;gt; 'STATUS', VALUE =&amp;gt; 'DISABLED');
-- ENABLED
EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE(NAME =&amp;gt; 'tune_tg_full', ATTRIBUTE_NAME  =&amp;gt; 'STATUS', VALUE =&amp;gt; 'ENABLED');



-- SQL PROFILE 작동 확인 
SCOTT@ORACLE19&amp;gt;set autotrace on explain
SCOTT@ORACLE19&amp;gt;SELECT /*+ TG_PROFILE ORDERED USE_HASH(B) */ * FROM dept a, emp b WHERE b.deptno = a.deptno;

    DEPTNO DNAME          LOC                EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- -------------- ------------- ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
        10 ACCOUNTING     NEW YORK            7782 CLARK      MANAGER         7839 1981.06.09 00:00:00       2450                    10
        10 ACCOUNTING     NEW YORK            7839 KING       PRESIDENT            1981.11.17 00:00:00       5000                    10
        10 ACCOUNTING     NEW YORK            7934 MILLER     CLERK           7782 1982.01.23 00:00:00       1300                    10
        20 RESEARCH       DALLAS              7369 SMITH      CLERK           7902 1980.12.17 00:00:00        800                    20
        20 RESEARCH       DALLAS              7566 JONES      MANAGER         7839 1981.04.02 00:00:00       2975                    20
        20 RESEARCH       DALLAS              7788 SCOTT      ANALYST         7566 1982.12.09 00:00:00       3000                    20
        20 RESEARCH       DALLAS              7876 ADAMS      CLERK           7788 1983.01.12 00:00:00       1100                    20
        20 RESEARCH       DALLAS              7902 FORD       ANALYST         7566 1981.12.03 00:00:00       3000                    20
        30 SALES          CHICAGO             7499 ALLEN      SALESMAN        7698 1981.02.20 00:00:00       1600        300         30
        30 SALES          CHICAGO             7521 WARD       SALESMAN        7698 1981.02.22 00:00:00       1250        500         30
        30 SALES          CHICAGO             7654 MARTIN     SALESMAN        7698 1981.09.28 00:00:00       1250       1400         30
        30 SALES          CHICAGO             7698 BLAKE      MANAGER         7839 1981.05.01 00:00:00       2850                    30
        30 SALES          CHICAGO             7844 TURNER     SALESMAN        7698 1981.09.08 00:00:00       1500          0         30
        30 SALES          CHICAGO             7900 JAMES      CLERK           7698 1981.12.03 00:00:00        950                    30

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 4192419542

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |    14 |   812 |    10   (0)| 00:00:01 |
|   1 |  NESTED LOOPS      |      |    14 |   812 |    10   (0)| 00:00:01 |      &amp;lt;&amp;lt;&amp;lt; USE_HASH 힌트가 있음에도 불구하고, NESTED LOOP JOIN 으로 풀림 
|   2 |   TABLE ACCESS FULL| DEPT |     4 |    80 |     3   (0)| 00:00:01 |
|*  3 |   TABLE ACCESS FULL| EMP  |     4 |   152 |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter(&quot;B&quot;.&quot;DEPTNO&quot;=&quot;A&quot;.&quot;DEPTNO&quot;)

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 3 (U - Unused (2), E - Syntax error (1))
---------------------------------------------------------------------------

   1 -  SEL$1
         U -  ORDERED / rejected by IGNORE_OPTIM_EMBEDDED_HINTS
         E -  TG_PROFILE

   3 -  SEL$1 / B@SEL$1
         U -  USE_HASH(B) / rejected by IGNORE_OPTIM_EMBEDDED_HINTS

Note
-----
   - SQL profile &quot;6d1sumdtz1mr8_profile&quot; used for this statement   &amp;lt;&amp;lt; SQL PROFILE 사용 NOTE 됨 

SCOTT@ORACLE19&amp;gt;

SCOTT@ORACLE19&amp;gt;set autotrace off
SCOTT@ORACLE19&amp;gt;SELECT /*+ SEARCH_SQL_ID */ A.SQL_ID, A.PLAN_HASH_VALUE, CHILD_NUMBER, A.ADDRESS, A.SQL_FULLTEXT, EXECUTIONS, SQL_PROFILE
               FROM   GV$SQL A
               WHERE  1=1
               AND    ( INSTR(SQL_TEXT,'/*+ TG_PROFILE ORDERED',1,1) &amp;gt;= 1 )
               AND    ( INSTR(SQL_TEXT,'SEARCH_SQL_ID',1,1) =  0 )
               AND   SQL_TEXT NOT LIKE 'EXPLAIN PLAN%'
               AND   SQL_TEXT NOT LIKE 'DECLARE%'
               ORDER BY LAST_ACTIVE_TIME ;   

SQL_ID        PLAN_HASH_VALUE CHILD_NUMBER ADDRESS          SQL_FULLTEXT                                       EXECUTIONS SQL_PROFILE
------------- --------------- ------------ ---------------- -------------------------------------------------- ---------- ------------------------------
aq1rf843yf3bm      4192419542            0 000000006A603308 SELECT /*+ TG_PROFILE ORDERED USE_NL(B) */ * FROM           1
                                                            dept a, emp b WHERE b.deptno = a.deptno

6d1sumdtz1mr8      4192419542            0 0000000068EAC8E8 SELECT /*+ TG_PROFILE ORDERED USE_HASH(B) */ * FRO          1 6d1sumdtz1mr8_profile          &amp;lt;&amp;lt;&amp;lt; V$SQL.SQL_PROFILE 정보가 업데이트 됨 
                                                            M dept a, emp b WHERE b.deptno = a.deptno

2 rows selected.

SCOTT@ORACLE19&amp;gt;

-- DROP SQL PROFILE 
EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE(NAME=&amp;gt;'6d1sumdtz1mr8_profile');

-- ENDABLE / DISABLED 확인
SELECT NAME, CATEGORY, SQL_TEXT, CREATED, DESCRIPTION, TYPE, STATUS, FORCE_MATCHING
FROM DBA_SQL_PROFILES ;
-- 삭제 확인            

-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
-- 2. AWR 통해 SQL PROFILE 적용하기 
-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------

SCOTT@ORACLE19&amp;gt;alter system flush shared_pool ;
System altered.

SCOTT@ORACLE19&amp;gt;

SCOTT@ORACLE19&amp;gt;SELECT /*+ SEARCH_SQL_ID */ A.SQL_ID, A.PLAN_HASH_VALUE, CHILD_NUMBER, A.ADDRESS, A.SQL_FULLTEXT, EXECUTIONS, SQL_PROFILE
               FROM   GV$SQL A
               WHERE  1=1
               AND    ( INSTR(SQL_TEXT,'/*+ TG_PROFILE ORDERED',1,1) &amp;gt;= 1 )
               AND    ( INSTR(SQL_TEXT,'SEARCH_SQL_ID',1,1) =  0 )
               AND   SQL_TEXT NOT LIKE 'EXPLAIN PLAN%'
               AND   SQL_TEXT NOT LIKE 'DECLARE%'
               ORDER BY LAST_ACTIVE_TIME ;   

SQL_ID        PLAN_HASH_VALUE CHILD_NUMBER ADDRESS          SQL_FULLTEXT                                       EXECUTIONS SQL_PROFILE
------------- --------------- ------------ ---------------- -------------------------------------------------- ---------- ------------------------------
aq1rf843yf3bm      4192419542            0 0000000068A1D2C8 SELECT /*+ TG_PROFILE ORDERED USE_NL(B) */ * FROM           1
                                                            dept a, emp b WHERE b.deptno = a.deptno

6d1sumdtz1mr8       615168685            0 0000000067677688 SELECT /*+ TG_PROFILE ORDERED USE_HASH(B) */ * FRO          1
                                                            M dept a, emp b WHERE b.deptno = a.deptno


2 rows selected.

SCOTT@ORACLE19&amp;gt;

-- AWR 로 부터 PLAN 을 가져오기 위해서는 DBA_HIST_SQLSTAT 에 등록 필요함 
SELECT * from dba_hist_sql_plan where sql_id = 'aq1rf843yf3bm'  and plan_hash_value = 4192419542  ;
SELECT * from dba_hist_sqlstat where sql_id = 'aq1rf843yf3bm'  and plan_hash_value = 4192419542  ;

-- dba_hist_sqlstat 에 없으면 임의로 반복 수행 해서 dba_hist_sqlstat 에 등록 되도록 유도
DECLARE 
I NUMBER := 1 ;
V_STR VARCHAR2(400) := 'SELECT /*+ TG_PROFILE ORDERED USE_NL(B) */ * FROM dept a, emp b WHERE b.deptno = a.deptno';
BEGIN
 FOR I IN 1..100000
 LOOP 
 EXECUTE IMMEDIATE V_STR ;
 END LOOP ;
COMMIT; 
END ;

-- snap_shot 찍기 
select dbms_workload_repository.create_snapshot() AS Snap_id from dual ;  
-- 적용하고 싶은 SQL 로 마찬가지로 V$SQL 에 등록을 위해 임의로 수행 필요함 


SCOTT@ORACLE19&amp;gt;set autotrace on explain
SCOTT@ORACLE19&amp;gt;SELECT /*+ TG_PROFILE ORDERED USE_HASH(B) */ * FROM dept a, emp b WHERE b.deptno = a.deptno;

    DEPTNO DNAME          LOC                EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- -------------- ------------- ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
        20 RESEARCH       DALLAS              7369 SMITH      CLERK           7902 1980.12.17 00:00:00        800                    20
        30 SALES          CHICAGO             7499 ALLEN      SALESMAN        7698 1981.02.20 00:00:00       1600        300         30
        30 SALES          CHICAGO             7521 WARD       SALESMAN        7698 1981.02.22 00:00:00       1250        500         30
        20 RESEARCH       DALLAS              7566 JONES      MANAGER         7839 1981.04.02 00:00:00       2975                    20
        30 SALES          CHICAGO             7654 MARTIN     SALESMAN        7698 1981.09.28 00:00:00       1250       1400         30
        30 SALES          CHICAGO             7698 BLAKE      MANAGER         7839 1981.05.01 00:00:00       2850                    30
        10 ACCOUNTING     NEW YORK            7782 CLARK      MANAGER         7839 1981.06.09 00:00:00       2450                    10
        20 RESEARCH       DALLAS              7788 SCOTT      ANALYST         7566 1982.12.09 00:00:00       3000                    20
        10 ACCOUNTING     NEW YORK            7839 KING       PRESIDENT            1981.11.17 00:00:00       5000                    10
        30 SALES          CHICAGO             7844 TURNER     SALESMAN        7698 1981.09.08 00:00:00       1500          0         30
        20 RESEARCH       DALLAS              7876 ADAMS      CLERK           7788 1983.01.12 00:00:00       1100                    20
        30 SALES          CHICAGO             7900 JAMES      CLERK           7698 1981.12.03 00:00:00        950                    30
        20 RESEARCH       DALLAS              7902 FORD       ANALYST         7566 1981.12.03 00:00:00       3000                    20
        10 ACCOUNTING     NEW YORK            7934 MILLER     CLERK           7782 1982.01.23 00:00:00       1300                    10

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 615168685

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |    14 |   812 |     6   (0)| 00:00:01 |
|*  1 |  HASH JOIN         |      |    14 |   812 |     6   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| DEPT |     4 |    80 |     3   (0)| 00:00:01 |
|   3 |   TABLE ACCESS FULL| EMP  |    14 |   532 |     3   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access(&quot;B&quot;.&quot;DEPTNO&quot;=&quot;A&quot;.&quot;DEPTNO&quot;)

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1 (E - Syntax error (1))
---------------------------------------------------------------------------

   1 -  SEL$1
         E -  TG_PROFILE

SCOTT@ORACLE19&amp;gt;


SCOTT@ORACLE19&amp;gt;SELECT SQL_ID, PLAN_HASH_VALUE, SQL_PROFILE from dba_hist_sqlstat
               where sql_id in ( 'aq1rf843yf3bm'  ,'6d1sumdtz1mr8') ;  

SQL_ID        PLAN_HASH_VALUE SQL_PROFILE
------------- --------------- ------------------------------
aq1rf843yf3bm      4192419542

1 row selected. -- dba_hist_sqlstat 등록 확인 

SCOTT@ORACLE19&amp;gt;

------------------------------------------------------------------------------------------------------------------------------------
-- AWR PLAN 가지고 SQL PROFILE 만들기 
------------------------------------------------------------------------------------------------------------------------------------
-- apply plan : aq1rf843yf3bm 4192419542 SELECT /*+ TG_PROFILE ORDERED USE_NL(B) */ * FROM dept a, emp b WHERE b.deptno = a.deptno
-- target sql : 6d1sumdtz1mr8 615168685  SELECT /*+ TG_PROFILE ORDERED USE_HASH(B) */ * FROM dept a, emp b WHERE b.deptno = a.deptno
declare
ar_profile_hints sys.sqlprof_attr;
cl_sql_text clob;
begin
--select extractvalue(value, '/hint') as outline_hints bulk collect
select extractvalue(value(d), '/hint') as outline_hints bulk collect
into ar_profile_hints
from xmltable('/*/outline_data/hint' passing (select xmltype(other_xml) as xmlval
from dba_hist_sql_plan
where sql_id = 'aq1rf843yf3bm'                -- apply plan 
and plan_hash_value = 4192419542              -- apply plan 
and other_xml is not null ) ) d;

select sql_text
into cl_sql_text
-- from dba_hist_sqltext
from v$sql 
where sql_id = '6d1sumdtz1mr8';               -- target sql

dbms_sqltune.import_sql_profile(
sql_text =&amp;gt; cl_sql_text
, profile =&amp;gt; ar_profile_hints
, category =&amp;gt; 'DEFAULT'
, name =&amp;gt; '6d1sumdtz1mr8_profile'           -- target sql
-- use force_match =&amp;gt; true
-- to use CURSOR_SHARING=SIMILAR
-- behaviour, i.e. match even with
-- differing literals
, REPLACE =&amp;gt; TRUE
);
end;
/
-- 참고 : xmltable 의 value 함수 에러의 경우 value(d) 를 column_value로 변경하시기 바랍니다.
------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------
SQL&amp;gt; -- ENDABLE / DISABLED 확인
SQL&amp;gt; SELECT NAME, CATEGORY, SQL_TEXT, CREATED, DESCRIPTION, TYPE, STATUS, FORCE_MATCHING
FROM DBA_SQL_PROFILES;

NAME                    CATEGORY   SQL_TEXT                                                                                      CREATED                         DESCRIPTION   TYPE    STATUS   FOR
----------------------- ---------- --------------------------------------------------------------------------------------------- ------------------------------- ------------- ------- -------- ---
6d1sumdtz1mr8_profile   DEFAULT    SELECT /*+ TG_PROFILE ORDERED USE_HASH(B) */ * FROM dept a, emp b WHERE b.deptno = a.deptno   2022/04/25 20:09:43.876488                    MANUAL  ENABLED  NO 

1 rows selected.

-- SQL PROFILE 작동 확인 
SCOTT@ORACLE19&amp;gt;set autotrace on explain
SCOTT@ORACLE19&amp;gt;SELECT /*+ TG_PROFILE ORDERED USE_HASH(B) */ * FROM dept a, emp b WHERE b.deptno = a.deptno;

    DEPTNO DNAME          LOC                EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- -------------- ------------- ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
        10 ACCOUNTING     NEW YORK            7782 CLARK      MANAGER         7839 1981.06.09 00:00:00       2450                    10
        10 ACCOUNTING     NEW YORK            7839 KING       PRESIDENT            1981.11.17 00:00:00       5000                    10
        10 ACCOUNTING     NEW YORK            7934 MILLER     CLERK           7782 1982.01.23 00:00:00       1300                    10
        20 RESEARCH       DALLAS              7369 SMITH      CLERK           7902 1980.12.17 00:00:00        800                    20
        20 RESEARCH       DALLAS              7566 JONES      MANAGER         7839 1981.04.02 00:00:00       2975                    20
        20 RESEARCH       DALLAS              7788 SCOTT      ANALYST         7566 1982.12.09 00:00:00       3000                    20
        20 RESEARCH       DALLAS              7876 ADAMS      CLERK           7788 1983.01.12 00:00:00       1100                    20
        20 RESEARCH       DALLAS              7902 FORD       ANALYST         7566 1981.12.03 00:00:00       3000                    20
        30 SALES          CHICAGO             7499 ALLEN      SALESMAN        7698 1981.02.20 00:00:00       1600        300         30
        30 SALES          CHICAGO             7521 WARD       SALESMAN        7698 1981.02.22 00:00:00       1250        500         30
        30 SALES          CHICAGO             7654 MARTIN     SALESMAN        7698 1981.09.28 00:00:00       1250       1400         30
        30 SALES          CHICAGO             7698 BLAKE      MANAGER         7839 1981.05.01 00:00:00       2850                    30
        30 SALES          CHICAGO             7844 TURNER     SALESMAN        7698 1981.09.08 00:00:00       1500          0         30
        30 SALES          CHICAGO             7900 JAMES      CLERK           7698 1981.12.03 00:00:00        950                    30

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 4192419542

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |    14 |   812 |    10   (0)| 00:00:01 |
|   1 |  NESTED LOOPS      |      |    14 |   812 |    10   (0)| 00:00:01 |      &amp;lt;&amp;lt;&amp;lt;&amp;lt; NL 로 풀림 
|   2 |   TABLE ACCESS FULL| DEPT |     4 |    80 |     3   (0)| 00:00:01 |
|*  3 |   TABLE ACCESS FULL| EMP  |     4 |   152 |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter(&quot;B&quot;.&quot;DEPTNO&quot;=&quot;A&quot;.&quot;DEPTNO&quot;)

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 3 (U - Unused (2), E - Syntax error (1))
---------------------------------------------------------------------------

   1 -  SEL$1
         U -  ORDERED / rejected by IGNORE_OPTIM_EMBEDDED_HINTS
         E -  TG_PROFILE

   3 -  SEL$1 / B@SEL$1
         U -  USE_HASH(B) / rejected by IGNORE_OPTIM_EMBEDDED_HINTS

Note
-----
   - SQL profile &quot;6d1sumdtz1mr8_profile&quot; used for this statement              &amp;lt;&amp;lt;&amp;lt; SQL PROFILE 정보 NOTE 됨 

SCOTT@ORACLE19&amp;gt;


-- DISABLED SQL PROFILE 
EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE(NAME =&amp;gt; 'tune_tg_full', ATTRIBUTE_NAME  =&amp;gt; 'STATUS', VALUE =&amp;gt; 'DISABLED');

-- ENABLED SQL PROFILE 
EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE(NAME =&amp;gt; 'tune_tg_full', ATTRIBUTE_NAME  =&amp;gt; 'STATUS', VALUE =&amp;gt; 'ENABLED');

-- SQL PROFILE 정보 확인 ( ENDABLE / DISABLED )
SELECT NAME, CATEGORY, SQL_TEXT, CREATED, DESCRIPTION, TYPE, STATUS, FORCE_MATCHING
FROM DBA_SQL_PROFILES ;


-- SQL_PROFILE 삭제
EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE(NAME=&amp;gt;'6d1sumdtz1mr8_profile');

SELECT NAME, CATEGORY, SQL_TEXT, CREATED, DESCRIPTION, TYPE, STATUS, FORCE_MATCHING
FROM DBA_SQL_PROFILES ;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>awr</category>
      <category>License</category>
      <category>Profile</category>
      <category>SQL</category>
      <category>V$SQL</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/72</guid>
      <comments>https://darkturtle.tistory.com/72#entry72comment</comments>
      <pubDate>Tue, 26 Apr 2022 20:48:11 +0900</pubDate>
    </item>
    <item>
      <title>[호기심] 비번 재사용 제한 PROFILE 설정 상태에서, HASH 값을 통한 비번 변경 가능할까 ?</title>
      <link>https://darkturtle.tistory.com/71</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[호기심]&amp;nbsp;비번&amp;nbsp;재사용&amp;nbsp;제한&amp;nbsp;PROFILE&amp;nbsp;설정&amp;nbsp;상태에서,&amp;nbsp;HASH&amp;nbsp;값을&amp;nbsp;통한&amp;nbsp;비번&amp;nbsp;변경&amp;nbsp;가능할까&amp;nbsp;? &lt;br /&gt;[확인&amp;nbsp;결과]&amp;nbsp;어라&amp;nbsp;되네...&amp;nbsp;최종&amp;nbsp;값&amp;nbsp;형태가&amp;nbsp;아닌,&amp;nbsp;INPUT&amp;nbsp;되는&amp;nbsp;STRING&amp;nbsp;차이로&amp;nbsp;동일&amp;nbsp;비번&amp;nbsp;체크하는&amp;nbsp;듯&amp;nbsp;싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650776818153&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1. 일반 HASH 값으로 비번 변경 하기 

SYS@ORACLE19&amp;gt;

SYS@ORACLE19&amp;gt; SELECT USERNAME, CREATED,EXPIRY_DATE,PROFILE FROM DBA_USERS WHERE USERNAME ='SCOTT';

USERNAME                       CREATED             EXPIRY_DATE         PROFILE
------------------------------ ------------------- ------------------- --------------------
SCOTT                          2022.04.07 15:21:15 2022.10.11 17:47:09 DEFAULT

SYS@ORACLE19&amp;gt;select name , CTIME, PTIME, EXPTIME from  SYS.USER$ WHERE NAME ='SCOTT';

NAME                           CTIME               PTIME               EXPTIME
------------------------------ ------------------- ------------------- -------------------
SCOTT                          2022.04.07 15:21:15 2022.04.14 17:47:09 2022.10.11 17:47:09

select 'alter user '||s.name||' identified by values '||''''||spare4||';'||s.password||''';'
from  sys.user$ s, dba_users d
where 1=1
-- and   d.account_status ='EXPIRED(GRACE)'
and   s.name = d.username 
and   d.username ='SCOTT' ; 



ALTER USER SCOTT identified by values 'S:4790C45087E041C179602D469CCFDBB5137051EB98769C3C7CF3C1325208;T:3FCC96B8048017FA7FA24DF79792005027A2EC602DB55AED08D4040989DCC7BE20F660D21251E7469B7FAA7061D768F5BB70540A335BCBFF7B0AFD9A557A55AEA716C2E70DAE63282313AEADB497EB5D;';


SYS@ORACLE19&amp;gt;SELECT USERNAME, CREATED,EXPIRY_DATE,PROFILE FROM DBA_USERS WHERE USERNAME ='SCOTT';

USERNAME                       CREATED             EXPIRY_DATE         PROFILE
------------------------------ ------------------- ------------------- --------------------
SCOTT                          2022.04.07 15:21:15 2022.10.21 13:48:55 DEFAULT

SYS@ORACLE19&amp;gt;select name , CTIME, PTIME, EXPTIME from  SYS.USER$ WHERE NAME ='SCOTT';

NAME                           CTIME               PTIME               EXPTIME
------------------------------ ------------------- ------------------- -------------------
SCOTT                          2022.04.07 15:21:15 2022.04.24 13:48:55 2022.10.21 13:48:55

SYS@ORACLE19&amp;gt;SELECT SYSDATE FROM DUAL ;

SYSDATE
-------------------
2022.04.24 13:49:43

SYS@ORACLE19&amp;gt;

SYS@ORACLE19&amp;gt;ALTER USER SCOTT identified by values 'S:4790C45087E041C179602D469CCFDBB5137051EB98769C3C7CF3C1325208;T:3FCC96B8048017FA7FA24DF79792005027A2EC602DB55AED08D4040989DCC7BE20F660D21251E7469B7FAA7061D768F5BB70540A335BCBFF7B0AFD9A557A55AEA716C2E70DAE63282313AEADB497EB5D;';

User altered.


2. 비번 재사용 설정 후, 일반 HASH 값으로 비번 변경 하기 

SYS@ORACLE19&amp;gt;SELECT RESOURCE_NAME, LIMIT
FROM  DBA_PROFILES
WHERE PROFILE ='DEFAULT'
AND   RESOURCE_NAME IN ('PASSWORD_LIFE_TIME','PASSWORD_REUSE_TIME','PASSWORD_REUSE_MAX');  

RESOURCE_NAME                    LIMIT
-------------------------------- -----------------
PASSWORD_LIFE_TIME               180
PASSWORD_REUSE_TIME              UNLIMITED
PASSWORD_REUSE_MAX               UNLIMITED

-- https://docs.oracle.com/database/121/SQLRF/statements_6012.htm
-- PASSWORD_REUSE_TIME = 30, PASSWORD_REUSE_MAX = 10, PASSWORD 10 변경 후, 30일 후에 암호재 사용 가능  


SYS@ORACLE19&amp;gt;ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX 3;
Profile altered.

SYS@ORACLE19&amp;gt;ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_TIME 1 ;
Profile altered.

-- PASSWORD_REUSE_MAX  3  &amp;gt;&amp;gt;&amp;gt; 최소 3번 이상 변경 후, 동일 패스워드 사용 가능 
-- PASSWORD_REUSE_TIME 1  &amp;gt;&amp;gt;&amp;gt; 3번 변경 후, 1일 경과후 , PASSWORD_LIFE_TIME = 180 일이라, 4번째부터 첫번째 비번 사용가능 


SELECT RESOURCE_NAME, LIMIT
FROM  DBA_PROFILES
WHERE PROFILE ='DEFAULT'
AND   RESOURCE_NAME IN ('PASSWORD_LIFE_TIME','PASSWORD_REUSE_TIME','PASSWORD_REUSE_MAX');  

RESOURCE_NAME                    LIMIT
-------------------------------- --------------------------------------------------------------------------------------------------------------------------------
PASSWORD_LIFE_TIME               180
PASSWORD_REUSE_TIME              1
PASSWORD_REUSE_MAX               3

-- SCOTT 유저로 동일 비번으로 변경 시도 --&amp;gt; 실패 
SCOTT@ORACLE19&amp;gt;alter user scott identified by oracle123;
alter user scott identified by oracle123
*
ERROR at line 1:
ORA-28007: the password cannot be reused

-- SYS 유저로 동일 비번으로 변경 시도 --&amp;gt; 실패 
SYS@ORACLE19&amp;gt;alter user scott identified by oracle123;
alter user scott identified by oracle123
*
ERROR at line 1:
ORA-28007: the password cannot be reused


-- SYS 유저로 HASH 값으로 동일 비번으로 변경 시도 --&amp;gt; 성공 

SYS@ORACLE19&amp;gt;ALTER USER SCOTT identified by values 'S:4790C45087E041C179602D469CCFDBB5137051EB98769C3C7CF3C1325208;T:3FCC96B8048017FA7FA24DF79792005027A2EC602DB55AED08D4040989DCC7BE20F660D21251E7469B7FAA7061D768F5BB70540A335BCBFF7B0AFD9A557A55AEA716C2E70DAE63282313AEADB497EB5D;';

User altered.


SYS@ORACLE19&amp;gt;SELECT USERNAME, CREATED,EXPIRY_DATE,PROFILE FROM DBA_USERS WHERE USERNAME ='SCOTT';

USERNAME                       CREATED             EXPIRY_DATE         PROFILE
------------------------------ ------------------- ------------------- --------------------
SCOTT                          2022.04.07 15:21:15 2022.10.21 14:00:10 DEFAULT

SYS@ORACLE19&amp;gt;select name , CTIME, PTIME, EXPTIME from  SYS.USER$ WHERE NAME ='SCOTT';

NAME                           CTIME               PTIME               EXPTIME
------------------------------ ------------------- ------------------- -------------------
SCOTT                          2022.04.07 15:21:15 2022.04.24 14:00:10 2022.10.21 14:00:10
-- 1번 테스트 결과로 SYS.USER$,PTIME(비번 변경 시간) 이
-- &quot;2022.04.24 13:48:55&quot; 에서 &quot;2022.04.24 14:00:10&quot; 로 변경 확인

SYS@ORACLE19&amp;gt;SELECT SYSDATE FROM DUAL ;

SYSDATE
-------------------
2022.04.24 14:00:37

SYS@ORACLE19&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>Hash</category>
      <category>oracle</category>
      <category>password</category>
      <category>PASSWORD_REUSE_MAX</category>
      <category>PASSWORD_REUSE_TIME</category>
      <category>Profile</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/71</guid>
      <comments>https://darkturtle.tistory.com/71#entry71comment</comments>
      <pubDate>Sun, 24 Apr 2022 14:07:22 +0900</pubDate>
    </item>
    <item>
      <title>DB UPGRADE 전, SPB로 보험 들기 ( 주의  !!! 실제 해보진 않음  )</title>
      <link>https://darkturtle.tistory.com/70</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;------------------------------------------------------------------------------------------------------------&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;--&amp;nbsp;상황&amp;nbsp;:&amp;nbsp;DB&amp;nbsp;UPGRADE&amp;nbsp;전,&amp;nbsp;AWR&amp;nbsp;기준으로&amp;nbsp;TOP&amp;nbsp;30&amp;nbsp;쿼리를&amp;nbsp;SPB(SQL&amp;nbsp;PLAN&amp;nbsp;BASELINE)&amp;nbsp;에&amp;nbsp;등록&amp;nbsp;ENABLED=NO&amp;nbsp;후,&amp;nbsp;이슈&amp;nbsp;발생&amp;nbsp;시,&amp;nbsp;ENABLED=YES&amp;nbsp;켜지 &lt;br /&gt;------------------------------------------------------------------------------------------------------------ &lt;/p&gt;
&lt;pre id=&quot;code_1650533899903&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;------------------------------------------------------------------------------------------------------------
-- 1. AWR 기준으로 TOP 30 쿼리를 SPB(SQL PLAN BASELINE) 에 등록 ENABLED=NO  등록 
------------------------------------------------------------------------------------------------------------   
SELECT RN, SQL_INFO, MIN_SNAP_ID, MAX_SNAP_ID, SQL_ID, PLAN_HASH_VALUE, MODULE, PARSING_SCHEMA_NAME, &quot;TOTAL_ELAPSED(S)&quot;,ELPASED_TIME_RAITO, &quot;ELAPSED/EXE(MS)&quot;
       ,'VAR CNT NUMBER ' AS FIRST_ROWS_LOAD_FROM_AWR
       -- , 'EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_AWR(BEGIN_SNAP=&amp;gt;'||MIN_SNAP_ID||',END_SNAP=&amp;gt;'||MAX_SNAP_ID||', BASIC_FILTER=&amp;gt;q''# SQL_ID='''||sql_id||''' AND PLAN_HASH_VALUE ='||PLAN_HASH_VALUE||' #'');' AS REGISTER_SPM_FROM_AWR        
       , 'EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_AWR(BEGIN_SNAP=&amp;gt;'||MIN_SNAP_ID||',END_SNAP=&amp;gt;'||MAX_SNAP_ID||', BASIC_FILTER=&amp;gt;q''# SQL_ID='''||sql_id||''' AND PLAN_HASH_VALUE ='||PLAN_HASH_VALUE||' #'', ENABLED=&amp;gt;''NO'');' AS LOAD_FROM_AWR
FROM  ( 
SELECT ROWNUM AS RN, T.*
FROM  (
SELECT SQL_ID, PLAN_HASH_VALUE, FORCE_MATCHING_SIGNATURE, MODULE, PARSING_SCHEMA_NAME   
       ,COUNT( DISTINCT PLAN_HASH_VALUE ) OVER ( PARTITION BY SQL_ID) AS &quot;PLAN_COUNT&quot;
       ,MIN(SNAP_ID) AS MIN_SNAP_ID
       ,MAX(SNAP_ID) AS MAX_SNAP_ID 
       ,SUM(EXECUTIONS_DELTA) AS &quot;TOTAL_EXE&quot;,       
       ROUND(SUM(ELAPSED_TIME_DELTA/1000000)) AS &quot;TOTAL_ELAPSED(S)&quot;,
       ROUND(RATIO_TO_REPORT(SUM(ELAPSED_TIME_DELTA)) OVER () *100,1) AS ELPASED_TIME_RAITO, -- gfw4410md31u1
       ROUND(SUM(CPU_TIME_DELTA/1000000)) AS &quot;TOTAL_CPU(S)&quot;,
       ROUND(RATIO_TO_REPORT(SUM(CPU_TIME_DELTA)) OVER () *100,1) AS CPU_TIME_RAITO,
       ROUND(SUM(ELAPSED_TIME_DELTA/1000)/DECODE(SUM(EXECUTIONS_DELTA),0,1,SUM(EXECUTIONS_DELTA))) AS &quot;ELAPSED/EXE(MS)&quot;,    -- a19cxsswgfzvx fpb0t0hg17d70
       ROUND(RATIO_TO_REPORT(SUM(ELAPSED_TIME_DELTA)) OVER () *100,1) AS EXEC_RAITO,
       SUM(ROWS_PROCESSED_DELTA) AS &quot;TOTAL_ROWS&quot;,
       ROUND(SUM(ROWS_PROCESSED_DELTA)/DECODE(SUM(EXECUTIONS_DELTA),0,1,SUM(EXECUTIONS_DELTA))) AS &quot;ROWS/EXE&quot;,      
       SUM(PARSE_CALLS_DELTA) AS &quot;TOTAL_PARSE_COUNT&quot;,
       ROUND(RATIO_TO_REPORT(SUM(PARSE_CALLS_DELTA)) OVER () *100,1)  AS &quot;PARSE_RATIO&quot;,    
       SUM(BUFFER_GETS_DELTA) AS &quot;TOTAL_LOGICAL&quot;,
       SUM(DISK_READS_DELTA) AS &quot;TOTAL_DISK&quot;, 
       ROUND(SUM(DISK_READS_DELTA)/DECODE(SUM(EXECUTIONS_DELTA),0,1,SUM(EXECUTIONS_DELTA))) AS &quot;DISK/EXE&quot;,
       ROUND(RATIO_TO_REPORT(SUM(DISK_READS_DELTA)) OVER () *100,1) AS DISK_RAITO,
       ROUND(SUM(BUFFER_GETS_DELTA)/DECODE(SUM(EXECUTIONS_DELTA),0,1,SUM(EXECUTIONS_DELTA))) AS &quot;BUFFER/EXE&quot;,
       ROUND(RATIO_TO_REPORT(SUM(BUFFER_GETS_DELTA)) OVER () *100,1) AS BUFFER_RAITO,
       ROUND(SUM(APWAIT_DELTA/1000)) AS &quot;TOTAL_APWAIT(MS)&quot;,       
       ROUND(SUM(APWAIT_DELTA)/DECODE(SUM(EXECUTIONS_DELTA),0,1,SUM(EXECUTIONS_DELTA))) AS &quot;APWAIT/EXE(us)&quot;,
       ROUND(RATIO_TO_REPORT(SUM(APWAIT_DELTA)) OVER () *100,1) AS APP_TIME_RAITO,
       ROUND(SUM(DIRECT_WRITES_DELTA)) AS &quot;DIRECT_WRITES_DELTA&quot;,       
       ROUND(SUM(CLWAIT_DELTA/1000000)) AS &quot;CLWAIT_DELTA_SUM(S)&quot;, 
       ROUND(SUM(CLWAIT_DELTA/1000)/DECODE(SUM(EXECUTIONS_DELTA),0,1,SUM(EXECUTIONS_DELTA))) AS &quot;CLWAIT/EXE(ms)&quot;,
       ROUND(RATIO_TO_REPORT(SUM(CLWAIT_DELTA)) OVER () *100,1) AS CLWAIT_TIME_RAITO,              
       ROUND(SUM(CCWAIT_DELTA/1000000)) AS &quot;CCWAIT_DELTA_SUM(S)&quot; , 
       ROUND(SUM(CCWAIT_DELTA/1000)/DECODE(SUM(EXECUTIONS_DELTA),0,1,SUM(EXECUTIONS_DELTA))) AS &quot;CON_WAIT/EXE(ms)&quot;,
       ROUND(RATIO_TO_REPORT(SUM(CCWAIT_DELTA)) OVER () *100,1) AS CCWAIT_TIME_RAITO,              
       ( SELECT SQL_TEXT FROM DBA_HIST_SQLTEXT S3 WHERE S1.SQL_ID = S3.SQL_ID ) AS SQL_INFO
FROM   DBA_HIST_SQLSTAT S1
       , ( SELECT MIN(SNAP_ID) AS START_SNAP_ID , MAX(SNAP_ID) AS END_SNAP_ID 
           FROM   DBA_HIST_SNAPSHOT
           --WHERE  BEGIN_INTERVAL_TIME BETWEEN TO_DATE('2019/09/17 07:00:00','YYYY/MM/DD HH24:MI:SS')   -- 43dahf6vxhazt SELECT * FROM QRTZ_MGT_LOCKS WHERE LOCK_NAME = :1  FOR UPDATE
                                    --AND     TO_DATE('2019/09/17 08:00:00','YYYY/MM/DD HH24:MI:SS')
             WHERE  BEGIN_INTERVAL_TIME BETWEEN SYSDATE -  3 -- :START_DAYS
                                     AND     SYSDATE 
                                      ) S2                                      
WHERE S1.SNAP_ID BETWEEN S2.START_SNAP_ID AND S2.END_SNAP_ID 
AND   1=1
-- AND   S1.PARSING_SCHEMA_NAME NOT IN ( 'OPS$ORACLE','SYS','SYSTEM') 
AND  S1.PARSING_SCHEMA_NAME ='SCOTT'
AND  S1.PLAN_HASH_VALUE != 0 
--AND   S1.MODULE IN ('SQL*Plus')
AND   S1.SQL_ID IN ('6d06qd7tv32hp','7ck4atqcg485x') 
--AND S1.PLAN_HASH_VALUE =1756381138 
GROUP BY SQL_ID, PLAN_HASH_VALUE , FORCE_MATCHING_SIGNATURE, MODULE, PARSING_SCHEMA_NAME
ORDER BY  ROUND(SUM(ELAPSED_TIME_DELTA/1000000))  DESC NULLS LAST 
-- ORDER BY ROUND(SUM(APWAIT_DELTA/1000))  DESC NULLS LAST 
) T 
WHERE MIN_SNAP_ID != MAX_SNAP_ID
)
WHERE RN &amp;lt;= 100 

VAR CNT NUMBER 
EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_AWR(BEGIN_SNAP=&amp;gt;31,END_SNAP=&amp;gt;34, BASIC_FILTER=&amp;gt;q'# SQL_ID='6d06qd7tv32hp' AND PLAN_HASH_VALUE =1012929312 #', ENABLED=&amp;gt;'NO');
EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_AWR(BEGIN_SNAP=&amp;gt;30,END_SNAP=&amp;gt;34, BASIC_FILTER=&amp;gt;q'# SQL_ID='6d06qd7tv32hp' AND PLAN_HASH_VALUE =1642965905 #', ENABLED=&amp;gt;'NO');
EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_AWR(BEGIN_SNAP=&amp;gt;46,END_SNAP=&amp;gt;47, BASIC_FILTER=&amp;gt;q'# SQL_ID='7ck4atqcg485x' AND PLAN_HASH_VALUE =3643076765 #', ENABLED=&amp;gt;'NO');
EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_AWR(BEGIN_SNAP=&amp;gt;46,END_SNAP=&amp;gt;47, BASIC_FILTER=&amp;gt;q'# SQL_ID='7ck4atqcg485x' AND PLAN_HASH_VALUE =2071717713 #', ENABLED=&amp;gt;'NO');
EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_AWR(BEGIN_SNAP=&amp;gt;30,END_SNAP=&amp;gt;31, BASIC_FILTER=&amp;gt;q'# SQL_ID='6d06qd7tv32hp' AND PLAN_HASH_VALUE =1756381138 #', ENABLED=&amp;gt;'NO');


------------------------------------------------------------------------------------------------------------
-- 2. 이슈 발생 쿼리에 대한  SPB(SQL PLAN BASELINE) 에 등록 ENABLED=YES 로 수정 
------------------------------------------------------------------------------------------------------------   
-- [참고]DBMS_SPM.ALTER_SQL_PLAN_BASELINE 으로는 ACCEPTED 를 설정할 수 없음  // enabled, fixed, autopurge 등 설정 가능 
DECLARE
    x number;
BEGIN
x := dbms_spm.ALTER_SQL_PLAN_BASELINE
 ('SQL_2a1b71d655a6c233',
  'SQL_PLAN_2n6vjutaudhjm0dc6bb43',
  ATTRIBUTE_NAME =&amp;gt; 'ENABLED',
  ATTRIBUTE_VALUE =&amp;gt; 'YES');
END;
/


------------------------------------------------------------------------------------------------------------
-- 3. 필요 시, 해당 SQL_ID PURGE 
------------------------------------------------------------------------------------------------------------   
-- RAC 면 노드 별로 수행해야함 
--- 특정 SQL 전체(SQL_TEXT 및 SQL_PLAN) PURGE 하기
Select 'execute sys.dbms_shared_pool.purge('''||address||','||hash_value||''',''C'',64)' AS PURGE_BY_SQL_ID 
From  v$sqlarea
WHERE SQL_TEXT LIKE 'SELECT /*+ ORG_SQL */%'    ; 

--- 특정 SQL의 PLAN만 PURGE 하기
Select 'execute sys.dbms_shared_pool.purge('''||address||','||hash_value||''',''C'',64)'
From  v$sqlarea
WHERE SQL_TEXT LIKE 'SELECT /*+ ORG_SQL */%'  ;


------------------------------------------------------------------------------------------------------------
-- 4. SPB 사용 확인
------------------------------------------------------------------------------------------------------------   
select sql_id, plan_hash_value, SQL_PLAN_BASELINE, substr(sql_text,1,30) as sql_info 
from v$sql
where sql_text like 'SELECT /*+ ORG_SQL */%'    ;

-- 끝 --&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>awr</category>
      <category>SPB</category>
      <category>SQL PLAN BASELINE</category>
      <category>Upgrade</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/70</guid>
      <comments>https://darkturtle.tistory.com/70#entry70comment</comments>
      <pubDate>Thu, 21 Apr 2022 18:38:44 +0900</pubDate>
    </item>
    <item>
      <title>SPB 활용</title>
      <link>https://darkturtle.tistory.com/69</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;------------------------------------------------------------------------------------------------------------&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;--&amp;nbsp;상황&amp;nbsp;:&amp;nbsp;SQL&amp;nbsp;의&amp;nbsp;PLAN&amp;nbsp;변경으로&amp;nbsp;긴급&amp;nbsp;이슈&amp;nbsp;발생&amp;nbsp;+&amp;nbsp;우선&amp;nbsp;GOOD&amp;nbsp;PLAN&amp;nbsp;으로&amp;nbsp;고정&amp;nbsp;,&amp;nbsp;이후&amp;nbsp;GOOD&amp;nbsp;PLAN&amp;nbsp;으로&amp;nbsp;소스&amp;nbsp;변경&amp;nbsp;및&amp;nbsp;APPLICATION&amp;nbsp;수정&amp;nbsp; &lt;br /&gt;------------------------------------------------------------------------------------------------------------ &lt;br /&gt;--&amp;nbsp;참고&amp;nbsp;:&amp;nbsp;SPB(SQL&amp;nbsp;PLAN&amp;nbsp;BASELINE)은&amp;nbsp;12C&amp;nbsp;Enterprise&amp;nbsp;Edition&amp;nbsp;에서&amp;nbsp;사용&amp;nbsp;가능&amp;nbsp;,&amp;nbsp;18c&amp;nbsp;부터는&amp;nbsp;SE2&amp;nbsp;도&amp;nbsp;사용&amp;nbsp;가능&amp;nbsp;(&amp;nbsp;PLAN&amp;nbsp;하나만&amp;nbsp;가능,&amp;nbsp;EVOLVE&amp;nbsp;불가&amp;nbsp;) &lt;br /&gt;------------------------------------------------------------------------------------------------------------ &lt;br /&gt;--&amp;nbsp;요약&amp;nbsp; &lt;br /&gt;--&amp;nbsp;1.&amp;nbsp;BAD&amp;nbsp;PLAN&amp;nbsp;SQL&amp;nbsp;등록&amp;nbsp;(&amp;nbsp;FROM&amp;nbsp;CACHE&amp;nbsp;WITH&amp;nbsp;ENABLED=NO&amp;nbsp;) &lt;br /&gt;select&amp;nbsp;sql_id,&amp;nbsp;plan_hash_value,&amp;nbsp;substr(sql_text,1,30)&amp;nbsp;as&amp;nbsp;sql_info&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;'VAR&amp;nbsp;CNT&amp;nbsp;NUMBER'&amp;nbsp;AS&amp;nbsp;FIRST_ROWS_LOAD_PLAN &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;'EXEC&amp;nbsp;:CNT&amp;nbsp;:=&amp;nbsp;DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID=&amp;gt;'''||sql_id||''');'&amp;nbsp;AS&amp;nbsp;REGISTER_SPM_FROM_CACHE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;'EXEC&amp;nbsp;:CNT&amp;nbsp;:=&amp;nbsp;DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID=&amp;gt;'''||sql_id||''',PLAN_HASH_VALUE=&amp;gt;'''||PLAN_HASH_VALUE||''',ENABLED=&amp;gt;''NO''&amp;nbsp;);'&amp;nbsp;AS&amp;nbsp;REGISTER_SPM_FROM_CACHE_PLAN_HASH_VALUE_ENABLED_NO&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;from&amp;nbsp;v$sql &lt;br /&gt;where&amp;nbsp;sql_text&amp;nbsp;like&amp;nbsp;'SELECT&amp;nbsp;/*+&amp;nbsp;ORG_SQL&amp;nbsp;*/%'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; &lt;br /&gt;--&amp;nbsp;2.&amp;nbsp;힌트를&amp;nbsp;통해&amp;nbsp;GOOD&amp;nbsp;PLAN&amp;nbsp;튜닝&amp;nbsp; &lt;br /&gt;--&amp;nbsp;3.&amp;nbsp;GOOD&amp;nbsp;PLAN&amp;nbsp;등록&amp;nbsp;(&amp;nbsp;FROM&amp;nbsp;CACHE&amp;nbsp;IWTH&amp;nbsp;ENABLED=YES&amp;nbsp;)&amp;nbsp; &lt;br /&gt;select&amp;nbsp;sql_id,&amp;nbsp;plan_hash_value,&amp;nbsp;substr(sql_text,1,30)&amp;nbsp;as&amp;nbsp;sql_info&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;'VAR&amp;nbsp;CNT&amp;nbsp;NUMBER'&amp;nbsp;AS&amp;nbsp;FIRST_ROWS_LOAD_PLAN &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;'EXEC&amp;nbsp;:CNT&amp;nbsp;:=&amp;nbsp;DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID=&amp;gt;'''||sql_id||''');'&amp;nbsp;AS&amp;nbsp;REGISTER_SPM_FROM_CACHE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;'EXEC&amp;nbsp;:CNT&amp;nbsp;:=&amp;nbsp;DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID=&amp;gt;'''||sql_id||''',PLAN_HASH_VALUE=&amp;gt;'''||PLAN_HASH_VALUE||''',ENABLED=&amp;gt;''YES''&amp;nbsp;);'&amp;nbsp;AS&amp;nbsp;REGISTER_SPM_FROM_CACHE_PLAN_HASH_VALUE_ENABLED_NO&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;from&amp;nbsp;v$sql &lt;br /&gt;where&amp;nbsp;sql_text&amp;nbsp;like&amp;nbsp;'SELECT&amp;nbsp;/*+&amp;nbsp;ORG_SQL&amp;nbsp;*/%'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650533656755&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;------------------------------------------------------------------------------------------------------------
-- 1. 테스트 테이블 생성 
------------------------------------------------------------------------------------------------------------
CREATE TABLE SPB01 ( ID NUMBER, NAME VARCHAR2(100)) ;
--
CREATE TABLE SPB02 ( VID NUMBER, ID NUMBER, NAME VARCHAR2(100)) ;

DECLARE 
I NUMBER := 1 ;
BEGIN
 FOR I IN 1..100
 LOOP 
 INSERT INTO  SPB01 VALUES ( I, I||' INSERTED ');
 END LOOP ;
COMMIT; 
END ;

DECLARE 
I NUMBER := 1 ;
J NUMBER := 1 ; 
BEGIN
 FOR J IN 1..10000  LOOP    
   I := ROUND(DBMS_RANDOM.VALUE(1,100)) ;
   INSERT INTO  SPB02 VALUES ( J, I, I||' INSERTED ');
  END LOOP ; 
COMMIT; 
END ;


CREATE INDEX XPK_SPB01 ON SPB01 ( ID ) ;
ALTER TABLE SPB01 ADD CONSTRAINT XPK_SPB01 PRIMARY KEY ( ID ) ;

CREATE INDEX XPK_SPB02 ON SPB02 ( VID ) ;
CREATE INDEX XAK01_SPB02 ON SPB02 ( ID ) ;
ALTER TABLE SPB02 ADD CONSTRAINT XPK_SPB02 PRIMARY KEY ( VID ) ;   

exec dbms_stats.gather_table_stats(ownname =&amp;gt; 'SCOTT', tabname=&amp;gt; 'SPB01');
exec dbms_stats.gather_table_stats(ownname =&amp;gt; 'SCOTT', tabname=&amp;gt; 'SPB02');

------------------------------------------------------------------------------------------------------------
-- 2. ORG(BAD) PLAN 등록 
------------------------------------------------------------------------------------------------------------
-- ORG PLAN 
SELECT A.ID, COUNT(*)
FROM   SPB01 A, SPB02 B
WHERE  A.ID = B.ID 
AND    A.ID = 1 
GROUP BY A.ID 

Rows     Row Source Operation
-------  ---------------------------------------------------
      0  STATEMENT
      1   SORT GROUP BY NOSORT (cr=3 pr=4 pw=0 str=1 time=299 us cost=1 size=600 card=100)
     49    NESTED LOOPS  (cr=3 pr=4 pw=0 str=1 time=329 us cost=1 size=600 card=100)
      1     INDEX RANGE SCAN XPK_SPB01 (cr=1 pr=0 pw=0 str=1 time=10 us cost=0 size=3 card=1)(Object ID 25181)
     49     INDEX RANGE SCAN XAK01_SPB02 (cr=2 pr=4 pw=0 str=1 time=316 us cost=1 size=300 card=100)(Object ID 25190)

-- TUNING(수정) PLAN 	 
SELECT /*+ ORDERED USE_MERGE(B) */  A.ID, COUNT(*)
FROM   SPB01 A, SPB02 B
WHERE  A.ID = B.ID 
AND    A.ID = 1 
GROUP BY A.ID 	 

Rows     Row Source Operation
-------  ---------------------------------------------------
      0  STATEMENT
      1   SORT GROUP BY NOSORT (cr=3 pr=0 pw=0 str=1 time=57 us cost=1 size=600 card=100)
     49    MERGE JOIN CARTESIAN (cr=3 pr=0 pw=0 str=1 time=37 us cost=1 size=600 card=100)
      1     INDEX RANGE SCAN XPK_SPB01 (cr=1 pr=0 pw=0 str=1 time=10 us cost=0 size=3 card=1)(Object ID 25181)
     49     BUFFER SORT (cr=2 pr=0 pw=0 str=1 time=23 us cost=1 size=300 card=100)
     49      INDEX RANGE SCAN XAK01_SPB02 (cr=2 pr=0 pw=0 str=1 time=7 us cost=1 size=300 card=100)(Object ID 25190)


set autotrace on explain 

SELECT /*+ ORG_SQL */  A.ID, COUNT(*)
FROM   SPB01 A, SPB02 B
WHERE  A.ID = B.ID 
AND    A.ID = 1 
GROUP BY A.ID ;

       ID   COUNT(*)
---------- ----------
         1         49


Execution Plan
----------------------------------------------------------
Plan hash value: 2071717713

------------------------------------------------------------------------------------
| Id  | Operation            | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |             |   100 |   600 |     1   (0)| 00:00:01 |
|   1 |  SORT GROUP BY NOSORT|             |   100 |   600 |     1   (0)| 00:00:01 |
|   2 |   NESTED LOOPS       |             |   100 |   600 |     1   (0)| 00:00:01 |  &amp;lt;&amp;lt;&amp;lt; NL 확인 
|*  3 |    INDEX RANGE SCAN  | XPK_SPB01   |     1 |     3 |     0   (0)| 00:00:01 |
|*  4 |    INDEX RANGE SCAN  | XAK01_SPB02 |   100 |   300 |     1   (0)| 00:00:01 |
------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access(&quot;A&quot;.&quot;ID&quot;=1)
   4 - access(&quot;B&quot;.&quot;ID&quot;=1)

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1 (E - Syntax error (1))
---------------------------------------------------------------------------

   1 -  SEL$1
         E -  ORG_SQL


set autotrace off  


select sql_id, plan_hash_value, substr(sql_text,1,30) as sql_info 
from v$sql
where sql_text like 'SELECT /*+ ORG_SQL */%'    ;
 
SQL_ID        PLAN_HASH_VALUE SQL_INFO
------------- --------------- ------------------------------------------------------------------------------------------------------------------------
7ck4atqcg485x      2071717713 SELECT /*+ ORG_SQL */  A.ID, C

select sql_id, plan_hash_value, substr(sql_text,1,30) as sql_info 
      , 'VAR CNT NUMBER' AS FIRST_ROWS_LOAD_PLAN
     -- , 'EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID=&amp;gt;'''||sql_id||''');' AS REGISTER_SPM_FROM_CACHE    
      , 'EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID=&amp;gt;'''||sql_id||''',PLAN_HASH_VALUE=&amp;gt;'''||PLAN_HASH_VALUE||''',ENABLED=&amp;gt;''NO'' );' AS REGISTER_SPM_FROM_CACHE_PLAN_HASH_VALUE_ENABLED_NO     
from v$sql
where sql_text like 'SELECT /*+ ORG_SQL */%'    ;

VAR CNT NUMBER
EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID=&amp;gt;'7ck4atqcg485x',PLAN_HASH_VALUE=&amp;gt;'2071717713',ENABLED=&amp;gt;'NO' );

set linesize 180
col SQL_HANDLE for a30
col PLAN_NAME for a40
col ORIGIN for a30 

SELECT SQL_HANDLE, PLAN_NAME, ORIGIN, ENABLED, ACCEPTED, FIXED, OPTIMIZER_COST 
FROM  DBA_SQL_PLAN_BASELINES 
WHERE SQL_TEXT LIKE 'SELECT /*+ ORG_SQL */%'    ;

SQL_HANDLE                     PLAN_NAME                                ORIGIN                         ENA ACC FIX OPTIMIZER_COST
------------------------------ ---------------------------------------- ------------------------------ --- --- --- --------------
SQL_e7c63e111e8dca8f           SQL_PLAN_fgjjy24g8vkng088ea972           MANUAL-LOAD-FROM-CURSOR-CACHE  NO  YES NO               1

-- ENABLED = NO !!!!
-- SQL_HANDLE ='SQL_e7c63e111e8dca8f'  Keep 
set autotrace on explain 

------------------------------------------------------------------------------------------------------------
-- 3. GOOD(TUNING) 
------------------------------------------------------------------------------------------------------------

SELECT /*+ ORDERED USE_MERGE(B) TUNING_SQL */  A.ID, COUNT(*)
FROM   SPB01 A, SPB02 B
WHERE  A.ID = B.ID 
AND    A.ID = 1 
GROUP BY A.ID ;

        ID   COUNT(*)
---------- ----------
         1         49


Execution Plan
----------------------------------------------------------
Plan hash value: 3643076765

-------------------------------------------------------------------------------------
| Id  | Operation             | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |             |   100 |   600 |     1   (0)| 00:00:01 |
|   1 |  SORT GROUP BY NOSORT |             |   100 |   600 |     1   (0)| 00:00:01 |
|   2 |   MERGE JOIN CARTESIAN|             |   100 |   600 |     1   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN   | XPK_SPB01   |     1 |     3 |     0   (0)| 00:00:01 |
|   4 |    BUFFER SORT        |             |   100 |   300 |     1   (0)| 00:00:01 |
|*  5 |     INDEX RANGE SCAN  | XAK01_SPB02 |   100 |   300 |     1   (0)| 00:00:01 |
-------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access(&quot;A&quot;.&quot;ID&quot;=1)
   5 - access(&quot;B&quot;.&quot;ID&quot;=1)

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 2 (U - Unused (1), E - Syntax error (1))
---------------------------------------------------------------------------

   1 -  SEL$1
         E -  TUNING_SQL

   5 -  SEL$1 / B@SEL$1
         U -  USE_MERGE(B)

set autotrace off 


------------------------------------------------------------------------------------------------------------
-- 4. GOOD(TUNING) 등록 FROM CACHE 
------------------------------------------------------------------------------------------------------------

set linesize 180
col SQL_HANDLE for a30
col PLAN_NAME for a40
col ORIGIN for a30 

select sql_id, plan_hash_value, substr(sql_text,1,30) as sql_info 
from v$sql
where  sql_text like 'SELECT /*+ ORDERED USE_MERGE(B) TUNING_SQL */%'  ;

SQL_ID        PLAN_HASH_VALUE SQL_INFO
------------- --------------- ------------------------------------------------------------------------------------------------------------------------
1vc5rsuwbtt75      3643076765 SELECT /*+ ORDERED USE_MERGE(B  -- 코드 짤려서 주석으로 막기.. */ 


select sql_id, plan_hash_value, substr(sql_text,1,30) as sql_info 
      , 'VAR CNT NUMBER' AS FIRST_ROWS_LOAD_PLAN
     -- , 'EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID=&amp;gt;'''||sql_id||''');' AS REGISTER_SPM_FROM_CACHE    
      , 'EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID=&amp;gt;'''||sql_id||''',PLAN_HASH_VALUE=&amp;gt;'''||PLAN_HASH_VALUE||''',ENABLED=&amp;gt;''YES'' );' AS REGISTER_SPM_FROM_CACHE_PLAN_HASH_VALUE_ENABLED_NO     
from v$sql
where sql_text like 'SELECT /*+ ORDERED USE_MERGE(B) TUNING_SQL */%'  ;

VAR CNT NUMBER
EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID=&amp;gt;'1vc5rsuwbtt75',PLAN_HASH_VALUE=&amp;gt;'3643076765',ENABLED=&amp;gt;'YES' );
-- (기존 등록한) SQL_HANDLE=&amp;gt;'SQL_e7c63e111e8dca8f' 추가  
EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID=&amp;gt;'1vc5rsuwbtt75',PLAN_HASH_VALUE=&amp;gt;'3643076765',SQL_HANDLE=&amp;gt;'SQL_e7c63e111e8dca8f',ENABLED=&amp;gt;'YES' );

-- 등록 확인

set linesize 180
col SQL_HANDLE for a30
col PLAN_NAME for a40
col ORIGIN for a30 

SELECT SQL_HANDLE, PLAN_NAME, ORIGIN, ENABLED, ACCEPTED, FIXED, OPTIMIZER_COST 
FROM  DBA_SQL_PLAN_BASELINES 
WHERE SQL_TEXT LIKE 'SELECT /*+ ORG_SQL */%'    ;

SQL_HANDLE                     PLAN_NAME                                ORIGIN                         ENA ACC FIX OPTIMIZER_COST
------------------------------ ---------------------------------------- ------------------------------ --- --- --- --------------
SQL_e7c63e111e8dca8f           SQL_PLAN_fgjjy24g8vkng088ea972           MANUAL-LOAD-FROM-CURSOR-CACHE  NO  YES NO               1
SQL_e7c63e111e8dca8f           SQL_PLAN_fgjjy24g8vkng9647415a           MANUAL-LOAD-FROM-CURSOR-CACHE  YES YES NO               1

ENABLED = YES 로 확인됨 

------------------------------------------------------------------------------------------------------------
-- 4. GOOD(TUNING) 등록 FROM AWR 
------------------------------------------------------------------------------------------------------------
-- 동일 쿼리는 COLORED SQL 로 등록 ( AWR 등록을 위해서 )
execute dbms_workload_repository.add_colored_sql('1vc5rsuwbtt75')
-- snap_shot 찍기 
select dbms_workload_repository.create_snapshot() AS Snap_id from dual ;  
-- 해당 쿼리 반복 수행 ( 3회 ) 
-- snap_shot 찍기 
select dbms_workload_repository.create_snapshot() AS Snap_id from dual ;  
-- awr ( dba_hist_sqlstat 등록 확인 )

SELECT  SNAP_ID, SQL_ID, PLAN_HASH_VALUE
FROM   DBA_HIST_SQLSTAT WHERE SQL_ID ='1vc5rsuwbtt75';
   SNAP_ID SQL_ID        PLAN_HASH_VALUE
---------- ------------- ---------------
        50 1vc5rsuwbtt75      3643076765

-- snap_shot 찍기 
select dbms_workload_repository.create_snapshot() AS Snap_id from dual ; 


SELECT T.*
       ,'VAR CNT NUMBER ' AS FIRST_ROWS_LOAD_FROM_AWR
       , 'EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_AWR(BEGIN_SNAP=&amp;gt;'||MIN_SNAP_ID||',END_SNAP=&amp;gt;'||MAX_SNAP_ID||', BASIC_FILTER=&amp;gt;q''# SQL_ID='''||sql_id||''' AND PLAN_HASH_VALUE ='||PLAN_HASH_VALUE||' #'');' AS LOAD_FROM_AWR
       , 'EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_AWR(BEGIN_SNAP=&amp;gt;'||MIN_SNAP_ID||',END_SNAP=&amp;gt;'||MAX_SNAP_ID||', BASIC_FILTER=&amp;gt;q''# SQL_ID='''||sql_id||''' AND PLAN_HASH_VALUE ='||PLAN_HASH_VALUE||' #'', ENABLED=&amp;gt;''NO'');' AS LOAD_FROM_AWR
FROM ( SELECT  SQL_ID, PLAN_HASH_VALUE, MIN(SNAP_ID)  AS MIN_SNAP_ID, MAX(SNAP_ID) AS MAX_SNAP_ID        
       FROM   DBA_HIST_SQLSTAT 
       WHERE SQL_ID ='1vc5rsuwbtt75'
       GROUP BY SQL_ID, PLAN_HASH_VALUE ) T ;

VAR CNT NUMBER 
EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_AWR(BEGIN_SNAP=&amp;gt;50,END_SNAP=&amp;gt;53, BASIC_FILTER=&amp;gt;q'# SQL_ID='1vc5rsuwbtt75' AND PLAN_HASH_VALUE =3643076765 #');
EXEC :CNT := DBMS_SPM.LOAD_PLANS_FROM_AWR(BEGIN_SNAP=&amp;gt;50,END_SNAP=&amp;gt;53, BASIC_FILTER=&amp;gt;q'# SQL_ID='1vc5rsuwbtt75' AND PLAN_HASH_VALUE =3643076765 #', ENABLED=&amp;gt;'NO');

--등록 확인

set linesize 180
col SQL_HANDLE for a30
col PLAN_NAME for a40
col ORIGIN for a30 
col sql_plan_baseline for a40 
SELECT SQL_HANDLE, PLAN_NAME, ORIGIN, ENABLED, ACCEPTED, FIXED, OPTIMIZER_COST ,CREATED
FROM  DBA_SQL_PLAN_BASELINES  ; 

--&amp;gt;
SQL_HANDLE                     PLAN_NAME                                ORIGIN                         ENA ACC FIX OPTIMIZER_COST
------------------------------ ---------------------------------------- ------------------------------ --- --- --- --------------
CREATED
---------------------------------------------------------------------------
SQL_418148b2a312f00b           SQL_PLAN_430a8qajj5w0b9647415a           MANUAL-LOAD-FROM-AWR           NO  YES NO               1
21-APR-22 06.03.13.619183 PM




------------------------------------------------------------------------------------------------------------
-- 5. GOOD(TUNING) 작동 확인 &amp;lt;&amp;lt;&amp;lt; 별도로 PURGE 하지 않았음, 바로 적용되었음 ( 좀더 확인 필요 ) 
------------------------------------------------------------------------------------------------------------
-- 원래 쿼리 수행으로 반영 확인 
set autotrace on explain 

SELECT /*+ ORG_SQL */  A.ID, COUNT(*)
FROM   SPB01 A, SPB02 B
WHERE  A.ID = B.ID 
AND    A.ID = 1 
GROUP BY A.ID ;

        ID   COUNT(*)
---------- ----------
         1         49


Execution Plan
----------------------------------------------------------
Plan hash value: 3643076765

-------------------------------------------------------------------------------------
| Id  | Operation             | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |             |   100 |   600 |     1   (0)| 00:00:01 |
|   1 |  SORT GROUP BY NOSORT |             |   100 |   600 |     1   (0)| 00:00:01 |
|   2 |   MERGE JOIN CARTESIAN|             |   100 |   600 |     1   (0)| 00:00:01 |  &amp;lt;&amp;lt;&amp;lt; MERGE JOIN 확인됨 
|*  3 |    INDEX RANGE SCAN   | XPK_SPB01   |     1 |     3 |     0   (0)| 00:00:01 |
|   4 |    BUFFER SORT        |             |   100 |   300 |     1   (0)| 00:00:01 |
|*  5 |     INDEX RANGE SCAN  | XAK01_SPB02 |   100 |   300 |     1   (0)| 00:00:01 |
-------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access(&quot;A&quot;.&quot;ID&quot;=1)
   5 - access(&quot;B&quot;.&quot;ID&quot;=1)

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1 (E - Syntax error (1))
---------------------------------------------------------------------------

   1 -  SEL$1
         E -  ORG_SQL

Note
-----
   - SQL plan baseline &quot;SQL_PLAN_fgjjy24g8vkng9647415a&quot; used for this statement  &amp;lt;&amp;lt;&amp;lt; NOTE 로 확인됨 

SCOTT@ORACLE19&amp;gt;

set linesize 180
col SQL_HANDLE for a30
col PLAN_NAME for a40
col ORIGIN for a30 
col sql_plan_baseline for a40 

select sql_id, plan_hash_value, SQL_PLAN_BASELINE, substr(sql_text,1,20) as sql_info 
from v$sql
where sql_text like 'SELECT /*+ ORG_SQL */%'    ;

SQL_ID        PLAN_HASH_VALUE SQL_PLAN_BASELINE                        SQL_INFO
------------- --------------- ---------------------------------------- --------------------------------------------------------------------------------
7ck4atqcg485x      2071717713                                          SELECT /*+ ORG_SQL *   티스토리 코드 짤림 주석 막기 */
7ck4atqcg485x      3643076765 SQL_PLAN_fgjjy24g8vkng9647415a           SELECT /*+ ORG_SQL *   티스토리 코드 짤림 주석 막기 */

------------------------------------------------------------------------------------------------------------
-- 기타1 . SPB PLAN 보기
------------------------------------------------------------------------------------------------------------


  SELECT PLAN_TABLE_OUTPUT
      FROM   V$SQL s, DBA_SQL_PLAN_BASELINES b,
            TABLE( DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(b.sql_handle,b.plan_name,'basic')  ) t
     WHERE  s.EXACT_MATCHING_SIGNATURE = b.SIGNATURE
      AND    b.PLAN_NAME                = s.SQL_PLAN_BASELINE    
	  AND    b.sql_handle ='SQL_e7c63e111e8dca8f'
      AND    s.SQL_TEXT NOT LIKE '%DBA_SQL_PLAN_BASELINES%';
    -- AND    s.SQL_ID='31d96zzzpcys9';
	-- AND    s.SQL_TEXT LIKE 'select job_title%'

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------
SQL handle: SQL_e7c63e111e8dca8f
SQL text: SELECT /*+ ORG_SQL */  A.ID, COUNT(*) FROM   SPB01 A, SPB02 B WHERE
          A.ID = B.ID AND    A.ID = 1 GROUP BY A.ID
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
Plan name: SQL_PLAN_fgjjy24g8vkng9647415a         Plan id: 2521252186
Enabled: YES     Fixed: NO      Accepted: YES     Origin: MANUAL-LOAD-FROM-CURSOR-CACHE
Plan rows: From dictionary
--------------------------------------------------------------------------------

Plan hash value: 3643076765

---------------------------------------------
| Id  | Operation             | Name        |
---------------------------------------------
|   0 | SELECT STATEMENT      |             |
|   1 |  SORT GROUP BY NOSORT |             |
|   2 |   MERGE JOIN CARTESIAN|             |
|   3 |    INDEX RANGE SCAN   | XPK_SPB01   |
|   4 |    BUFFER SORT        |             |
|   5 |     INDEX RANGE SCAN  | XAK01_SPB02 |
---------------------------------------------

--------------------------------------------------------------------------------
SQL handle: SQL_e7c63e111e8dca8f
SQL text: SELECT /*+ ORG_SQL */  A.ID, COUNT(*) FROM   SPB01 A, SPB02 B WHERE
          A.ID = B.ID AND    A.ID = 1 GROUP BY A.ID
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
Plan name: SQL_PLAN_fgjjy24g8vkng9647415a         Plan id: 2521252186
Enabled: YES     Fixed: NO      Accepted: YES     Origin: MANUAL-LOAD-FROM-CURSOR-CACHE
Plan rows: From dictionary
--------------------------------------------------------------------------------

Plan hash value: 3643076765

---------------------------------------------
| Id  | Operation             | Name        |
---------------------------------------------
|   0 | SELECT STATEMENT      |             |
|   1 |  SORT GROUP BY NOSORT |             |
|   2 |   MERGE JOIN CARTESIAN|             |
|   3 |    INDEX RANGE SCAN   | XPK_SPB01   |
|   4 |    BUFFER SORT        |             |
|   5 |     INDEX RANGE SCAN  | XAK01_SPB02 |
---------------------------------------------

50 rows selected.

SCOTT@ORACLE19&amp;gt;SCOTT@ORACLE19&amp;gt;

------------------------------------------------------------------------------------------------------------
-- 기타2 . SPB 수정 및 삭제  
------------------------------------------------------------------------------------------------------------	
-- ALTER SPB 
DECLARE
    x number;
BEGIN
x := dbms_spm.ALTER_SQL_PLAN_BASELINE
 ('SQL_e7c63e111e8dca8f',
  'SQL_PLAN_fgjjy24g8vkng9647415a',
  ATTRIBUTE_NAME =&amp;gt; 'ENABLED',
  ATTRIBUTE_VALUE =&amp;gt; 'NO');
END;
/
SQL_HANDLE                     PLAN_NAME                                ORIGIN                         ENA ACC FIX OPTIMIZER_COST
------------------------------ ---------------------------------------- ------------------------------ --- --- --- --------------
SQL_e7c63e111e8dca8f           SQL_PLAN_fgjjy24g8vkng088ea972           MANUAL-LOAD-FROM-CURSOR-CACHE  NO  YES NO               1
SQL_e7c63e111e8dca8f           SQL_PLAN_fgjjy24g8vkng9647415a           MANUAL-LOAD-FROM-CURSOR-CACHE  NO  YES NO               1

set linesize 180
col SQL_HANDLE for a30
col PLAN_NAME for a40
col ORIGIN for a30 



-- DROP SPB 
declare 
xx PLS_INTEGER;
BEGIN
xx :=dbms_spm.drop_sql_plan_baseline(sql_handle=&amp;gt;'SQL_e7c63e111e8dca8f',plan_name=&amp;gt;null);
END;
/
	
SELECT SQL_HANDLE, PLAN_NAME, ORIGIN, ENABLED, ACCEPTED, FIXED, OPTIMIZER_COST 
FROM  DBA_SQL_PLAN_BASELINES 
WHERE SQL_TEXT LIKE 'SELECT /*+ ORG_SQL */%'    ; 

-- NO ROWS

------------------------------------------------------------------------------------------------------------
-- 기타2 . SQL_ID 혹은 PLAN 으로 SQL PURGE 
------------------------------------------------------------------------------------------------------------
-- RAC 면 노드 별로 수행해야함 
--- 특정 SQL 전체(SQL_TEXT 및 SQL_PLAN) PURGE 하기
Select 'execute sys.dbms_shared_pool.purge('''||address||','||hash_value||''',''C'',64)' AS PURGE_BY_SQL_ID 
From  v$sqlarea
WHERE SQL_TEXT LIKE 'SELECT /*+ ORG_SQL */%'    ; 

--- 특정 SQL의 PLAN만 PURGE 하기
Select 'execute sys.dbms_shared_pool.purge('''||address||','||hash_value||''',''C'',64)'
From  v$sqlarea
WHERE SQL_TEXT LIKE 'SELECT /*+ ORG_SQL */%'  ;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>12c</category>
      <category>awr</category>
      <category>SBP</category>
      <category>SQL</category>
      <category>SQL PLAN BASELINES</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/69</guid>
      <comments>https://darkturtle.tistory.com/69#entry69comment</comments>
      <pubDate>Thu, 21 Apr 2022 18:37:07 +0900</pubDate>
    </item>
    <item>
      <title>[호기심] PK 칼럼인데, NULLABLE 인데 어떻게 ?</title>
      <link>https://darkturtle.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;[호기심]&amp;nbsp;PK&amp;nbsp;칼럼인데,&amp;nbsp;NULLABLE&amp;nbsp;인데&amp;nbsp;어떻게&amp;nbsp;? &lt;br /&gt;[확인결과]&amp;nbsp;ENABLE&amp;nbsp;NOVALIDATE&amp;nbsp;로&amp;nbsp;생성&amp;nbsp;하면&amp;nbsp;PK&amp;nbsp;지만&amp;nbsp;NULLABLE&amp;nbsp;가능&amp;nbsp;,&amp;nbsp;NULLABLE&amp;nbsp;해결은&amp;nbsp;ENABLE&amp;nbsp;VALIDATE&amp;nbsp;로&amp;nbsp;가능함&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650443244983&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP TABLE B ;
Table dropped.

create table B
(
  B_1 varchar2(10) NOT NULL,
  B_2 varchar2(10),
  B_3 varchar2(10)
) ;
Table created.


ALTER TABLE B ADD CONSTRAINT XPXB PRIMARY KEY
( B_1, B_2 ) USING INDEX ENABLE NOVALIDATE ;  
Table altered.

COL INDEX_NAME FOR A30
COL TABLE_NAME FOR A30
COL COILUMN_NAME FOR A30
SELECT INDEX_NAME, INDEX_TYPE  FROM DBA_INDEXES WHERE TABLE_NAME ='B';

INDEX_NAME                     INDEX_TYPE
------------------------------ ---------------------------
XPXB                           NORMAL



COL INDEX_NAME FOR A30
COL COLUMN_NAME FOR A30
SELECT INDEX_NAME, COLUMN_NAME FROM DBA_IND_COLUMNS WHERE TABLE_NAME ='B' ORDER BY 1,COLUMN_POSITION ; 


INDEX_NAME                     COLUMN_NAME
------------------------------ ------------------------------
XPXB                           B_1
XPXB                           B_2

COL CONSTRAINT_NAME FOR A30
COL CONSTRAINT_TYPE FOR A30
COL VALIDATE FOR A30
SELECT OWNER, CONSTRAINT_NAME, CONSTRAINT_TYPE, STATUS, VALIDATED
FROM DBA_CONSTRAINTS WHERE TABLE_NAME ='B';  2

OWNER          CONSTRAINT_NAME                CONSTRAINT_TYPE                STATUS   VALIDATED
-------------- ------------------------------ ------------------------------ -------- -------------
SCOTT          SYS_C006228                    C                              ENABLED  VALIDATED
SCOTT          XPXB                           P                              ENABLED  NOT VALIDATED   &amp;lt;&amp;lt;&amp;lt; NOT VALIDATE 임 

SELECT OWNER, TABLE_NAME,COLUMN_NAME, NULLABLE
FROM  DBA_TAB_COLUMNS
WHERE TABLE_NAME ='B'
ORDER BY COLUMN_ID ;  

OWNER          TABLE_NAME                     COLUMN_NAME                    N
-------------- ------------------------------ ------------------------------ -
SCOTT          B                              B_1                            N
SCOTT          B                              B_2                            Y   &amp;lt;&amp;lt; B_2 가 PK 임에도 불구하고 NULLABLE = Y 
SCOTT          B                              B_3                            Y

-- PK 칼럼 NOT NULL 로 변경하기 ( ENABLE VALIDATE 하기 ) 
ALTER TABLE B ENABLE VALIDATE CONSTRAINT XPXB ;
Table altered.

SELECT OWNER, CONSTRAINT_NAME, CONSTRAINT_TYPE, STATUS, VALIDATED
FROM DBA_CONSTRAINTS WHERE TABLE_NAME ='B';  2

OWNER          CONSTRAINT_NAME                CONSTRAINT_TYPE                STATUS   VALIDATED
-------------- ------------------------------ ------------------------------ -------- -------------
SCOTT          SYS_C006228                    C                              ENABLED  VALIDATED
SCOTT          XPXB                           P                              ENABLED  VALIDATED     &amp;lt;&amp;lt;&amp;lt; VALIDATE 임

SELECT OWNER, TABLE_NAME,COLUMN_NAME, NULLABLE
FROM  DBA_TAB_COLUMNS
WHERE TABLE_NAME ='B'
ORDER BY COLUMN_ID ;  2    3    4

OWNER          TABLE_NAME                     COLUMN_NAME                    N
-------------- ------------------------------ ------------------------------ -
SCOTT          B                              B_1                            N
SCOTT          B                              B_2                            N   &amp;lt;&amp;lt; B_2 가 NULLABLE =N 로 변경됨 
SCOTT          B                              B_3                            Y&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>novalidate</category>
      <category>nullable</category>
      <category>PK</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/68</guid>
      <comments>https://darkturtle.tistory.com/68#entry68comment</comments>
      <pubDate>Wed, 20 Apr 2022 17:27:44 +0900</pubDate>
    </item>
    <item>
      <title>[호기심]drop user 시, user 정보도 쓰레기통(dba_recyclebin)에 남아 있을까 ?</title>
      <link>https://darkturtle.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;--&amp;nbsp;[호기심]drop&amp;nbsp;user&amp;nbsp;시,&amp;nbsp;user&amp;nbsp;정보도&amp;nbsp;쓰레기통(dba_recyclebin)에&amp;nbsp;남아&amp;nbsp;있을까&amp;nbsp;?&amp;nbsp;&amp;nbsp; &lt;br /&gt;--&amp;nbsp;[확인결과]쓰레기통(dba_recyclebin)엔&amp;nbsp;유저는&amp;nbsp;없고,&amp;nbsp;object&amp;nbsp;가&amp;nbsp;있음,&amp;nbsp;결과적으로&amp;nbsp;삭제&amp;nbsp;유저&amp;nbsp;정보는&amp;nbsp;없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650149397208&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SQL&amp;gt; select BANNER_FULL from v$version ;

BANNER_FULL
--------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0


SQL&amp;gt;


SQL&amp;gt;  select table_name from dba_tables where owner='SCOTT'

TABLE_NAME
--------------------------------------------------------------------------------
MULTI_COLUMNS
MULTI_COLUMNS2
TEST_INTERIM2
TEST
TEST_INTERIM
MLOG$_TEST
RUPD$_TEST
EMP
DEPT
BONUS
SALGRADE
DUMMY
T1
T2

14 rows selected.

SQL&amp;gt; create user test_user identified by test_user default tablespace users temporary tablespace temp ;

User created.

SQL&amp;gt; grant connect, resource to test_user ;

Grant succeeded.

SQL&amp;gt; grant select on scott.t1 to test_user ;

Grant succeeded.

SQL&amp;gt; conn test_user/test_user
Connected.
SQL&amp;gt; select count(*) from scott.t1 ;

  COUNT(*)
----------
         0

SQL&amp;gt; conn scott/oracle123
Connected.
SQL&amp;gt; show user
USER is &quot;SCOTT&quot;
SQL&amp;gt; drop user test_user ;

User dropped.

SQL&amp;gt; select username from dba_users order by username ;

USERNAME
--------------------------------------------------------------------------------
ANONYMOUS
APPQOSSYS
AUDSYS
BI
DBSFWUSER
DBSNMP
DIP
GGSYS
GSMADMIN_INTERNAL
GSMCATUSER
GSMUSER
HR
IX
OE
ORACLE_OCM
OUTLN
PM
REMOTE_SCHEDULER_AGENT
SCOTT
SH
SYS
SYS$UMF
SYSBACKUP
SYSDG
SYSKM
SYSRAC
SYSTEM
WMSYS
XDB
XS$NULL

30 rows selected.
-- 남아 있지 않음 

SQL&amp;gt;

SQL&amp;gt; conn as  sysdba
Enter user-name: sys
Enter password:
Connected.
SQL&amp;gt; show user
USER is &quot;SYS&quot;
SQL&amp;gt; col KSPPINM format a30
col KSPPSTVL format a30
col KSPPSTDF format a30
set linesize 150SQL&amp;gt; SQL&amp;gt; SQL&amp;gt;
SQL&amp;gt;
SQL&amp;gt; select a.ksppinm, b.ksppstvl, b.ksppstdf
from x$ksppi a, x$ksppcv b
where a.indx = b.indx
and a.ksppinm = 'recyclebin'
order by a.ksppinm ;  2    3    4    5

KSPPINM                        KSPPSTVL                       KSPPSTDF
------------------------------ ------------------------------ ------------------------------
recyclebin                     on                             TRUE
-- 쓰레기통 활성화

SQL&amp;gt; set linesize 180
SQL&amp;gt; col owner for a30
SQL&amp;gt; col object_name for a30
SQL&amp;gt; set linesize 180
QL&amp;gt;  select owner, object_name, DROPTIME from dba_recyclebin order by DROPTIME ;

OWNER                          OBJECT_NAME                    DROPTIME
------------------------------ ------------------------------ -------------------
SCOTT                          SYS_IL0000023985C00004$$       2022-04-09:19:25:28
SCOTT                          SYS_LOB0000023985C00004$$      2022-04-09:19:25:28
SCOTT                          BIN$3Db5LdJGG27gUzKJqMCuCg==$0 2022-04-09:19:25:28
SCOTT                          BIN$3Db5LdJHG27gUzKJqMCuCg==$0 2022-04-09:19:25:28
SCOTT                          BIN$3Db5LdJJG27gUzKJqMCuCg==$0 2022-04-09:19:25:28
SCOTT                          BIN$3Db5LdJKG27gUzKJqMCuCg==$0 2022-04-09:19:25:28
SCOTT                          BIN$3Db5LdJNG27gUzKJqMCuCg==$0 2022-04-09:19:27:30
SCOTT                          BIN$3Db5LdJOG27gUzKJqMCuCg==$0 2022-04-09:19:27:30
SCOTT                          SYS_IL0000024160C00004$$       2022-04-09:19:28:57
SCOTT                          SYS_LOB0000024160C00004$$      2022-04-09:19:28:57
SCOTT                          BIN$3Db5LdJPG27gUzKJqMCuCg==$0 2022-04-09:19:28:57
SCOTT                          BIN$3Db5LdJQG27gUzKJqMCuCg==$0 2022-04-09:19:28:57
SCOTT                          BIN$3HM2J+XMGWXgUzKJqMBfHg==$0 2022-04-12:19:06:16
SCOTT                          BIN$3HM2J+XNGWXgUzKJqMBfHg==$0 2022-04-12:19:06:16
SCOTT                          BIN$3HM2J+XPGWXgUzKJqMBfHg==$0 2022-04-12:19:06:16
SCOTT                          BIN$3HM2J+XQGWXgUzKJqMBfHg==$0 2022-04-12:19:06:16

16 rows selected.

SQL&amp;gt;


16 rows selected.

SQL&amp;gt;
-- 쓰레기통엔 유저는 없고, object 가 있음 , 결과적으로 삭제 유저 정보는 없음&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>dba_recyclebin</category>
      <category>DROP USER</category>
      <category>oracle</category>
      <category>recyclebin</category>
      <category>user</category>
      <category>쓰레기통</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/67</guid>
      <comments>https://darkturtle.tistory.com/67#entry67comment</comments>
      <pubDate>Sun, 17 Apr 2022 07:50:49 +0900</pubDate>
    </item>
    <item>
      <title>Oracle Sequence 초기화 : alter sequence 시퀀스명 restart</title>
      <link>https://darkturtle.tistory.com/66</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-pm-slice=&quot;1 1 []&quot; data-en-clipboard=&quot;true&quot;&gt;alter sequence 시퀀스명 restart&lt;/div&gt;
&lt;div&gt;매뉴얼상으로는 &quot;To restart the sequence at a different number, you must drop and re-create it.&quot;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/ALTER-SEQUENCE.html#GUID-A6468B63-E7C9-4EF0-B048-82FE2449B26D&quot;&gt;https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/ALTER-SEQUENCE.html#GUID-A6468B63-E7C9-4EF0-B048-82FE2449B26D&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://rogertroller.com/2018/02/20/oracle-18c-alter-sequence-restart/&quot;&gt;https://rogertroller.com/2018/02/20/oracle-18c-alter-sequence-restart/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;gt;&amp;gt;&amp;gt;&amp;nbsp;I&amp;rsquo;m using 12.1 and the RESTART option worked as well. I hope Oracle documents it soon.&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1650030135291&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--  Syntax
-- 원래 설정된 값으로 재시작
ALTER SEQUENCE MYSEQ RESTART
-- 사용자가 지정한 값으로 재시작 
ALTER SEQUENCE MYSEQ RESTART START WITH 1500 ;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1650030172506&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CASE 1 )

CREATE SEQUENCE MonthlySeq
   START WITH 1
   INCREMENT BY 1
   MINVALUE 1
   MAXVALUE 9999;

DECLARE
   l_val NUMBER;
BEGIN
   FOR i IN 1..500
   LOOP
      l_val := MonthlySeq.NEXTVAL;
   END LOOP;
END;
/

SELECT MonthlySeq.nextval
FROM dual;

NEXTVAL
-------
    501
ALTER SEQUENCE MonthlySeq RESTART;

SELECT MonthlySeq.nextval
FROM dual;

NEXTVAL
-------
      1



CASE 2)
CREATE SEQUENCE MonthlySeq
   START WITH 1
   INCREMENT BY 1
   MINVALUE 1
   MAXVALUE 9999;

DECLARE
   l_val NUMBER;
BEGIN
   FOR i IN 1..500
   LOOP
      l_val := MonthlySeq.NEXTVAL;
   END LOOP;
END;
/

SELECT MonthlySeq.nextval
FROM dual;

NEXTVAL
-------
    501
ALTER SEQUENCE MonthlySeq RESTART START WITH 1500;

SELECT MonthlySeq.nextval
FROM dual;

NEXTVAL
-------
   1500


CASE 3)
CREATE SEQUENCE MonthlySeq
   START WITH 1
   INCREMENT BY 1
   MINVALUE 1
   MAXVALUE 9999;

CREATE TABLE t (x NUMBER);

DECLARE
   l_val NUMBER;
BEGIN
   FOR i IN 1..500
   LOOP
      l_val := MonthlySeq.NEXTVAL;
   END LOOP;
END;
/

SELECT MonthlySeq.nextval
FROM dual;

NEXTVAL
-------
    501

INSERT INTO t VALUES (1);
ALTER SEQUENCE MonthlySeq RESTART START WITH 1500;

ROLLBACK;

SELECT *
FROM t;

X
-
1​&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+++ 주의 사항&lt;/p&gt;
&lt;pre id=&quot;code_1650030888060&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE SEQUENCE TGSEQ 
   START WITH 1
   INCREMENT BY 1
   MINVALUE 1
   MAXVALUE 9999;

SELECT SEQUENCE_NAME, CACHE_SIZE, LAST_NUMBER from dba_sequences where sequence_name ='TGSEQ'

SEQUENCE_NAME                  CACHE_SIZE LAST_NUMBER
------------------------------ ---------- -----------
TGSEQ                          20          1  
   
DECLARE
   l_val NUMBER;
BEGIN
   FOR i IN 1..500
   LOOP
      l_val := TGSEQ.NEXTVAL;
   END LOOP;
END;
/

SELECT SEQUENCE_NAME, CACHE_SIZE, LAST_NUMBER from dba_sequences where sequence_name ='TGSEQ';

SEQUENCE_NAME                  CACHE_SIZE LAST_NUMBER
------------------------------ ---------- -----------
TGSEQ                                  20         501

ALTER SEQUENCE tgseq restart start with 1;

Sequence altered.

SELECT SEQUENCE_NAME, CACHE_SIZE, LAST_NUMBER from dba_sequences where sequence_name ='TGSEQ';

SEQUENCE_NAME                  CACHE_SIZE LAST_NUMBER
------------------------------ ---------- -----------
TGSEQ                                  20           1



SELECT TGSEQ.NEXTVAL FROM DUAL ;

   NEXTVAL
----------
         1

SELECT SEQUENCE_NAME, CACHE_SIZE, LAST_NUMBER from dba_sequences where sequence_name ='TGSEQ';

SEQUENCE_NAME                  CACHE_SIZE LAST_NUMBER
------------------------------ ---------- -----------
TGSEQ                                  20          21

SQL&amp;gt;
--- 채번 하는 순간 CACHE(20)만큼 LAST_NUMBER 가 증가됨 
-- ( 1로 RESET 하고 갑자기 21으로 증가해도 놀라지 말자 ) 
-- 놀랐던 1인이....&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>oracle</category>
      <category>Reset</category>
      <category>restart</category>
      <category>sequence</category>
      <category>초기화</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/66</guid>
      <comments>https://darkturtle.tistory.com/66#entry66comment</comments>
      <pubDate>Fri, 15 Apr 2022 22:43:44 +0900</pubDate>
    </item>
    <item>
      <title>Oracle Session Monitoring Script</title>
      <link>https://darkturtle.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Oracle Session Monitoring Script&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Base 는 OracleClub Study Script 에서 공유 받은 스크립트를 필요 할때 마다 조금씩 수정 하여 현재 사용중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS, Windows 용도 세션 정리 도 추가함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650019843156&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 파일 : Active Session Monitoring
-- 주요 칼럼 : WAIT_EVENT1(대기이벤트),  LCE1(last_call_et), SECONDS_IN_WAIT1(seconds_in_wait)  
-- SQL_ID           &amp;gt;&amp;gt; 현재 수행 중인 MAIN SQL_ID
-- LAST_CALL_ET     &amp;gt;&amp;gt; 현재 수행 중인 MAIN SQL_ID
-- SQL_EXEC_START   &amp;gt;&amp;gt; 현재 수행 중인 SQL 시작 시간 ( PROCEDURE 나 FUNCTION 등일 경우, 각각의 STATEMENT 에 수행 시점마다 UPDATE 됨 ) 
-- seconds_in_wait   &amp;gt;&amp;gt; STATE='WAITING' 일 경우, 현재 시점까지 대기 시간 // 대기 이벤트 별로 변함 
SELECT -- Monitoring TG
        s.inst_id as Inst   
       ,substr(s.username,1,12 )                   as  username1   
       ,s.type
       ,to_char(s.sid)||','||to_char(s.serial# )  as  sid1
       ,status
       ,state       -- WAITING - Session is currently waiting, SPQ WAITED UNKNOWN TIME ( TIMED_STATISTICS = FALSE ), WAITED SHORT TIME ( LAST WAIT &amp;lt; 1/100 S) , WAITED KNOWN TIME ( LAST WAIT -&amp;gt; WAIT_TIME)     
       -- ,WAIT_TIME  -- 34603470
       ,s.sql_id as sql_id2  -- add
       ,sql_exec_start
       ,sysdate as chk_dt        
       ,last_call_et as lce1      
       -- , ROUND( (( sysdate - nvl(sql_exec_start,SYSDATE ))*24*60*60) -1 ) AS &quot;CUR_SQL_DURA(S)&quot;      
       ,substr(s.event,1,50)                      as wait_event1          
       ,s.seconds_in_wait                         as   S_in_wait 
       ,round(s.WAIT_TIME_MICRO/1000) as wait_time_ms
       -- ,substr(status,1,1)                        as  status1
--       ,decode(s.blocking_session,null,'',substr(s.blocking_session_status,1,13)||'('||s.blocking_instance||')'||(s.blocking_session) ) as blocking2 
--       ,S.WAIT_TIME_MICRO
--       ,S.TIME_SINCE_LAST_WAIT_MICRO   9vnkfzrw91sf6
--       ,s.seconds_in_wait                         as   S_in_wait2 -- add  
--       ,last_call_et                              as lce2   -- add
--       ,substr(s.event,1,50)                      as wait_event2  -- add      
   --    ,substr(s.sql_trace,1,2)||'/'||substr(s.sql_trace_waits,1,1)||'/'||substr(s.sql_trace_binds,1,1) as sql_trace1 
       ,s.machine                                 as machine1
       ,trunc(p.pga_alloc_mem/1024/1024)          as  pga1
       ,substr(s.module,1,30) as module
       ,substr(s.action,1,  30)         as actions 
   -- ,substr(decode(sign(lengthb(s.program)-13),1,substr(s.program,1,13)||'..',s.program),1,4) as pgm1 LOGON1
       ,s.program    
       ,decode(s.blocking_session,null,'',substr(s.blocking_session_status,1,13)||'('||s.blocking_instance||')'||(s.blocking_session) ) as blocking1
     -- ,s.wait_time                               as wait_timedktoty
       --,round(s.WAIT_TIME_MICRO/1000) as wait_time_ms
      -- ,s.seconds_in_wait                         as   S_in_wait 
      -- ,last_call_et                              as lce1
      -- ,substr(s.event,1,50)                      as wait_event1   
       --, P1TEXT, P1, P2TEXT, P2, P3TEXT, P3      
       ,s.sql_id
       ,s.SQL_HASH_VALUE
       ,s.SQL_CHILD_NUMBER
       ,nvl(trim((select substr(sql_text,1,70) from v$sql sq where sq.sql_id  = s.sql_id and rownum= 1 )), ' --------------------------')                                as sql_text1       
       ,s.osuser                                  as osuser1
       ,s.terminal                                as user_info1
       ,to_char(logon_time,'yyyymmdd HH24:MI:SS') as logon1
       ,s.process                                 as cpid1
       ,p.spid                                    as spid1
       ,ROUND(p.PGA_USED_MEM/1024/1024) AS PGA_USED_MEM_MB, ROUND(p.PGA_ALLOC_MEM/1024/1024) AS PGA_ALLOC_MEM_MB, ROUND(p.PGA_FREEABLE_MEM/1024/1024) AS PGA_FREEABLE_MEM_MB, ROUND(p.PGA_MAX_MEM/1024/1024) AS PGA_MAX_MEM_MB       
       ,'kill -9 '||p.spid                        as kill1      
--       ,'alter system kill session '||''''||s.sid||','||s.serial#||''''||' immediate; ' as kill2
--       ,  'alter system kill session '''||sid||','||s.serial#||''';' AS KILL_NORMAL
       ,  'alter system kill session '''||sid||','||s.serial#||''' IMMEDIATE;' AS KILL_IMMEIDATE
       -- ,  'alter system kill session '''||sid||','||s.serial#||',@'||P.INST_ID||''';' AS KILL_IMMEIDATE
       ,  'alter system kill session '''||sid||','||s.serial#||',@'||P.INST_ID||''' IMMEDIATE;' AS KILL_IMMEIDATE
       ,  'alter system cancel sql '''||sid||','||s.serial#||',@'||P.INST_ID||''';' AS CANCEL_SQL_19C
       ,  ( SELECT OWNER||'.'||OBJECT_NAME||'/'||SUBOBJECT_NAME||'-'||OBJECT_TYPE FROM DBA_OBJECTS O WHERE O.OBJECT_ID = S.ROW_WAIT_OBJ# ) AS ROW_WAIT_OBJ_INFO
       ,  ( SELECT OWNER||'.'||OBJECT_NAME||'/'||SUBOBJECT_NAME||'-'||OBJECT_TYPE FROM DBA_OBJECTS O WHERE O.OBJECT_ID = S.PLSQL_ENTRY_OBJECT_ID  ) as pl_sql_object_info
       , 'Current : '||TO_CHAR(SQL_EXEC_START,'HH24MISS')||' - '||SQL_ID||', Before : '||TO_CHAR(PREV_EXEC_START,'HH24MISS')||' - '||PREV_SQL_ID AS C_B_SQL
       -- RWS EXEC rdsadmin.rdsadmin_util.kill(sid    =&amp;gt; 1320, serial =&amp;gt; 6631);
       , 'EXEC rdsadmin.rdsadmin_util.kill(sid    =&amp;gt;'||S.SID||', serial =&amp;gt; '||s.serial#||');' AS KILL_AWS_RDS
       , 'EXEC rdsadmin.rdsadmin_util.cancel(sid    =&amp;gt;'||S.SID||', serial =&amp;gt; '||s.serial#||',sql_id =&amp;gt;'''||s.sql_id||''');' AS CANCEL_SQL_AWS_RDS
       --, ' inst_id : '||s.inst_id||','||to_char(s.sid)||','||to_char(s.serial# )||', OS : '||p.spid as db_info
       --, 'EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION('||s.sid||','||s.serial#||', true );' as other_sql_trace 
--       , ' Sess Info :  1) inst_id : '||s.inst_id||', 2)sid, serial# : '||to_char(s.sid)||','||to_char(s.serial# )||', 3)OS : '||p.spid
--       ||chr(10)||' Trace File : '||p.tracefile
--       ||chr(10)||' Trace On : '||'EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION('||s.sid||','||s.serial#||', true );' 
--       ||chr(10)||' Trace Off : '||'EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION('||s.sid||','||s.serial#||', false );' as other_sql_trace    
        ,'orakill '||(  SELECT INSTANCE_NAME FROM V$INSTANCE  )||' '||SPID AS WINDOWS_KILL
FROM    gv$session         s                             
       ,gv$process         p    
WHERE  s.paddr   = p.addr
AND    s.inst_id = p.inst_id
--and    s.inst_id = 2
--AND    S.SID = 1475
--AND   S.USERNAME in ('OPS$ORACLE') 
 --AND   S.SQL_ID = '61d9bpp2pk1sc'
AND    s.status  = 'ACTIVE'  -- Active Session Only direct path read   
-- AND    s.status  in ( 'ACTIVE' , 'KILLED') -- Active Session Only direct path read
--AND    s.event  not in ('queue messages','pipe get','jobq slave wait','Streams AQ: waiting for messages in the queue') 
AND    s.username is not null   -- User type Only  Exclude BACKGROUND 
AND    type ='USER'   
--AND    S.MODULE ='KTSJ' -- ORACLE 12C BUG 
order by  lce1 desc,  BLOCKING1 asc ,WAIT_EVENT1 desc, username1 desc ;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Oracle/Oracle Script</category>
      <category>AWS</category>
      <category>monitoring</category>
      <category>NT</category>
      <category>oracle</category>
      <category>script</category>
      <category>session</category>
      <category>Windows</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/65</guid>
      <comments>https://darkturtle.tistory.com/65#entry65comment</comments>
      <pubDate>Fri, 15 Apr 2022 19:52:24 +0900</pubDate>
    </item>
    <item>
      <title>개인용 VMWARE Workstation Player + Oracle Linux 7.6 + Oracle 19c</title>
      <link>https://darkturtle.tistory.com/64</link>
      <description>&lt;div data-pm-slice=&quot;1 1 []&quot; data-en-clipboard=&quot;true&quot;&gt;개인용 VMWARE Workstation Player + Oracle Linux 7.6 + Oracle 19c&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호의와 호기심을 가지게 되면서, 급 테스트 하고 싶은게, 알고 싶은게 많아서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 테스트 환경 급 구축&amp;nbsp;&lt;/p&gt;
&lt;div&gt;--&amp;nbsp; VMWare Workstation 설치&amp;nbsp; -&amp;gt; linux -&amp;gt; oracle 12c&lt;/div&gt;
&lt;div&gt;[ Workstation -&amp;gt;Virtual Box -&amp;gt; 다시 Workstation 으로 돌아옴.. ]&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;1. VMware 무료버전설치 하기&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://catnip-archive.tistory.com/entry/VMware-VMware-%EB%AC%B4%EB%A3%8C%EB%B2%84%EC%A0%84-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0Player-Window&quot;&gt;https://catnip-archive.tistory.com/entry/VMware-VMware-%EB%AC%B4%EB%A3%8C%EB%B2%84%EC%A0%84-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0Player-Window&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;2. Virtual network editor 가 없는 것 추가 하기 [ N/W 설정을 위해서 ]&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://dany-it.tistory.com/338&quot;&gt;https://dany-it.tistory.com/338&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;3. 리눅스 설치 하기&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://positivemh.tistory.com/521&quot;&gt;https://positivemh.tistory.com/521&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;4-0. xwin 설치&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://fossa.tistory.com/6&quot;&gt;https://fossa.tistory.com/6&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;gt;&amp;gt; 수행 후, 설정 수정 해야&amp;nbsp; x-windows 정상 작동함 ㅠㅠ&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;4. Oracle 설치 하기&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://positivemh.tistory.com/555&quot;&gt;https://positivemh.tistory.com/555&lt;/a&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 중에, oper group 에 있다고 Warning 이 뜬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 실순지, 블로그 글일 잘못된것지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그룹 날리고 다시 생성 하고, 유저 할당 하면 해소됨&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>oper</category>
      <category>oracle</category>
      <category>oracle19c</category>
      <category>runinstaller</category>
      <category>VMware</category>
      <category>Workstation</category>
      <category>설치</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/64</guid>
      <comments>https://darkturtle.tistory.com/64#entry64comment</comments>
      <pubDate>Fri, 15 Apr 2022 19:46:39 +0900</pubDate>
    </item>
    <item>
      <title>ORA-08104, ORA-8106 // CREATE INDEX .. ONLINE 중 오류 발생 시</title>
      <link>https://darkturtle.tistory.com/63</link>
      <description>&lt;div data-pm-slice=&quot;1 1 []&quot; data-en-clipboard=&quot;true&quot;&gt;ORA-08104, ORA-8106 // CREATE INDEX .. ONLINE 중 오류 발생 시&lt;/div&gt;
&lt;div&gt;1. CREATE INDEX .. ONLINE&amp;nbsp; 작업 중, 세션이 비정상적으로 종료된 경우,&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; Dictionary 정보는 남게 되어, 재생성 할경우, ORA-08104 에러가 발생함&lt;/div&gt;
&lt;div&gt;2. SMON 이 1시간에 한번씩 자동으로 Dictionary Clean 작업 수행함 ( 그냥 놔도두 됨 )&amp;nbsp;&lt;/div&gt;
&lt;div&gt;3. 버그로 자동 삭제가 안되는 경우, 혹은 빠르게 삭제 하고자 할때&lt;/div&gt;
&lt;div&gt;&amp;nbsp; Manual 하게 아래 패키지 수행 가능 ( sys 유저로 수행 )&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1650013899732&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 1. 메타만 남은 INDEX 의 OBJECT_ID 확인 
select object_id from dba_objects where object_name ='온라인인덱스명' and owner ='SCOTT'
-- 2. INDEX 의 OBJECT_ID 를 가기조 삭제 하기
declare
  v_ret boolean;
  begin
  v_ret := dbms_repair.online_index_clean(1171412);  -- SQL1) 에서 확인한 OBJECT_ID 입력
end;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;lt;&amp;lt; 참고 문서 &amp;gt;&amp;gt;&lt;/div&gt;
&lt;div&gt;How to Cleanup and Rebuild an Interrupted Online Index Rebuild - ORA-8104 , ORA-8106 (문서 ID 272735.1)&lt;/div&gt;
&lt;div&gt;SMON will eventually cleanup the locked index so no actions are actually needed.&lt;/div&gt;
&lt;div&gt;However, letting SMON do the cleanup can be a bit of 'hit and miss' as SMON will try to cleanup every 60 minutes&lt;/div&gt;
&lt;div&gt;and if it cannot get a lock on the object with NOWAIT it will just try again later.&lt;/div&gt;
&lt;div&gt;In a highly active database with many transactions this can cause the rebuild to take a long time as SMON won't get the lock with NOWAIT.&lt;/div&gt;
&lt;div&gt;Other cases like uncommitted transactions against the table will also result in SMON not rebuilding the index.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;As long as the index is not rebuild all access to the index will result in ORA-8104 or ORA-8106.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;So to solve this situation a manual cleanup can be done using the new function&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1650014030926&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- DBMS_REPAIR.ONLINE_INDEX_CLEAN()
conn / as sysdba

DECLARE
isClean BOOLEAN;
BEGIN
isClean := DBMS_REPAIR.ONLINE_INDEX_CLEAN();
END;
/
-- OBJECT_ID 를 주지 않으면, 현재 걸려 있는 INDEX 메타를 퍼지하는 걸로 보임
-- OBJECT_ID 주고 퍼지는 몇차례 경험 ㅇ.ㅇ&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>create index</category>
      <category>index</category>
      <category>ONLINE</category>
      <category>ORA-08104</category>
      <category>ORA-8106</category>
      <category>oracle</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/63</guid>
      <comments>https://darkturtle.tistory.com/63#entry63comment</comments>
      <pubDate>Fri, 15 Apr 2022 18:15:57 +0900</pubDate>
    </item>
    <item>
      <title>PASSWORD_LIFE_TIME UNLIMITED -&amp;gt; LIMITED 변경 시, 주의 사항</title>
      <link>https://darkturtle.tistory.com/62</link>
      <description>&lt;pre id=&quot;code_1649926781441&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- run by sys user
select u.username, s.ctime, s.ptime
 ,'alter user '||u.username||' identified by values '''||s.spare4||''';' cmd
 from dba_users u
 join sys.user$ s
 on u.user_id = s.user#
 where u.username = upper('&amp;amp;username');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파트 회의 때 듣은 이야기 근거로 간단히 정리&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;&amp;lt; #3. 응용 결론 &amp;gt;&amp;gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;PASSWORD_LIFE_TIME&amp;nbsp;UNLIMITED&amp;nbsp;-&amp;gt;&amp;nbsp;LIMITED&amp;nbsp;변경&amp;nbsp;시,&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;동일&amp;nbsp;비번으로&amp;nbsp;패스워드&amp;nbsp;변경&amp;nbsp;(&amp;nbsp;SYS.USER$.&amp;nbsp;PTIME&amp;nbsp;현재&amp;nbsp;시점으로&amp;nbsp;업데이트&amp;nbsp;)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;이후&amp;nbsp;PASSWORD_LIFE_TIME&amp;nbsp;을&amp;nbsp;LIMITED&amp;nbsp;로&amp;nbsp;변경&amp;nbsp;해주는&amp;nbsp;센스&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;#1.&amp;nbsp;PASSWORD_LIFE_TIME&amp;nbsp;UNLIMITED&amp;nbsp;-&amp;gt;&amp;nbsp;LIMITED&amp;nbsp;변경&amp;nbsp;시,&amp;nbsp;주의&amp;nbsp;사항&amp;nbsp;&lt;/b&gt; &lt;br /&gt;:&amp;nbsp;가장&amp;nbsp;최근&amp;nbsp;패스워드&amp;nbsp;갱신일&amp;nbsp;기준&amp;nbsp;혹은&amp;nbsp;(&amp;nbsp;패스워드&amp;nbsp;갱신이&amp;nbsp;없는&amp;nbsp;경우)&amp;nbsp;계정&amp;nbsp;생성일&amp;nbsp;기준으로&amp;nbsp;날짜&amp;nbsp;계산됨&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.oracle.com/database/121/DBSEG/authentication.htm#DBSEG567&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.oracle.com/database/121/DBSEG/authentication.htm#DBSEG567&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;The PASSWORD_LIFE_TIME limit of a profile is measured from the last time that an account's password &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;is changed, or the account creation time if&amp;nbsp;the&amp;nbsp;password&amp;nbsp;has&amp;nbsp;never&amp;nbsp;been&amp;nbsp;changed.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;These dates are recorded in the PTIME (password change time) and CTIME (account creation time) columns of the&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SYS.USER$ system table.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The PASSWORD_LIFE_TIME limit is not measured starting from the timestamp of the last change to the&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PASSWORD_LIFE_TIME profile parameter, as may be initially thought.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Therefore, any accounts affected by the changed profile whose last password change time was more than&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PASSWORD_LIFE_TIME days ago immediately expire and enter their grace period on their next&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;connection,&amp;nbsp;issuing&amp;nbsp;the&amp;nbsp;ORA-28002:&amp;nbsp;The&amp;nbsp;password&amp;nbsp;will&amp;nbsp;expire&amp;nbsp;within&amp;nbsp;n&amp;nbsp;days&amp;nbsp;warning. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;#2.&amp;nbsp;패스워드&amp;nbsp;모르는&amp;nbsp;상태에서&amp;nbsp;기존(해시값으로)&amp;nbsp;패스워드로&amp;nbsp;RESET&amp;nbsp;하기&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://ruepprich.wordpress.com/2018/01/09/reset-password-by-values-in-12c/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ruepprich.wordpress.com/2018/01/09/reset-password-by-values-in-12c/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Reset&amp;nbsp;Password&amp;nbsp;By&amp;nbsp;Values&amp;nbsp;in&amp;nbsp;12c &lt;br /&gt;January&amp;nbsp;9,&amp;nbsp;2018&amp;nbsp;at&amp;nbsp;2:21&amp;nbsp;pm&amp;nbsp;|&amp;nbsp;Posted&amp;nbsp;in&amp;nbsp;Oracle&amp;nbsp;Developement&amp;nbsp;|&amp;nbsp;3&amp;nbsp;Comments &lt;br /&gt;In&amp;nbsp;prior&amp;nbsp;Oracle&amp;nbsp;version&amp;nbsp;you&amp;nbsp;used&amp;nbsp;to&amp;nbsp;be&amp;nbsp;able&amp;nbsp;to&amp;nbsp;hack&amp;nbsp;a&amp;nbsp;users&amp;nbsp;password&amp;nbsp;by&amp;nbsp;using&amp;nbsp;the&amp;nbsp;identified&amp;nbsp;by&amp;nbsp;values&amp;nbsp;syntax.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;This&amp;nbsp;no&amp;nbsp;longer&amp;nbsp;works&amp;nbsp;in&amp;nbsp;12c,&amp;nbsp;but&amp;nbsp;there&amp;nbsp;is&amp;nbsp;a&amp;nbsp;hack&amp;nbsp;for&amp;nbsp;the&amp;nbsp;hack&amp;nbsp;as&amp;nbsp;blogged&amp;nbsp;by&amp;nbsp;Brian&amp;nbsp;Peasland. &lt;br /&gt;&lt;br /&gt;Here&amp;nbsp;is&amp;nbsp;a&amp;nbsp;quick&amp;nbsp;query&amp;nbsp;that&amp;nbsp;will&amp;nbsp;generate&amp;nbsp;the&amp;nbsp;alter&amp;nbsp;user&amp;nbsp;command: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;#3. 응용 결론&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;PASSWORD_LIFE_TIME&amp;nbsp;UNLIMITED&amp;nbsp;-&amp;gt;&amp;nbsp;LIMITED&amp;nbsp;변경&amp;nbsp;시,&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;동일&amp;nbsp;비번으로&amp;nbsp;패스워드&amp;nbsp;변경&amp;nbsp;(&amp;nbsp;SYS.USER$.&amp;nbsp;PTIME&amp;nbsp;현재&amp;nbsp;시점으로&amp;nbsp;업데이트&amp;nbsp;) &lt;/b&gt;&lt;br /&gt;&lt;b&gt;이후&amp;nbsp;PASSWORD_LIFE_TIME&amp;nbsp;을&amp;nbsp;LIMITED&amp;nbsp;로&amp;nbsp;변경&amp;nbsp;해주는&amp;nbsp;센스&amp;nbsp;&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649926302288&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;
SQL&amp;gt; select u.username, s.ctime, s.ptime
 ,'alter user '||u.username||' identified by values '''||s.spare4||''';' cmd
 from dba_users u
 join sys.user$ s
 on u.user_id = s.user#
 where u.username = upper('&amp;amp;username');  2    3    4    5    6
Enter value for username: scott
old   6:  where u.username = upper('&amp;amp;username')
new   6:  where u.username = upper('scott')


SCOTT 07-APR-22 07-APR-22 
alter user SCOTT identified by values 'S:4790C45087E041C179602D469CCFDBB5137051EB98769C3C7CF3C1325208;T:3FCC96B8048017FA7FA24DF79792005027A2EC602DB55AED08D4040989DCC7BE20F660D21251E7469B7FAA7061D768F5BB70540A335BCBFF7B0AFD9A557A55AEA716C2E70DAE63282313AEADB497EB5D';
-- ctime : 2022/04/07 계정 생성 
-- ptime : 2022/04/07 계정 비번 변경 ( 비번 변경이 없어, 계정 생성일로 확인됨 ) 

SQL&amp;gt; select sysdate from dual ;

SYSDATE
---------
14-APR-22

SQL&amp;gt;

SQL&amp;gt; conn scott/oracle123
Connected.
SQL&amp;gt; show user
USER is &quot;SCOTT&quot;

-- hash 값으로 비번 변경 
SQL&amp;gt; alter user SCOTT identified by values 'S:4790C45087E041C179602D469CCFDBB5137051EB98769C3C7CF3C1325208;T:3FCC96B8048017FA7FA24DF79792005027A2EC602DB55AED08D4040989DCC7BE20F660D21251E7469B7FAA7061D768F5BB70540A335BCBFF7B0AFD9A557A55AEA716C2E70DAE63282313AEADB497EB5D';
User altered.
-- 동일 비번으로 접속 가능 확인 
SQL&amp;gt; conn scott/oracle123
Connected.
SQL&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Oracle/Oh Oracle</category>
      <category>Hash</category>
      <category>oracle</category>
      <category>password</category>
      <category>PASSWORD_LIFE_TIME</category>
      <category>Reset</category>
      <category>SYS.USER$</category>
      <category>Unlimited</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/62</guid>
      <comments>https://darkturtle.tistory.com/62#entry62comment</comments>
      <pubDate>Thu, 14 Apr 2022 17:53:41 +0900</pubDate>
    </item>
    <item>
      <title>HA(On-Premise) VS AWS RDS for Oracle ( Multi-AZ)</title>
      <link>https://darkturtle.tistory.com/61</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;HA(On-Premise) VS AWS RDS for Oracle ( Multi-AZ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;Multi-AZ&amp;nbsp;] &lt;br /&gt;&amp;nbsp;1.&amp;nbsp;&amp;nbsp;Main&amp;nbsp;Purpose&amp;nbsp;is&amp;nbsp;high&amp;nbsp;avaiilability &lt;br /&gt;&amp;nbsp;2.&amp;nbsp;&amp;nbsp;Non-Aurora&amp;nbsp;:&amp;nbsp;Synchronous&amp;nbsp;replication&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;3.&amp;nbsp;&amp;nbsp;Non-Aurora&amp;nbsp;:&amp;nbsp;automated&amp;nbsp;backups&amp;nbsp;are&amp;nbsp;taken&amp;nbsp;from&amp;nbsp;standby&amp;nbsp; &lt;br /&gt;&amp;nbsp;4.&amp;nbsp;Always&amp;nbsp;span&amp;nbsp;at&amp;nbsp;least&amp;nbsp;two&amp;nbsp;Availability&amp;nbsp;Zones&amp;nbsp;with&amp;nbsp;a&amp;nbsp;single&amp;nbsp;region&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS RDS For Oracle 전제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 5분마다 Transaction Log 백업&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 하루 한번 Snapshot Backup ( 복구 가능 셋 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Snapshot 은 OS + DB 에 대한 Disk Backup 이며, 수행 전, Begin Backup 수행, 완료 후, End Bakcup 수행됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) Default 7일 보관, 최장 35일 보관 가능, Maual 백업(Snapshot)은 영구 백업 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;20200715_091838.png&quot; data-origin-width=&quot;1193&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUgVCo/btqFGx5mrVb/Cuuwc7DyJ8JEhWsEXZGmIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUgVCo/btqFGx5mrVb/Cuuwc7DyJ8JEhWsEXZGmIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUgVCo/btqFGx5mrVb/Cuuwc7DyJ8JEhWsEXZGmIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUgVCo%2FbtqFGx5mrVb%2FCuuwc7DyJ8JEhWsEXZGmIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1193&quot; height=&quot;526&quot; data-filename=&quot;20200715_091838.png&quot; data-origin-width=&quot;1193&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;&amp;lt;&amp;nbsp;AWS&amp;nbsp;주요&amp;nbsp;발췌&amp;nbsp;&amp;gt;&amp;gt; &lt;br /&gt;&lt;b&gt;-.&amp;nbsp;Currently,&amp;nbsp;RMAN&amp;nbsp;restore&amp;nbsp;isn't&amp;nbsp;supported&amp;nbsp;for&amp;nbsp;Amazon&amp;nbsp;RDS&amp;nbsp;for&amp;nbsp;Oracle&amp;nbsp;DB&amp;nbsp;instances.&lt;/b&gt; &lt;br /&gt;-.&amp;nbsp;&lt;b&gt;Standard&amp;nbsp;Amazon&amp;nbsp;RDS&amp;nbsp;backups&amp;nbsp;don't&amp;nbsp;use&amp;nbsp;RMAN&amp;nbsp;&lt;/b&gt;and&amp;nbsp;therefore&amp;nbsp;don't&amp;nbsp;create&amp;nbsp;records&amp;nbsp;in&amp;nbsp;the&amp;nbsp;control&amp;nbsp;file. &lt;br /&gt;-.&amp;nbsp;Disabling&amp;nbsp;automatic&amp;nbsp;backups&amp;nbsp;for&amp;nbsp;a&amp;nbsp;DB&amp;nbsp;instance&amp;nbsp;deletes&amp;nbsp;all&amp;nbsp;existing&amp;nbsp;automated&amp;nbsp;backups&amp;nbsp;for&amp;nbsp;the&amp;nbsp;instance.&amp;nbsp; &lt;br /&gt;-.&amp;nbsp;&amp;nbsp;When&amp;nbsp;automated&amp;nbsp;backups&amp;nbsp;are&amp;nbsp;enabled,&amp;nbsp;your&amp;nbsp;RDS&amp;nbsp;instance&amp;nbsp;and&amp;nbsp;database&amp;nbsp;is&amp;nbsp;taken&amp;nbsp;offline&amp;nbsp;and&amp;nbsp;a&amp;nbsp;backup&amp;nbsp;is&amp;nbsp;immediately&amp;nbsp;created. &lt;br /&gt;-.&amp;nbsp;Retained&amp;nbsp;automated&amp;nbsp;backups&amp;nbsp;don't&amp;nbsp;contain&amp;nbsp;information&amp;nbsp;about&amp;nbsp;parameters&amp;nbsp;or&amp;nbsp;option&amp;nbsp;groups. &lt;br /&gt;-.&amp;nbsp;Unlike&amp;nbsp;automated&amp;nbsp;backups,&amp;nbsp;manual&amp;nbsp;snapshots&amp;nbsp;aren't&amp;nbsp;subject&amp;nbsp;to&amp;nbsp;the&amp;nbsp;backup&amp;nbsp;retention&amp;nbsp;period.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;Snapshots don't expire. &lt;br /&gt;-.&amp;nbsp;You&amp;nbsp;can't&amp;nbsp;restore&amp;nbsp;from&amp;nbsp;a&amp;nbsp;DB&amp;nbsp;snapshot&amp;nbsp;to&amp;nbsp;an&amp;nbsp;existing&amp;nbsp;DB&amp;nbsp;instance;&amp;nbsp;a&amp;nbsp;new&amp;nbsp;DB&amp;nbsp;instance&amp;nbsp;is&amp;nbsp;created&amp;nbsp;when&amp;nbsp;you&amp;nbsp;restore. &lt;br /&gt;-.&amp;nbsp;You&amp;nbsp;can&amp;nbsp;restore&amp;nbsp;a&amp;nbsp;DB&amp;nbsp;instance&amp;nbsp;and&amp;nbsp;use&amp;nbsp;a&amp;nbsp;different&amp;nbsp;storage&amp;nbsp;type&amp;nbsp;than&amp;nbsp;the&amp;nbsp;source&amp;nbsp;DB&amp;nbsp;snapshot. &lt;br /&gt;-.&amp;nbsp;After&amp;nbsp;you&amp;nbsp;copy&amp;nbsp;a&amp;nbsp;snapshot,&amp;nbsp;the&amp;nbsp;copy&amp;nbsp;is&amp;nbsp;a&amp;nbsp;manual&amp;nbsp;snapshot. &lt;br /&gt;-.&amp;nbsp;If&amp;nbsp;you&amp;nbsp;want&amp;nbsp;to&amp;nbsp;restore&amp;nbsp;the&amp;nbsp;functionality&amp;nbsp;of&amp;nbsp;the&amp;nbsp;DB&amp;nbsp;instance&amp;nbsp;to&amp;nbsp;that&amp;nbsp;of&amp;nbsp;the&amp;nbsp;DB&amp;nbsp;instance&amp;nbsp;that&amp;nbsp;the&amp;nbsp;snapshot&amp;nbsp;was&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;created from, you must modify the DB instance to use the security group&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;and parameter group used by the previous DB instance. &lt;br /&gt;&amp;nbsp;-.&amp;nbsp;RDS&amp;nbsp;uploads&amp;nbsp;transaction&amp;nbsp;logs&amp;nbsp;for&amp;nbsp;DB&amp;nbsp;instances&amp;nbsp;to&amp;nbsp;Amazon&amp;nbsp;S3&amp;nbsp;every&amp;nbsp;5&amp;nbsp;minutes.&lt;/p&gt;</description>
      <category>Oracle/Cloud(AWS)</category>
      <author>darkturtle26</author>
      <guid isPermaLink="true">https://darkturtle.tistory.com/61</guid>
      <comments>https://darkturtle.tistory.com/61#entry61comment</comments>
      <pubDate>Wed, 15 Jul 2020 09:23:32 +0900</pubDate>
    </item>
  </channel>
</rss>