반응형
반응형
반응형

출처 : http://cafe.naver.com/prodba

sysdba로 접속하여 알아낸다...

또한 결과는 alert.log로 찍힌다 ~

$> sqlplus '/as sysdba'

sql>


create trigger logon_denied_to_alert
after servererror on database
declare
message varchar2(4000);
begin
    select 'ip='||sys_context('userenv','ip_address')||',host='||sys_context('userenv ','host')||',osuser='||SYS_CONTEXT('USERENV', 'OS_USER')
    into message
    from dual;
IF (ora_is_servererror(1017)) THEN
message := to_char(sysdate,'Dy Mon dd HH24:MI:SS YYYY') || ' logon denied for ' || message;
sys.dbms_system.ksdwrt(2,message);
end if;
end;
/
반응형

'Database > ORACLE' 카테고리의 다른 글

오라클 TRANSLATE  (0) 2011.03.31
오라클 자격증 신청 절차  (0) 2011.03.28
테이블 정의서 추출 생성 스크립트  (0) 2011.01.06
ORACLE SESSION Monitoring SQL  (0) 2011.01.05
오라클 공부 방법  (0) 2010.12.08
반응형


뭐... 엑셀로 바로 출력하자고 하니...

깔아야 하는것들이 너무 많고 -_-...

버젼별로 차이도 존재하니.. 귀찮아... 하앍....

그래서 걍.. 수작업 -_-

별도로 설치할 필요는 없고

아래와 같이 실행하여 spool 된 파일을 excel에서 불러

다시 가공처리...

뭐... 짜는 것도 그리 어렵지 않지만 후후.... -_-...


 spool '/oracle/20110106_table.txt'

SET SERVEROUTPUT ON;
set serveroutput on size unlimited;

DECLARE

    L_TABLE_NAME VARCHAR2(2000);   
    M_NO NUMBER(9) := 1;
    L_NO NUMBER(9);
   
    CURSOR TABLE_DEF_LIST IS
    select A.TABLE_NAME, B.COMMENTS from USER_TABLES A, USER_TAB_COMMENTS B WHERE A.TABLE_NAME=B.TABLE_NAME
    order by A.TABLE_NAME;

    CURSOR TABLE_LIST IS
     SELECT
               B.COLUMN_NAME "컬럼ID",
               B.COMMENTS "컬럼명",
               A.DATA_TYPE || '(' || A.DATA_LENGTH || ')' "타입",
               A.DATA_LENGTH "길이",
               A.NULLABLE    "NULLABLE",              
               CASE WHEN TRIM(C.COLUMN_NAME) IS NOT NULL THEN 'Y' ELSE 'N' END "KEY",
               DATA_DEFAULT  "DF"
         FROM USER_TAB_COLS A, USER_COL_COMMENTS B, DBA_CONS_COLUMNS C
        WHERE A.TABLE_NAME  = B.TABLE_NAME
          AND A.COLUMN_NAME = B.COLUMN_NAME
          AND A.TABLE_NAME = C.TABLE_NAME(+)
          AND A.COLUMN_NAME = C.COLUMN_NAME(+)
          AND A.TABLE_NAME = L_TABLE_NAME;
         
    N_DEFAULT VARCHAR2(2000);   
   
    TABLE_LIST_CNT TABLE_LIST%ROWTYPE;
         
