1. Oracle DB 에 접속이 되었다가, 연결이 종료되는 경우


  A. 특정 사용자 Profile 에 설정된 limit 때문에 연결이 종료 되는 경우 일수도 있음


    -- 확인


      > Profile 을 사용하려면, resource_limit 이 true 로 설정되어 있어야 함 -- 11gR2 Default 는 false


        SQL> select name, value from v$parameter where name like '%resource%' ;

        SQL> alter system set resource_limit = true scope=spfile ; -- 설정방법


      > 생성되어 있는, Profile 들을 확인 : PROFILE 명이 Dafault 인 것이 기본설정 Profile 입니다.


        SQL> select profile, resource_name, limit from dba_profiles where profile = '%NEW';

   

    -- 조치방법


      > 해당 Limit 을 제거한 Profile 을 생성하여, 해당 User 에 부여 (아래는 Sample)

      > 특정하지 않은 limit 은 Default profile 을 따름

 

        SQL> ALTER PROFILE Profile_NEW limit 

              PASSWORD_GRACE_TIME UNLIMITED 

              FAILED_LOGIN_ATTEMPTS UNLIMITED

              PASSWORD_LIFE_TIME UNLIMITED

              PASSWORD_LOCK_TIME UNLIMITED 

              idle_time UNLIMITED  ; 


        SQL> alter user user_new profile Profile_new  ; 


    -- 참조값

      

      > sessions_per_user 2 => 유저당 2개의 세션을 허용

      > idle_time 1 => 접속후 1분 동안 아무런 작업이 일어나지 않는다면 자동으로 Session을 종료

      > connect_time 480 => Open 된 세션을 8분(480초) 동안만 사용 허락, 분단위의 연결시간 제한

      > LOGICAL_READS_PER_SESSION 1028 => SESSION이 열려있는 동안 disk나 memory에서 읽을 수 있는 data block 수가 1024 Block



  B. DB Instance Lelvel 로 설정된 limit 때문에 연결이 종료 되는 경우일 수도 있음


    -- 확인


 SQL> select * from v$resource_limit ; 


RESOURCE_NAME

 CURRENT UTILIZATION

 MAX UTILIZATION

 INITIAL ALLOCATION

 LIMIT VALUE

 processes

 31

 1800

 2000

 2000

 sessions

 39

 3024

 3024

 3024

 enqueue_locks

 25

 61

 34780

 34780

 enqueue_resources

 22

 59

 13524

 UNLIMITED

 ges_procs

 0

 0

 0

 0

 ges_ress

 0

 0

 0

 UNLIMITED


      위의 셈풀 결과에서 processes 가 프로세스 갯수(백그라운드+Dedicate Process), 그리고 session 이 동시접속 세션 수 입니다.

      current_utilization 이 현재 접속 카운트이고... (1명 접속할 때 마다 1씩 증가)

      max_utilization  이 오라클을 시작한 이래로 최대로 접속했을 때 피크 수치입니다


    -- 조치 


      session (동시접속 세션 수) 가 3024 로 설정되어 있는데 ( Defailt 값도 3024 , 현 설정값도 3024 임), 

      현재는 session (동시접속 세션 수) 가 39 입니다만, DB 구동 후 동시접속 세션 수가 3024 에 도달할 적이 있으므로, 

      이 때, 더 이상의 session 들이 DB 에 연결되지 못하는 상황이엇을 것입니다. ==> 따라서 session 을 5000 개 정도로 늘릴 필요가 있습니다.


      sessions 과 processes 는 함꼐 증가 되어야 하며, sessions 은 processes * 1.1 + 5개 이상이 되어야 합니다. (DB 버전에 따라 상이)


 SQL> alter system set sessions = 5550 scope = spfile ; 

 SQL> alter system set processes = 5000 scope = spfile ; 


 SQL> shutdown immediate ; 

 SQL> startup ; 



      

  





//-- 2012.04.18. 초안작성
//-- 2012.05.07. 수정 

 

1. CDC 제품을 활용한 Oracle DB 실시간 Migration 개념

 

  Source 시스템을 운영하는 동안 Source DB 을 백업 받아서 Target 시스템을 구축하고 구축하는 동안 Source 시스템에 유입된 변경 데이터를 정합성에 어긋남이 없이 Oracle GoldenGate 을 이용하여 작업을 하게 됩니다.

 

 

1.      GoldenGate 변경 데이터 추출 시작

2.      Source DB 백업

3.      백업 데이터를 Target DB 에 적용

4.      추출된 변경 데이터 Target DB에 적용

5.      APP 에서 기존 Source 시스템에서부터 신규 Target 시스템으로의 Connection 을 변경

 

Zero Down-Time Migration 에서 Source DB Backup Target DB Recovery 그리고  Oracle GoldenGate 을 이용한 데이터 복제는 아래와 같은 방법으로 진행됩니다.

 

 

본 간략 절차 사례에서는, 소규모 Size Oracle DB exp/imp dump 를 이용해 Target DB 로 옮겨 실시간 DB 동기화를 구성하는 방법으로 Zero Down-Time Migration 을 구현해 보았습니다.

 

2. Zero Down-Time Migration 실례 (간략 절차)

 

 

Source DB

Target DB

Step 1

CDC(Change Data Capture)를 위한 Oracle Golgdngate 설치 (DB 무 중단)

Step 2

Goldengate 변경 분 추출 Process (extract) 시작

 

Step 3

SCN 기반 데이터 추출 (expdp)

 

Step 4

 

추출된 데이터 DB 에 적재 (impdp)

Step 5

 

Goldengate 변경 분 반영 Process (replicat) 시작

Step 6

CDC(Change Data Capture) 기반, DB 동기화(sync) 중인 상태

 

2-A. Change Data Capture 를 위한 Oracle Golgdngate 설치

 

  Oracle 사의 CDC 제품인 Goldengate 제품을 설치합니다. 설치를 위한 Requirement Installation 과정은 이 문서에서는 생략하겠습니다.

 

2-B. Source DB 에서 Goldengate 변경 분 추출 Process (extract) 시작

 

가.   GGSCI 에서 해당 extract pump 를 시작해 Data 변경분을 추출 시작하기

 

GGSCI> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING                                           

EXTRACT     STOPPED     EXTORCL     00:00:02      00:00:07   

EXTRACT     STOPPED     PMPORCL     00:00:04      00:00:03

GGSCI> start *ORCL

GGSCI> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING                                          

EXTRACT     RUNNING     EXTORCL     00:00:02      00:00:01   

EXTRACT     RUNNING     PMPORCL     00:00:01      00:00:02

GGSCI>

 

    역시, 이 문서가 Goldengate 제품 자체에 대한 문서는 아니기 때문에, 자세한 내용들은 생략하겠습니다.

 

2-C. Source DB 에서 SCN 기반 데이터 추출 (expdp)

 

가.   Long Transaction 유무를 확인하고, SCN 을 추출해 둡니다.

 

SQL> select min(start_time) from v$transaction ;

 

MIN(START_TIME)

----------------------------------------

                                             ---> 현재 수행중인 Transaction 이 없음

SQL> col a format 99999999999999999999

SQL> select dbms_flashback.get_system_change_number a from dual ;

 

                    A

---------------------

       12478584165405                       ---> 추출 시점의 SCN 값 입니다.

 

SQL> select min(start_time) from v$transaction ;

 

MIN(START_TIME)

----------------------------------------

---> 현재 수행중인 Transaction 이 없음

SQL>

 

v$transaction 에 수행 중인 transaction 이 있더라도 상관 없습니다. 다만 수행중인 Transaction start_time 을 비교해서, 계속 변경되고 있는지 기존에 수행 중인 Transaction 이 종료 되고, 새로운 transaction 이 시작되었는지 확인 할 필요는 있습니다.

 

나.   Export dump 를 사용해, Source DB 해당 data 를 추출

 

Oracle ] expdp userid=\"system/password_of_system as sysdba\" job_name = 120418_boro_pm_exp dumpfile = 120418_boro_pm_exp.dmp logfile = 120418_boro_pm_exp.log schemas = SEI_PM flashback_scn = 12478584165405

 

    Oracle 10g 이상에서는 exp/imp 보다 속도 등이 개선된 exp dump가 지원됩니다. 이 사례에서는 특정한 DB User (SEI_PM) 의 모든 DB Data 120418_boro_pm_exp.dmp 이라는 OS File 로 추출한 것이고, flashback_scn 값을 앞서 dbms_flashback 을 통해 추출한 값으로 입력합니다.

    Dmp file 이 생성되는 기본 위치는 $ORACLE_BASE/admin/SID/dpdump 입니다.

 

    File 생성이 완료되면, Target DB dmp file 을 전송합니다. 보통은 compress ftp 를 이용합니다.

 