BEGIN

    BEGIN
   
        FOR TABLE_DEF_LIST_GET IN TABLE_DEF_LIST LOOP

            L_TABLE_NAME := TABLE_DEF_LIST_GET.TABLE_NAME;
           
            DBMS_OUTPUT.PUT_LINE('순번        : ' || M_NO);
            DBMS_OUTPUT.PUT_LINE('테이블 ID   : ' || TABLE_DEF_LIST_GET.TABLE_NAME);
            DBMS_OUTPUT.PUT_LINE('테이블 설명 : ' || TABLE_DEF_LIST_GET.COMMENTS);
           
            DBMS_OUTPUT.PUT_LINE('No.' || '***' || '컬럼ID' || '***' || '컬럼명' || '***' || '타입' || '***' || '길이' || '***' || 'NULL' || '***'|| 'KEY' || '***' ||'DEFAULT');
           
            M_NO := M_NO + 1;
            L_NO := 1;
           
            BEGIN
           
                FOR TABLE_LIST_CNT IN TABLE_LIST LOOP
               
                    --FETCH TABLE_LIST INTO TABLE_LIST_CNT; -- 한행 씩 읽기
                    EXIT WHEN TABLE_LIST%NOTFOUND;        -- 데이터가 발견되지 않으면 종료
                   
                    N_DEFAULT := '';
                    N_DEFAULT := TABLE_LIST_CNT.DF ;      -- LONG 데이터를 VARCHAR2로 변환
                   
                    DBMS_OUTPUT.PUT_LINE(L_NO || '***' || TABLE_LIST_CNT.컬럼ID || '***' || TABLE_LIST_CNT.컬럼명 || '***' || TABLE_LIST_CNT.타입 || '***' || TABLE_LIST_CNT.길이 || '***' || TABLE_LIST_CNT.NULLABLE || '***'|| TABLE_LIST_CNT.KEY || '***' ||N_DEFAULT);
                   
                    L_NO := L_NO + 1;
                END LOOP;
               
            EXCEPTION WHEN OTHERS THEN
                DBMS_OUTPUT.PUT_LINE('** 테이블 컬럼  내용 조회 오류 발생 ! ** ');   
            END;

            DBMS_OUTPUT.PUT_LINE(' '); 
            DBMS_OUTPUT.PUT_LINE('===========================================================');
            DBMS_OUTPUT.PUT_LINE(' ');
             
        END LOOP;
       
    EXCEPTION WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('** 테이블 조회 오류 발생 ! ** ');   
    END;
           
END;
/

spool off




반응형
반응형

  SELECT   ROUND (BITAND (s.ownerid, 65535)) parent_session_sid,
           ROUND (BITAND (s.ownerid, 16711680) / 65536) parent_session_instid,
           s.INST_ID,
           s.SADDR,
           s.SID,
           s.SERIAL#,
           s.AUDSID,
           s.PADDR,
           s.USER#,
           s.USERNAME,
           s.COMMAND,
           s.OWNERID,
           s.TADDR,
           s.LOCKWAIT,
           s.STATUS,
           s.SERVER,
           s.SCHEMA#,
           s.SCHEMANAME,
           s.OSUSER,
           s.PROCESS,
           s.MACHINE,
           s.PORT,
           s.TERMINAL,
           UPPER (s.PROGRAM) PROGRAM,
           s.TYPE,
           s.SQL_ADDRESS,
           s.SQL_HASH_VALUE,
           s.SQL_ID,
           s.SQL_CHILD_NUMBER,
           s.PREV_SQL_ADDR,
           s.PREV_HASH_VALUE,
           s.PREV_SQL_ID,
           s.PREV_CHILD_NUMBER,
           s.PLSQL_ENTRY_OBJECT_ID,
           s.PLSQL_ENTRY_SUBPROGRAM_ID,
           s.PLSQL_OBJECT_ID,
           s.PLSQL_SUBPROGRAM_ID,
           s.MODULE,
           s.MODULE_HASH,
           s.ACTION,
           s.ACTION_HASH,
           s.CLIENT_INFO,
           s.FIXED_TABLE_SEQUENCE,
           s.ROW_WAIT_OBJ#,
           s.ROW_WAIT_FILE#,
           s.ROW_WAIT_BLOCK#,
           s.ROW_WAIT_ROW#,
           s.LOGON_TIME,
           s.LAST_CALL_ET,
           s.PDML_ENABLED,
           s.FAILOVER_TYPE,
           s.FAILOVER_METHOD,
           s.FAILED_OVER,
           s.RESOURCE_CONSUMER_GROUP,
           s.PDML_STATUS,
           s.PDDL_STATUS,
           s.PQ_STATUS,
           s.CURRENT_QUEUE_DURATION,
           s.CLIENT_IDENTIFIER,
           s.BLOCKING_SESSION_STATUS,
           s.BLOCKING_INSTANCE,
           s.BLOCKING_SESSION,
           s.SEQ#,
           s.EVENT#,
           s.EVENT,
           s.P1TEXT,
           s.P1,
           s.P1RAW,
           s.P2TEXT,
           s.P2,
           s.P2RAW,
           s.P3TEXT,
           s.P3,
           s.P3RAW,
           s.WAIT_CLASS_ID,
           s.WAIT_CLASS#,
           s.WAIT_CLASS,
           s.WAIT_TIME,
           s.SECONDS_IN_WAIT,
           s.STATE,
           s.SERVICE_NAME,
           s.SQL_TRACE,
           s.SQL_TRACE_WAITS,
           s.SQL_TRACE_BINDS,
           s.ECID,
           stat.cpu - stat.CPU_this_call_start cpu_this_call,
           stat.CPU,
           stat.UGA_memory,
           stat.PGA_memory,
           stat.Commits,
           stat.Rollbacks
    FROM   GV$SESSION S,
           (  SELECT   ss.inst_id stat_inst_id,
                       ss.sid stat_sid,
                       SUM(DECODE (sn.name,
                                   'CPU used when call started', ss.VALUE,
                                   0))
                          CPU_this_call_start,
                       SUM(DECODE (sn.name,
                                   'CPU used by this session', ss.VALUE,
                                   0))
                          CPU,
                       SUM (DECODE (sn.name, 'session uga memory', ss.VALUE, 0))
                          uga_memory,
                       SUM (DECODE (sn.name, 'session pga memory', ss.VALUE, 0))
                          pga_memory,
                       SUM (DECODE (sn.name, 'user commits', ss.VALUE, 0))
                          commits,
                       SUM (DECODE (sn.name, 'user rollbacks', ss.VALUE, 0))
                          rollbacks
                FROM   GV$sesstat ss, GV$statname sn
               WHERE   ss.STATISTIC# = sn.STATISTIC# AND ss.inst_id = sn.inst_id
                       AND (   sn.name = 'CPU used when call started'
                            OR sn.name = 'CPU used by this session'
                            OR sn.name = 'session uga memory'
                            OR sn.name = 'session pga memory'
                            OR sn.name = 'user commits'
                            OR sn.name = 'user rollbacks')
            GROUP BY   ss.inst_id, ss.sid) stat
   WHERE   (    (s.USERNAME IS NOT NULL)
            AND (NVL (s.osuser, 'x') <> 'SYSTEM')
            AND (s.TYPE <> 'BACKGROUND'))
           AND ( (stat.stat_inst_id = s.inst_id) AND (stat.stat_sid = s.sid))