2-D. Target DB 로 추출된 데이터 DB 에 적재 (impdp)

 

가.   보통, 아래와 같이 간단히 DB에 적재할 수 있습니다. 해당 DB Schema 를 먼저 만들어 주어도 import 에 문제가 없습니다.

 

Oracle ] impdp userid=\"system/password_of_system as sysdba\" job_name = 120418_boro_pm_imp dumpfile = 120418_boro_pm_exp.dmp logfile = 120418_boro_pm_impdp.log

 

나.   다만, 여러 개의 Source DB 에서 1개의 Target DB DB Data 병합하는 경우, temp schema 를 통해 필요한 Data 만 적재할 수도 있습니다. 아래의 Query 를 참조하세요

 

2-D.-1. Temp Schema 를 사전에 생성합니다.


SQL> drop user tmp_sei_pm cascade ;

SQL> create user tmp_sei_pm identified by password_of_tmp_sei_pm default tablespace TMP_SEI_PM temporary tablespace TEMP_FIELD ;

SQL> grant resource, connect, dba to tmp_sei_pm ;

 

2-D.-2. Source DB 에서 추출한 Data Temp Schema 로 임시로 적재합니다


Oracle ] impdp userid=\"system/password_of_system as sysdba\" job_name = 120418_boro_pm_imp dumpfile = 120418_boro_pm_exp.dmp logfile = 120418_boro_pm_impdp.log remap_schema=sei_pm:tmp_sei_pm

    마찬가지로, 기본 위치는 $ORACLE_BASE/admin/SID/dpdump 입니다

 

2-D.-3. 임시로 적재된 Data 에서, 필요한 Data 만을 실 사용할 Schema 로 적재

 

실제 사용할 Schema 로 적재할 때는, 해당 시나리오에 따라, 특정 코드값의 Data 만을 삭제 하거나, 특정 코드값의 Data 를 제외하고 삭제, 특정 코드값에 해당하는 rows 만을 insert 하는 경우 등이 있겠습니다. 이 때 사용될 Query 들은 아래와 같습니다.

 

SQL> create table SEI_PM.PM_P_AREA as select * from TMP_SEI_PM.PM_P_AREA where job_no = 'SC2222' ;

SQL> delete SEI_PM.PM_P_AREA   where job_no <> 'SC2222' ;

SQL> insert into SEI_PM.PM_P_AREA         select * from TMP_SEI_PM.PM_P_AREA       where job_no = 'SC2222' ;

SQL> delete SEI_PM.PM_P_BM      where job_no = 'SC2222' ;

 

2-E. Target DB 에서 Goldengate 변경 분 반영 Process (replicat) 시작

 

GGSCI> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING                                           

REPLICAT     STOPPED     R_ORCL11     00:00:02      00:00:07   

REPLICAT     STOPPED     R_ORCL12     00:00:04      00:00:03

GGSCI> start replicat r_orcl11, aftercsn 12478584165405

GGSCI> start replicat r_orcl12, aftercsn 12478584165405

GGSCI> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING                                          

REPLICAT     RUNNING     R_ORCL11     00:00:02      00:00:01   

REPLICAT     RUNNING     R_ORCL12     00:00:01      00:00:02

GGSCI>

 

3. CDC 제품(Oracle Goldengate)을 활용한 Zero Down-Time Migration 활용 사례들

 

      Oracle GoldenGate 을 운영하기 위해서 초기 데이터 구축을 위해서 사용

  - Source DB 에서 Target DB 로 데이터를 동일하게 일치 시키는 Initial Loading 작업

  - OGG을 이용한 조회 시스템, ODS/DW, 비상 시스템, 타 시스템 연계 시 사용

      System/DB 업그레이드 시 연속적인 서비스를 진행하기 위해서 사용

  - System 증설 또는 DB 버전 Upgrade 시 서비스 연속성 보장

      주 시스템의 PM 작업 (Planned Outage, Unplanned Outage) 시 사용

  - 주 시스템에 대해서 장시간 작업을 진행하기 위하여 임시 시스템에서 서비스의 연속성 보장

  - 주 시스템의 작업 완료 후 임시 시스템으로부터 주 시스템으로 서비스의 연속성 보장

      주 시스템/DB 을 이기종으로 변경하기 위해서 사용

  - 주 시스템의 H/W 또는 OS, DB 등을 이기종으로 변경 시 서비스의 연속성 보장