ORDER BY   "PROGRAM", OWNERID
반응형
반응형

기본은 오라클 교재입니다.

글을 보니 오라클을 M/A 하는 회사에 들어가신것 같은데요.

버젼은 9i를 기본으로 10gNF, 11gNF 순으로 공부하시기 바랍니다.

아직 현업에서 8이나 8i 버젼을 사용하는 곳도 꽤 있어서

9i부터 시작해야 전체적으로 볼 수 있을것 같습니다.

그리고 메타링크는 자료가 광범위 하지만

우선 install, upgrade, patch 순으로 공부를 시작해서

case by case study로 TPS를 공부하시구요.

ADTSP까지 공부하시면 일단 M/A에 기본적인 부분은 된거죠.

여기서부터 회사내 밥벌이 하면서 자신이 하고 싶은 분야를 찾아서 해야합니다.

RAC 전문가, 복구전문가를 하거나 SQL 전문가, 모델링 전문가 등으로 나가도 되구요.

일단 기본을 만든 후에 주위에 업계 선배들이 어떤 일을 하는지.

자신에게 맞는 일이 무엇인지 곰곰히 생각하고 결정하시기 바랍니다.

(뭐 한국 DBA의 현실은 만능을 원하지만요^^;; 그래도 주종목은 있어야겠죠?)

반응형
반응형

1. 해당프로세스의 PID확인 후 수행
select s.sid, p.sid from v$session s, v$process p
where s.paddr=p.addr and p.spid="OSPID";

2. OSPID로 조회된 s.sid number을 이용하여 수행중인 SQL query를 확인
set long 10000
select a.sql_text from v$sqltext a,v$session b
where a.address=b.sql_address and
a.hash_valur=b.sql_hash_value and
b.sid=SID NUMBER order by a.piece;

 

OSPID에 processes ID넣으시면 되구요..

 

kill은 ALTER SYSTEM KILL SESSION '세션ID,시리얼번호';

v$session에서 조회하면sid,serial# 항목에 나오죠..

 

반응형

'Database > ORACLE' 카테고리의 다른 글