End of document.

1. Oracle DB 에서 제공하는 변환형 함수(Conversion function)

 

주로 아래 3가지 변환함수가 많이 사용됩니다.

Parameter

Explanation

to_char

숫자나 날짜를 문자열로 변환

to_date

문자를 날짜로 변환

to_number

문자를 숫자로 변환

기타 참조할 만한 Conversion function 으로는

-       Bin_To_Num / NumToDSInterval / NumToYMInterval  

-       To_Single_Byte / To_Multi_Byte / To_Clob / To_NClob / To_Lob

-       From_Tz / To_Timestamp / To_Timestamp_Tz / To_YMInterval / To_DSInterval

-       HexToRaw / CharToRowid / RawToHex

등이 있으나, 이번에는 언급하지 않겠습니다.

 

가능한 DB 버전 : Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g

-       아마 곧 GA release Oracle 12c 에서도 지원되겠지요?

 

2. to_char function

 

Syntax : TO_CHAR(문자값,‘형식’) / to_char( value, [format_mask], [nls_language])

-       value can either be a number or date that will be converted to a string.

-       format_mask is optional. This is the format that will be used to convert value to a string.

-       nls_language is optional. This is the nls language used to convert value to a string.

 

Example : 숫자를 문자열로 변환

SQL> select TO_CHAR(350000,'$999,999') from dual ;

 

TO_CHAR(3

---------

 $350,000

 

SQL>

 

Example : 날짜를 문자열로 변환

SQL> select to_char(sysdate, 'yyyy/mm/dd HH24:MI:SS') from dual ;

 

TO_CHAR(SYSDATE,'YY

-------------------

2012/05/03 13:24:25

 

SQL> select to_char(sysdate - 31, 'yyyymmdd') from dual ;

 

TO_CHAR(

--------

20120402

 

SQL> select to_char(sysdate, 'yyyy/mm/dd') from dual ;

 

TO_CHAR(SY

----------

2012/05/03

 

SQL> select to_char(sysdate, 'Month DD, YYYY') from dual ;

 

TO_CHAR(SYSDATE,'MONTHDD,YYYY')

---------------------------------------------

May       03, 2012

 

SQL> select to_char(sysdate, 'FMMonth DD, YYYY') from dual ;

 

TO_CHAR(SYSDATE,'FMMONTHDD,YYYY')

---------------------------------------------

May 3, 2012

 

SQL> select to_char(sysdate, 'MON DDth, YYYY') from dual ;

 

TO_CHAR(SYSDATE,'MONDDT

-----------------------

MAY 03RD, 2012

 

SQL> select to_char(sysdate, 'FMMON DDth, YYYY') from dual ;

 

TO_CHAR(SYSDATE,'FMMOND

-----------------------

MAY 3RD, 2012

 

SQL> select to_char(sysdate, 'FMMon ddth, YYYY') from dual ;

 

TO_CHAR(SYSDATE,'FMMOND

-----------------------

May 3rd, 2012

 

SQL>

 

Frequently Asked Questions

Question:

Why doesn't this sort the days of the week in order?

 

    select ename, hiredate, to_char((hiredate),'fmDay') "Day"

    from emp

    order by "Day";

 

Answer:

In the above SQL, the fmDay format mask used in the to_char function will return the name of the Day and not the numeric value of the day.

To sort the days of the week in order, you need to return the numeric value of the day by using the fmD format mask as follows:

 

    select ename, hiredate, to_char((hiredate),'fmD') "Day"

    from emp

    order by "Day";

 

3. to_date function

 

Syntax : TO_DATE(문자값, ‘형식’) / to_date(string1, [format_mask], [nls_language])

-       string1 is the string that will be converted to a date.

-       format_mask is optional. This is the format that will be used to convert string1 to a date.

-       nls_language is optional. This is the nls language used to convert string1 to a date.

 

Example : 문자를 날짜로 변환

SQL> select TO_DATE('May 3 2012','MONTH DD YYYY') from dual ;

 

TO_DATE('

---------

03-MAY-12

 

SQL> select sysdate - to_date('20120101', 'yyyymmdd') from dual ;

 

SYSDATE-TO_DATE('20120101','YYYYMMDD')

--------------------------------------

                            123.577465

 

SQL> select to_date('2012/05/03', 'yyyy/mm/dd') from dual ;

 

TO_DATE('

---------

03-MAY-12

 

SQL> select to_date('050312', 'MMDDYY') from dual ;

 

TO_DATE('

---------

03-MAY-12

 

SQL> select to_date('20120503', 'yyyymmdd') from dual ;

 

TO_DATE('

---------

03-MAY-12

 

SQL>

 

4. to_number function

 

Syntax : TO_NUMBER(문자값) / to_number( string1, [format_mask], [nls_language] )

-       string1 is the string that will be converted to a number.

-       format_mask is optional. This is the format that will be used to convert string1 to a number.

-       nls_language is optional. This is the nls language used to convert string1 to a number.

 

Example : 문자를 숫자로 변환

SQL> select TO_NUMBER('1234567') from dual ;

 

TO_NUMBER('1234567')

--------------------

             1234567

 

SQL> select to_number('1210.73', '9999.99') from dual ; 

 

TO_NUMBER('1210.73','9999.99')

------------------------------

                       1210.73

 

SQL> select to_number('546', '999') from dual ; 

 

TO_NUMBER('546','999')

----------------------

                   546

 

SQL> select to_number('23', '99') from dual ; 

 

TO_NUMBER('23','99')

--------------------

                  23

 

SQL>

 

5. Syntax 의 형식에 대해서

 

형식 : 숫자를 문자로 변환시에 형식에 사용되는 요소

Parameter

Explanation

9

일반적인 숫자를 나타냄

0

앞의 빈자리를 0으로 채움

$

dollar를 표시함

L

지역 통화 단위

.

소숫점을 표시함

,

천단위를 표시함

 

  형식 : 날짜를 문자로 변환시에 형식에 사용되는 요소

Parameter

Explanation

SCC

세기를 표시 S는 기원전(BC)

YEAR

연도를 알파벳으로 spelling

YYYY

4자리 연도로 표시

YYY / YY / Y

끝의 3 / 2 / 1 자리 연도로 표시

Q

Quarter(분기) of year (1, 2, 3, 4; JAN-MAR = 1).

MONTH

월을 알파벳으로 spelling

MON

월의 알파벳 약어

MM

월을 2자리 숫자로 표시

RM

Roman numeral month (I-XII; JAN = I).

WW

Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.

W

Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.

DAY

일에 해당하는 요일, Name of day.

DY

일에 해당하는 요일의 약어

DDD

연도,,일 중의 날짜를 숫자로 표시, Day of year (1-366).

DD

Day of month (1-31).

D

Day of week (1-7).

HH

시간을 표시, Hour of day (1-12).

HH12

시간을 표시, Hour of day (1-12).

HH24

시간을 표시, Hour of day (0-23).

MI

분을 표시, Minute (0-59).

SS

초를 표시, Second (0-59).

SSSSS

Seconds past midnight (0-86399).

FF

Fractional seconds. Use a value from 1 to 9 after FF to indicate the number of digits in the fractional seconds. For example, 'FF4'.

AM(A.M.),PM(P.M.)

오전인지 오후인지를 표시

AD or A.D

AD indicator

BC or B.C.

BC indicator

TZD

Daylight savings information. For example, 'PST'

TZH

Time zone hour.

TZM

Time zone minute.

TZR

Time zone region.

 

Reference : http://www.techonthenet.com/oracle/functions/index.php

End of dicument.

// Subject : [OracleDB] 공통 Invalid Object Compile 방법

// Tag : Oracle DB Invalid Object Compile Manually Recompile script

 

1. Oracle DB 에서 왜 주기적인 Invalid Object ReCompile 이 필요한가 ?

 

아래의 여러 가지 사유들로, Object 들이 Invalid 상태로 빠지게 됩니다.

-       Oracle DB 에 대한 Major, Minor Upgrade 수행 후

-       Function 이 사용하는 Table Column 추가/삭제/변경이 발생되는 경우

 

보통은 Object 들을 CALL/USE 하게 되면, 다시 Valid 상태로 자동 Compile 이 되나,

때로는 아래의 문제들을 발생시키기도 합니다. DB 장애의 원인이 되기도 합니다.

-       ORA-4020 : Deadlock 이 감지된 상태에서의 library object 에 대한 lock을 획득 실패, <Note:130409.1> 참조

-       ORA-00911 : User miss (Descriptive Flexfield 등을 신규생성/수정 시, Segment name 의 첫 CHARACTER 로 숫자나 알파벳 혹은 한글이 아닌 특수문자(ex> "[]")를 사용) Object Compile 불가 상태로 변경된 경우

 

따라서, DBA 들은, 주기적으로 Invalid Object 들을 조사해서, 사전에 Recompile 을 통해, 관련 Object 들의 문제를 조치하고, 예기치 못한 Issue 발생에 대비하고 있습니다.

 

2. Invalid Object Re compile 하는 방법

 

기본적으로 Oracle DB 에는 Invalid Object 들을 Compile 하는 5가지 방법이 존재합니다.

- DBMS_DDL

- DBMS_UTILITY

- UTL_RECOMP

- UTLRP.SQL

- Manually Recompile

 

 저는 간단한 Script 를 이용해서, Manual recompile 하기를 좋아 하는데, text mode telnet 창에 접속하여, 다수의 서버들에서 logging 하면서 동시 작업하기가 편하기 때문입니다. 각각의 방법들은 장단점들이 있지만, 여기서는 언급하지 않고, 수행 방법들만 기술하도록 하겠습니다.

 

2-A. DBMS_DDL.ALTER_COMPILE

 

    Definition : ALTER PROCEDUREFUNCTIONPACKAGE [.] COMPILE [BODY]

    Syntax : Exec dbms_ddl.alter_compile ( type , schema, name);

-       Type : Must be either PROCEDURE, FUNCTION, PACKAGE, PACKAGE BODY or TRIGGER.

 

    Example

SQL> exec dbms_ddl.alter_compile ('PROCEDURE','SCOTT','TEST');

PL/SQL procedure successfully completed.

SQL>

 

2-B. DBMS_UTILITY.COMPILE_SCHEMA

 

    Definition : This procedure compiles all procedures, functions, packages, and triggers in the specified schema.

    Syntax : Exec dbms_utility.compile_schema ( schema,compile all)

-       Compile All : Object type ( procedure, function, packages,trigger)

 

    Example

SQL> exec dbms_utility.compile_schema('SCOTT');

PL/SQL procedure successfully completed.

SQL>

 

2-C. UTL_RECOMP

 

    Definition : This script is particularly useful after a major-version upgrade that typically invalidates all PL/SQL and Java objects.

    Syntax : Exec UTL_RECOMP.RECOMP_SERIAL ();

-       Note: Required SYS user to run this package.

 

    Example

SQL> Exec UTL_RECOMP.RECOMP_SERIAL ();

PL/SQL procedure successfully completed.

SQL>

 

2-D. UTLRP.SQL scripts

 

    Definition : Recompiles all existing PL/SQL modules that were previously in an INVALID state, such as packages, procedures, and types.

    Syntax : Located: $ORACLE_HOME/rdbms/admin

-       Note: Required SYS user to run this script.

-       Recommended: After upgrade or migrate database.

 

    Example

SQL> @ c:\oracle\product\10.2.0\db_1\rdbms\admin\UTLRP.SQL

    TIMESTAMP

    -----------------------------------------------------------------------

    COMP_TIMESTAMP UTLRP_BGN 2012-02-03 10:40:22

    PL/SQL procedure successfully completed.

    COMP_TIMESTAMP UTLRP_END 2012-02-03 10:40:29

    PL/SQL procedure successfully completed.

SQL>

 

2-E. Manually recompiling : Best Approach to Recompile all Invalid Objects

 

    Syntax : ALTER OBJECT_TYPE.OBJECT_NAME COMPILE ;

-       Note: VIEW, SYNONYM, PUBLIC SYNONYM, PROCEDURE, FUNCTION, PACKAGE, PACKAGE BODY, TRIGGER, UNDEFINED (MATERIALIZED VIEW), JAVA CLASS, TYPE, TYPE BODY

 

    Example : Object Type 에 따라, 몇 개의 Script 로 나눌 수 있습니다.

 

SQL> Spool recompile.sql

SQL> Select ‘alter ‘object_type’ ’object_name’ compile ; ’ From user_objects where status <> ‘VALID’ and object_type IN (‘VIEW’, ’SYNONYM’, ‘PROCEDURE’, ’FUNCTION’,     ‘PACKAGE’, ’TRIGGER’) ;

SQL> spool off

SQL> @ recompile.sql

-       Note : VIEW, SYNONYM, PROCEDURE, PACKAGE, FUNCTION, TRIGGER

 

SQL> Spool pkg_body.sql

SQL> Select ‘alter package ’object_name’ compile body ; ’ from user_objects where status <> ‘VALID’ and object_type = ‘PACKAGE BODY’ ;

SQL> spool off

SQL> @ pkg_body.sql

-       Note : PACKAGE BODY

 

SQL> Spool undefined.sql

SQL> select ‘alter materizlized view ’object_name’ compile ; ’ from user_objects where status <> ‘VALID’ and object_type =‘UNDEFINED’ ;

SQL> spool off

SQL> @ undefined.sql

-       Note : UNDEFINED

 

SQL> Spool javaclass.sql

SQL> Select ‘alter java class ’object_name’ resolve ; ’ from user_objects where status <> ‘VALID’ and object_type =‘JAVA CLASS’ ;

SQL> spool off

SQL> @ javaclass.sql

-       Note : JAVA CLASS’

 

SQL> Spool typebody.sql

SQL> Select ‘alter type ‘object_name’ compile body ; ’ from user_objects where status <> ‘VALID’ and object_type =‘TYPE BODY’ ;

SQL> spool off

SQL> @ typebody.sql

-       Note : TYPE BODY

 

SQL> Spool public_synonym.sql

SQL> Select ‘alter public synonym ‘object_name’ compile ; ’ from user_objects where status <> ‘VALID’ and owner = ‘PUBLIC’ and object_type = ‘SYNONYM’ ;

SQL> spool off

SQL> @ public_synonym.sql

-       Note : PUBLIC SYNONYM

 

End of document.

1.1.1  PASSWORD_LIFE_TIME을 통한 password 유효기간 변경

 

A.    개요

 

Oracle 11g 부터 user password 의 유효기간 기본 값이180()로 변경되었다.  (기존 값 UNLIMITED), 따라서 180일이 지나면 passwd expire 된다

 

B.    설정변경

 

-- Default Profile 을 변경하여 일괄 적용하는 방법

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED ;

 

-- 새로운 Profile 을 생성하여, 특정 user 에 제한적으로 적용하는 방법

#] connect /as sysdba

SQL> create profile profile_new01 LIMIT PASSWORD_LIFE_TIME UNLIMITED ;

SQL> alter user <username> profile profile_new01 ;

 

1.1.2  FAILED_LOGIN_ATTEMPTS을 통한 부정확한 password 허용횟수 변경

 

A.    개요

 

Oracle 11g 부터 user password 를 부정확하게 입력하는 경우, 접속 시도를 허용하는 횟수 기본값이 10()로 변경되었다. (기존 값은 UNLIMITED), 따라서 부정확한 패스워드를 10회 입력하게 되면, 계정이 잠기게 된다. 10gR2 부터는 password 에 한해서 영문 대문자, 소문자를 구분하므로, 특히 (통상 대/소문자를 구분하지 않는) Windows 로 부터의 자동접속 경로에 의해, user account lock 되는 경우가 다수 발생된다.

 

B.    설정변경

 

-- Default Profile 을 변경하여 일괄 적용하는 방법

SQL> ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED ;

 

-- 새로운 Profile 을 생성하여, 특정 user 에 제한적으로 적용하는 방법

#] connect /as sysdba

SQL> create profile profile_new01 LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED ;

SQL> alter user <username> profile profile_new01 ;

 

C.    잠긴 계정 (locked account)을 접속 가능하도록 풀어 주는 Query

 

SQL> connect /as sysdba

SQL> alter user <username> account unlock ;

 

D.    관련 정보 조회 (현재 설정값)

 

SQL> connect /as sysdba

SQL> select * from dba_profiles where resource_name in ('FAILED_LOGIN_ATTEMPTS',

'PASSWORD_LIFE_TIME');

 

PROFILE                  RESOURCE_NAME           RESOURCE     LIMIT

----------------------------  -------------------------------  ----------------  --------------

MONITORING_PROFILE    FAILED_LOGIN_ATTEMPTS     PASSWORD    UNLIMITED

DEFAULT                 FAILED_LOGIN_ATTEMPTS     PASSWORD    10

MONITORING_PROFILE    PASSWORD_LIFE_TIME        PASSWORD    DEFAULT

DEFAULT                 PASSWORD_LIFE_TIME        PASSWORD    180

 

SQL>


End of documents

+ Recent posts