ORACLE SESSION Monitoring SQL  (0) 2011.01.05
오라클 공부 방법  (0) 2010.12.08
오라클 일일 모니터링  (1) 2010.11.05
오라클 이기종간의 DB 복제  (0) 2010.10.15
ORACLE PATCHSET Upgrade  (0) 2010.09.14
반응형

시스템 유지보수(SM)에는

디스크의 증가량을 주별 또는 월별로 모니터링하여 미리 할당할 수도 있고

보고용으로도 사용할 수 있도록 DB에 관리용 테이블을 만들어

자동으로 저장할 수 있도록 해 놓으면 시간이 많이 지난 다음에도

추이를 알 수 있어 유용합니다.

 

테이블스페이스 사용율(exec_tbs_usage.sh)을

매일 야간에 Crontab에서 실행할 수 있도록 등록하여 사용하는 샘플입니다.

 

% vi exec_tbs_usage.sh
#---------------------------------------------------------
# ORACLE 환경변수
#---------------------------------------------------------
export ORACLE_SID=TESTDB

export ORACLE_BASE=/oracle/app

export ORACLE_HOME=$ORACLE_BASE/product/10.2

      :

#-------------------------------------------------
# 실행할 쉘이 존재하는 절대경로
#-------------------------------------------------
cd /oracle/app/product/10.2/DBA


echo "DB Tablespace Usage"        > ./log/exec_tbs_usage.log
date                             >> ./log/exec_tbs_usage.log
TABLESPACE_USAGE.sh              >> ./log/exec_tbs_usage.log

 

% vi TABLESPACE_USAGE.sh

#!/usr/bin/ksh

###############################################################################
#
# 일별 테이블스페이스(TABLESPACE) 사용량 저장
#
# *---------------------------------------------------------------------------
# *                 일별  테이블 건수
# *---------------------------------------------------------------------------
# *  Program              : TABLESPACE_USAGE.sh
# *  Object Name          : 없음
# *  Object Type          : PL/SQL
# *  OutPut Table         : DBMANAGER.TABLESPACE_USAGE
# *  Create Date          : 2010-06-10
# *-------------------------------------------------------------------------*/
# *
# *  Execution Sample     : exec_tablespace_usage.sh (cron job)
# *                         TABLESPACE_USAGE.sh
# *                         SQL Exec. : sqlplus / as sysdba
# *
# *-------------------------------------------------------------------------*/
#
###############################################################################

#----------------------------------------------
#-- DB수집정보를 저장할 오라클 계정 생성 및 Grant
#----------------------------------------------
#-- DROP USER DBMANAGER CASCADE;
#-- CREATE USER DBMANAGER IDENTIFIED BY DBMANAGER

#--              DEFAULT TABLESPACE TOOLS TEMPORARY TABLESPACE TEMP;
#--
#-- GRANT SELECT_CATALOG_ROLE, SELECT ANY TABLE, SELECT ANY DICTIONARY TO DBMANAGER;
#-- GRANT UNLIMITED TABLESPACE   TO DBMANAGER;
#-- GRANT BECOME USER            TO DBMANAGER;
#-- GRANT CREATE VIEW            TO DBMANAGER;
#-- GRANT CREATE TABLE           TO DBMANAGER;
#-- GRANT ALTER  SESSION         TO DBMANAGER;
#-- GRANT CREATE SESSION         TO DBMANAGER;
#-- GRANT CREATE SYNONYM         TO DBMANAGER;
#-- GRANT SELECT ANY TABLE       TO DBMANAGER;
#-- GRANT SELECT ANY SEQUENCE    TO DBMANAGER;
#-- GRANT SELECT ANY DICTIONARY  TO DBMANAGER;
#--
#--
#----------------------------------------------
#-- DB수집정보를 저장할TABLE 생성 및 Grant
#----------------------------------------------
#--
#-- DROP TABLE DBMANAGER.TABLESPACE_USAGE PURGE;
#-- CREATE TABLE DBMANAGER.TABLESPACE_USAGE
#--      ( GATHER_DATE     CHAR(8)      DEFAULT TO_CHAR(SYSDATE,'YYYYMMDD') NOT NULL,
#--        TABLESPACE_NAME VARCHAR2(30)           NOT NULL,
#--        ALLOC_KBYTES    NUMBER       DEFAULT 0 NOT NULL,
#--        USED_KBYTES     NUMBER       DEFAULT 0 NOT NULL,
#--        EXEC_DATETIME   DATE         DEFAULT SYSDATE NOT NULL
#--      ) TABLESPACE TOOLS;
#--
#-- CREATE UNIQUE INDEX
#--        DBMANAGER.UK_TABLESPACE_USAGE_01 ON DBMANAGER.TABLESPACE_USAGE(GATHER_DATE, TABLESPACE_NAME)
#--        TABLESPACE TOOLS;

#-- COMMENT ON TABLE DBMANAGER.TABLESPACE_USAGE IS '테이블스페이스 크기 및 사용량';
#--
#-- COMMENT ON COLUMN DBMANAGER.TABLESPACE_USAGE.GATHER_DATE     IS '수집 일시';
#-- COMMENT ON COLUMN DBMANAGER.TABLESPACE_USAGE.TABLESPACE_NAME IS '테이블스페이스 명';
#-- COMMENT ON COLUMN DBMANAGER.TABLESPACE_USAGE.ALLOC_KBYTES    IS '할당된 크기(KB)';
#-- COMMENT ON COLUMN DBMANAGER.TABLESPACE_USAGE.USED_KBYTES     IS '사용된 크기(KB)';
#-- COMMENT ON COLUMN DBMANAGER.TABLESPACE_USAGE.EXEC_DATETIME   IS '수행 일시';

#---------------------------------------------------------
# ORACLE 환경변수
#---------------------------------------------------------
export ORACLE_SID=TESTDB

export ORACLE_BASE=/oracle/app

export ORACLE_HOME=$ORACLE_BASE/product/10.2

      :

#-------------------------------------------------
# 실행할 쉘이 존재하는 절대경로
#-------------------------------------------------
cd /sw/oracle/app/product/10.2/DBA

if [ $# != 0 ]
then

    echo "\n-----------------------------------------"
    echo "\n인수(Argument) 갯수가 틀립니다."
    echo "\n실행 예) : TABLESPACE_USAGE.sh"
    echo "\n-----------------------------------------"
    exit
fi

#---------------------------------------------------------
# 입력 값 없음
#---------------------------------------------------------

##################################
##### [ 오라클 PL/SQL Start] #####
##################################

#--------------------
#-- SQL*PLUS 접속
#--------------------
sqlplus -s /nolog<<EOF

SET SERVEROUTPUT ON
SET PAGESIZE 0 SQLPROMPT "" ECHO OFF HEADING OFF FEEDBACK OFF TIMING OFF VERIFY OFF TERMOUT ON TRIMSPOOL ON

---------------------
-- SYS 계정으로 접속
---------------------
connect / as sysdba

DECLARE

-------------------------------------------------------
-- 커서 변수 선언
-------------------------------------------------------
    cursor_insert    INTEGER;
    cursor_delete    INTEGER;

-------------------------------------------------------
-- 데이터 값을 저장할 변수 선언
-------------------------------------------------------
    v_dummy          NUMBER;
    v_gather_date    VARCHAR2(08) := TO_CHAR(SYSDATE,'YYYYMMDD');

-------------------------------------------------------
-- SQL 문장을 저장할 변수 선언
-------------------------------------------------------
    insertStmt       VARCHAR2(2000);
    deleteStmt       VARCHAR2(2000);

    BEGIN

-------------------------------------------------------
-- CURSOR 열기
-------------------------------------------------------
        cursor_insert := DBMS_SQL.OPEN_CURSOR;
        cursor_delete := DBMS_SQL.OPEN_CURSOR;

-----------------------------------------------------------------
-- 중복 데이터에 의한 오류를 방지하기 위해
-- DBMANAGER.TABLESPACE_USAGE에 있는 해당일자(TODAY)의 정보 삭제
-----------------------------------------------------------------
        deleteStmt := 'DELETE /*+ parallel(A 8) */ FROM DBMANAGER.TABLESPACE_USAGE A WHERE A.GATHER_DATE = :gather_date';

        DBMS_SQL.PARSE( cursor_delete, deleteStmt, DBMS_SQL.NATIVE );

        DBMS_SQL.BIND_VARIABLE( cursor_delete, 'gather_date', v_gather_date );

        v_dummy := DBMS_SQL.EXECUTE( cursor_delete );

-------------------------------------------------------
-- DBMANAGER.TABLESPACE_USAGE에 입력(INSERT)
-------------------------------------------------------
        insertStmt := ' INSERT INTO DBMANAGER.TABLESPACE_USAGE                           '||
                      ' ( GATHER_DATE, TABLESPACE_NAME,  ALLOC_KBYTES, USED_KBYTES )     '||
                      ' SELECT :gather_date, C.TABLESPACE_NAME,                          '||
                      '        NVL(A.TOTAL,0)                   ALLOC_KBYTES,            '||
                      '        NVL(A.TOTAL,0) - NVL(B.FREE,0)   USED_KBYTES              '||
                      '   FROM (SELECT TABLESPACE_NAME,                                  '||
                      '                NVL(ROUND((SUM(BYTES)/1024),2),0) TOTAL           '||
                      '           FROM SYS.DBA_DATA_FILES                                '||
                      '          GROUP BY TABLESPACE_NAME) A,                            '||
                      '        (SELECT TABLESPACE_NAME,                                  '||
                      '                NVL(ROUND((SUM(BYTES)/1024),2),0) FREE            '||
                      '           FROM SYS.DBA_FREE_SPACE                                '||
                      '          GROUP BY TABLESPACE_NAME) B,                            '||
                      '        DBA_TABLESPACES             C                             '||
                      '  WHERE C.TABLESPACE_NAME = A.TABLESPACE_NAME(+)                  '||
                      '    AND C.TABLESPACE_NAME = B.TABLESPACE_NAME(+)                  '||
                      '    AND C.TABLESPACE_NAME NOT LIKE '||'''TEMP%'''                   ;
        DBMS_SQL.PARSE( cursor_insert, insertStmt, DBMS_SQL.NATIVE);

        DBMS_SQL.BIND_VARIABLE( cursor_insert, 'gather_date', v_gather_date );

        v_dummy := DBMS_SQL.EXECUTE( cursor_insert );

-------------------------------------------------------
-- CURSOR 닫기
-------------------------------------------------------
        DBMS_SQL.CLOSE_CURSOR( cursor_insert );
        DBMS_SQL.CLOSE_CURSOR( cursor_delete );
        COMMIT;

         EXCEPTION
--            WHEN DUP_VAL_ON_INDEX THEN
--                 DBMS_OUTPUT.PUT_LINE('DUP_VAL_ON_INDEX 에러-중복되는 데이터가 존재');
--            WHEN TOO_MANY_ROWS    THEN
--                 DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS 에러-리턴해야 하는 SELECT문이 하나 이상의 행을 반환');
--            WHEN NO_DATA_FOUND    THEN
--                 DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND 에러-SELECT문이 아무런 데이터 행을 반환하지 못함');
--            WHEN INVALID_CURSOR   THEN
--                 DBMS_OUTPUT.PUT_LINE('INVALID_CURSOR 에러-잘못된 커서 연산');
              WHEN OTHERS           THEN
                   DBMS_OUTPUT.PUT_LINE('ERR CODE : ' || TO_CHAR(SQLCODE));
                   DBMS_OUTPUT.PUT_LINE('ERR MESSAGE : ' || SQLERRM);
 END;
/
exit
EOF

 

환경 : Unix, Aix5L, Oracle10gR2

반응형

'Database > ORACLE' 카테고리의 다른 글

오라클 공부 방법  (0) 2010.12.08
오라클에서 사용량 많은 프로세스 죽이기  (0) 2010.12.03
오라클 이기종간의 DB 복제  (0) 2010.10.15
ORACLE PATCHSET Upgrade  (0) 2010.09.14
오라클 라이브러리 (참고문서)  (0) 2010.09.10
반응형


Oracle version이 10.2.0.4로 동일하고 DB간 character set 도 동일하다고 가정한다면....

 

그냥 데이타파일을 copy하면 안되고요...

Cross-Platform Transportable Tablespaces 기능을 사용하시면 됩니다.

 

이때 Source 와 Target DB에서 아래를 조회해서 endian format이 같은지 검사해서...

아래 경우 little endian인데...source db와 target db의 os가 동일한 endian이면 상관없지만

 

 

        SQL> select PLATFORM_ID, PLATFORM_NAME  from v$database;
       
        PLATFORM_ID PLATFORM_NAME
        ----------- ------------------------------
                 10 Linux IA (32-bit)

 

        SQL> select  * from v$transportable_platform;
       
        PLATFORM_ID PLATFORM_NAME                  ENDIAN_FORMAT
        ----------- ------------------------------ --------------
                  1 Solaris[tm] OE (32-bit)        Big
                  2 Solaris[tm] OE (64-bit)        Big
                  7 Microsoft Windows IA (32-bit)  Little  
                 10 Linux IA (32-bit)              Little   <--- Little endian임.
                  6 AIX-Based Systems (64-bit)     Big
                  3 HP-UX (64-bit)                 Big
                  5 HP Tru64 UNIX                  Little
                  4 HP-UX IA (64-bit)              Big
                 11 Linux IA (64-bit)              Little
                 15 HP Open VMS                    Little
                  8 Microsoft Windows IA (64-bit)  Little
                  9 IBM zSeries Based Linux        Big
                 13 Linux 64-bit for AMD           Little
                 16 Apple Mac OS                   Big
                 12 Microsoft Windows 64-bit for A Little
                    MD

 

다를 경우 Rman으로 Data File Conversion 을 해야 합니다.

 

     - Source 에서
       > rman target=/
       RMAN> Convert Tablespace 'FINANCE, HR' to Platform ='AIX_Based System (64-bit)'  <--    

                  v$transportable_platform.platform_name
                     DB_FILE_NAME_CONVERT = '/orahome/dbs1', '/orahome/dbs/transport_aix',
                                            '/orahome/dbs2', '/orahome/dbs/transport_aix'; 
         <--해당 디렉토리 아래 FINANCE, HR TS에 해당하는 모든 것을 convert하여 지정된 디렉토리 아래로 copy
        
     또는
    
     - Target 에서
       > rman target=/    
       RMAN> Convert Datafile '/tmp/transport_stage/*' From Platform = 'Solaris[tm] OE (32-bit)'
                     DB_FILE_NAME_CONVERT = '/tmp/transport_stage/fin', '/orahome/dbs1/fin',
                                            '/tmp/transport_stage/hr',  '/orahome/db2/hr';
     - DB_FILE_NAME_CONVERT 가 없으면 flash recovery area에 같은 이름으로 만들어진다.
     - Parallelism option은 parallel하게 복수개의 file을 convert할때 사용.  Convert 시간은 Rman으로
       백업할때 걸리는 시간과 같다. Convert 전후의 file size는 변함이 없다.





TDB라는 방법도 있습니다.

http://www.oracle.com/technetwork/database/features/availability/maa-wp-10gr2-platformmigrationtdb-131164.pdf


HP.UX -> AIX로 진행 해 봤는데..

시간이 많이 걸리던 순서대로 나열하면 exp/imp, TTS, TDB 순서 더군요...

참고 하세요..





반응형
반응형

 

*patch 순서 정리
1. shared_pool_size/java_pool_size=>150M요구
① SYS> show parameter sga_m <-확인
② SYS> shutdown immediate
③ SYS> create pfile from spfile
④ SYS> vi /u01/app/oracle/product/10.2.0/db_1/dbs/initdb01.ora
⑤ sga_max_size=293601280(280*1024*1024=293601280)
⑥ SYS> create spfile from pfile
⑦ SYS> startup
⑧ SYS> show parameter sga_m <-확인
⑨ SYS> alter system set shared_pool_size=100m;
⑩ SYS> alter system set java_pool_size=100m;

2. patch전 서비스 종료
① db shutdown -> SQL*PLUS 종료
② lsnrctl stop -> Listener 종료
③ emctl stop dbsonsole -> emctl 종료
④ root 계정에서
/u01/app/oracle/product/10.2.0/db_1/bin/crsctl stop crs
-> asm 설치할때 필요한 crs입니다.

3. patch 설치 -> ./runinstall
① next
② script 확인
③ y

4. startup upgrade
① export ORACLE_SID=db01 -> 접속
② sqlplus /as sysdba
③ startup upgrade

5. $ORACLE_HOME/rdbms/admin/catupgrd.sql
① @/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/catupgrd.sql

6. shutdown immediate

7. startup

8. $ORACLE_HOME/rdbms/admin/utlrp.sql
-> dba_objects.status의 값이 invalid가 없을 때까지 재실행!!!
① @/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/utlrp.sql
② select status from dba_objects;

[출처] Oracle 10.2.0.1.0 to 10.2.0.4.0 Upgrade (Oracle University (Korea)) |작성자 마이너스

반응형
반응형
반응형

+ Recent posts