ORACLE/OWI2008. 12. 22. 17:01
반응형
오라클 lock에는 여러 종류가 있습니다.
Media Recovery(MR),
Redo Thread(RT),
User Name(UN),
Transaction(TX),
DML(TM),
P/L SQL User Block(UL),
Distrbuted Xaction(DX),
Control File(CF),
Instance State(IS),
File Set(FS),
Instance Recovery(IR),
Disk Space Transaction(ST),
Temp Segment(TS),
Library Cache Invalidation(IV),
Log State or Switch(LS),
Row Wait(RW),
Extend Table(TE),
Temp Table'(Tt)
 
Row Share Table Locks(RS)  Row share table lock(내부적으로 sub-share table lock,
SS라고 불리기도 함)은  table에 lock을 걸려는 transaction이 table안에 lock된 row가
있고 그 row를 변경시키고자 하는 것을 가리킨다. Row share table lock은 다음 문장에
의해 table에 대해 자동으로 lock을 건다:

SELECT  . . .   FROM  table  . . .  FOR  UPDATE  OF  . . .  ;
LOCK  TABLE  table  IN  ROW  SHARE  MODE;

Row share table lock은 하나의 table에 대해서 높은 concurrency의 degree를 제공하기
위한 table lock의 가장 낮은 수준의 restrictive mode이다.  

Permitted Operations : Transaction에 의해서 걸리는 row share table lock은 동시에
동일한 table에 대한 query, insert, delete, update, lock row를 허용한다. 그러므로,
다른 transaction은 동일한 table에 대해 동시에 row share, row exclusive, share,
그리고 share row exclusive table lock을 걸 수가 있다.

Prohibited Operations  : Transaction에 의해서 걸리는 row share table lock은 다른 transaction이 다음의 문장을 이용하여 동일한 table에 대해 exclusive write access를
수행하는 것을 방지한다:

LOCK  TABLE  table  IN  EXCLUSIVE  MODE

Row Exclusive Table Locks(RX)  Row exclusive table lock(내부적으로 sub-exclusive
table lock, SX라 불리기도 함)은 그 lock이 걸린transaction이 그 table에 있는 row들에
대해 하나 이상의 update를 수행하고자 하는 것을 가리킨다. 다음 문장에 의해서 row
exclusive table lock이 수정된 table에 대해서 자동으로 걸린다:

INSERT  INTO  table  . . . ;
UPDATE  table  . . . ;
DELETE  FROM  table  . . . ;
LOCK  TABLE  table  IN  ROW  EXCLUSIVE  MODE;

Row exclusive table lock은 row share table lock보다 약간 더 제한적이다.

Permitted Operations : Transaction에 의해서 거리는 row exclusive table lock은
동시에 동일한 table에 대해서 다른 transaction들이  row들을 query, insert, delete,
update, lock 하는 것을 허용한다. 그러므로, row exclusive table lock들은 여러
transaction이 동일한 table에 대해 동시에 row exclusive, row share table lock을
거는 것을 허용한다.

Prohibited Operations : Transaction에 의해서 걸리는 row exclusive table lock은 다른 transaction들이 exclusive하게 읽고 쓰기 위해서 수동으로 table을 lock하는 것을 방지한다.
그러므로, 다음 문장을 사용하여 다른 transaction들은 동시에 그 table을 lock할 수 없다:

LOCK  TABLE  table  IN  SHARE  MODE;
LOCK  TABLE  table  IN  SHARE  EXCLUSIVE  MODE;
LOCK  TABLE  table  IN  EXCLUSIVE  MODE;

Share Table Locks(S)  Share table lock은 다음 문장에서 지정된 table에 대해서 자동으로 lock을 건다.

LOCK  TABLE  table  IN  SHARE  MODE;

Permitted Operations : Transaction에 의해서 걸리는 share table lock은 다른
transaction들이 단지, table에 대한 query, SELECT ... FOR UPDATE를 이용한 특정 row에 대한
lock, LOCK TABLE ... IN SHARE MODE문들을 성공적으로 수행하기 위해서 허용한다; 다른
transaction에 의한 갱신은 허용하지 않는다. 여러 transaction이 동일한 table에 대해 동시에
share table lock을 수행할 수 있다. 이 경우에 어떠한 transaction도 table을 update할 수 없다
(Transaction이 SELECT ... FOR UPDATE문장의 결과로써 row lock들을 유지할 지라도). 그러므로 만
약 다른 transaction이 동일한 table에 대해 share table lock을 또한 가지지 않을 때에만 share
table lock을 가지는 transaction이 update 할 수 있다.

Prohibited Operations : Transaction에 의해서 걸리는 Share table lock은 다른 transaction이
다음 문장으로 동일한 table을 변경하는 것을 방지한다:

LOCK  TABLE  table  IN  SHARE  ROW  EXCLUSIVE  MODE;
LOCK  TABLE  table  IN  EXCLUSIVE  MODE;
LOCK  TABLE  table  IN  ROW  EXCLUSIVE  MODE;

Share Row Exclusive Table Locks(SRX)  Share row exclusive table lock(내부적으로 share-sub-
exclusive table lock, SSX라고 불리기도 함)은 share table lock보다 좀 더 제한적이다. Share
row exclusive table lock은 다음처럼 하나의 table에 대해서 걸린다.

LOCK  TABLE  table  IN  SHARE  ROW  EXCLUSIVE  MODE;

Permitted Operations : 한 시점에 주어진 table에 대해
하나의 share row exclusive table lock만이 걸릴 수 있다.
transaction에 의해 걸린 share row exclusive table lock은
다른 transaction이 query을 하거나 SELECT ... FOR UPDATE로
특정 row를 lock하는 것을 허용하나 table의 갱신은 허용하지 않는다.

Prohibited Operations : Transaction에 의해서 걸리는
share row exclusive table lock은 다른 transaction이
동일한 table에 대해 row exclusive table lock을 걸어
table을 변경하는 것을 허용하지 않는다. Share row
exclusive table lock은 다른 transaction이 다음 문장을
이용하여 share, share row exclusive, exclusive table lock
을 수행하는 것을 방지한다.

LOCK  TABLE  table  IN  SHARE  MODE;
LOCK  TABLE  table  IN  SHARE  ROW  EXCLUSIVE  MODE;
LOCK  TABLE  table  IN  ROW  EXCLUSIVE  MODE;
LOCK  TABLE  table  IN  EXCLUSIVE  MODE;

Exclusive Table Locks(X)  Exclusive table lock은
lock을 건 transaction이 table에 대한 access를
exclusive write로 허용하는table lock의 가장 제한적인
모드이다. Exclusive table lock은 다음 문w장에 의해 걸린다:

LOCK  TABLE  table  IN  EXCLUSIVE  MODE;

Permitted Operations : 오직 하나의 transaction이 table에
대해 exclusive table lock을 걸 수 있다.

Prohibited Operations  :  Exclusive table lock은 다른
transaction이 그 table을 query하는 것만 허용한다. Exclusive
table lock은 어떤 종류의 DML문이나 어떤 종류의 lock도 금지한다.

DEFAULT LOCKING FOR INSERT, UPDATE, DELETE AND
SELECT ... FOR UPDATE STATEMENT  INSERT, UPDATE, DELETE,
그리고 SELECT ... FOR UPDATE 문장의 특성은 다음과 같다.

DML문장을 포함하는 transaction은 문장에 의해서 변경되는
row들에 대해 exclusive row lock을 건다.그러므로 locking
transaction이 commit되거나 rollback될 때까지 다른 transaction이
lock된 row를 삭제하거나 변경할 수 없다.

DML문장을 포함하는 transaction은 subquery나 WHERE절의
query와 같은 묵시적인  query에 의해서 선택된 어떠한 row에
대하여  row lock을 걸 필요가 없다.

Transaction의 query은 동일한 transaction의 DML문장에
의한 변화는 볼 수 있지만, transaction이 시작된 이후의 다른
transaction에 의한 변화는 볼 수 없다.

요구되는 exclusive row lock이외에 추가로, DML문장을 포함하는
transaction은 영향받는 row를 포함하는 table에 대해 최소한 하나의
row exclusive table lock을 건다.

반응형
Posted by [PineTree]
ORACLE/ADMIN2008. 12. 18. 14:57
반응형
Oracle Flashback 기능 이란?
 
DB 관리중에 실수로 데이타를 삭제하거나 데이타의 값을 잘못 변경 하는 실수가 가끔 발생을 합니다.
 
이러한 오류를 바로 인식할 경우는 Rollback이라는 명령으로 바로 전에 수행한 작업을 원상복귀시킬 수 있지만, COMMIT을 한 이후 시점이나, 한참 시간이 지난 후에 알았다면 간단하게 복구하기가 난감 합니다.
 
이러한 경우에 특정한 시간 또는 시점으로 되돌릴 수 있는 기능이 Oracle Flashback 기능 입니다.
 
간단하게 말해서 Flashback 기능은 특정한 과거시점의 질의를 실행할 수 있게 해 줍니다.
데이타베이스에 구조적인 변화를 가하지 않고 과거 일정 시점의 데이타 상태를 확인할 수 있는 기능 입니다..
 
일종의 오라클에서 지원하는 타임머신이라고 할 수 있죠...
 
 
 
Flashback을 사용하기 위한 요구조건
   
 - 자동 언두 관리 시스템을 사용해야 합니다.  (UNDO_MANAGEMENT 파라미터를 AUTO로 설정)
   .UNDO_MANAGEMENT = AUTO
 
 - 이전의 어느 시점까지의 언두(UNDO)정보를 보유하여 Flashback Query를 수행할것인지
   UNDO_RETENTION 파라미터를 설정해야 합니다.
   .ALTER SYSTEM SET UNDO_RETENTION=1800
 
 - 일반사용자가 Flashback 기능을 이용하기 위해서 DBMS_FLASHBACK패키지에 대한 EXECUTE권한이 있어야 합니다.
 
 
 
Flashback 사용하기
 
Flashback의 사용 방법은 과거시점의 특정 시간으로 사용하는 방법과 SCN(System Change Number)을 사용하는 방법이 있습니다.
 
 
 - 과거시점의 시간 사용: DBMS_FLASHBACK.ENABLE_AT_TIME(query_time IN TIMESTAMP);
 - SCN 사용 : DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(query_scn IN NUMBER);
 
 
과거시점의 시간을 지정하여 Flashback 기능을 사용 할 경우 오라클은 내부적으로 이를 SCN으로 전환하여 처리 합니다. 시간 정보를 SCN으로 Mapping하는 시간이 필요한데 통상 5분 주기로 이루어 집니다.
 
따라서, 시간으로 지정할때는 현재보다 5분이상 차이가 나는 과거시점을 지정해야 합니다.
 
 
또한 Flashback 기능은 무한대로 이전의 데이터를 조회할 수 있는 기능이 아니고,
관리자가 UNDO_RETENTION 파라미터를 통해서 정해준 시간(초) 동안의 데이터를 조회할 수 있습니다.
 
 - 디폴트 UNDO_RETENTION 시간은 10800(3시간) 입니다.
 
그리고  Flashback data를 참고하는 경우엔 DML, DDL등의 작업을 직접 수행 할 수 없습니다.
 
 

 


Flashback 사용예제


C:\>SQLPLUS /NOLOG
 
 
▒▒▒▒▒▒ Flashback 사용을 위한 환경설정 시작 ▒▒▒▒▒▒
 
-- SYSDBA 권한으로 접속
SQL>CONN / AS SYSDBA
 
 
-- UNDO MANAGEMENT MODE 확인
SQL>SHOW PARAMETER UNDO;
NAME                                 TYPE        VALUE
--------------------------- ----------- ---------
undo_management                 string       AUTO
undo_retention                       integer      10800
undo_suppress_errors            boolean     FALSE
undo_tablespace                    string        UNDOTBS1
 
   
-- undo_management가 MANUAL로 되어있을경우 아래와 같이 변경하고 UNDO 테이블스페이스를 생성하고 지정합니다..
SQL>ALTER SYSTEM SET UNDO_MANAGEMENT = AUTO SCOPE=SPFILE;
 
-- UNDO 테이블 스페이스 생성
SQL>CREATE UNDO TABLESPACE UNDOTBS2
    DATAFILE ’D:\oracle\oradata\oracle\UNDOTBS2.dbf’ SIZE 100M;
 
-- UNDO 테이블 스페이스 지정
SQL>ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2
 
 
-- UNDO_RETENTION 시간을 변경하시면 실제 적용을 위해 5분정도 기다려야 합니다.
SQL>ALTER SYSTEM SET UNDO_RETENTION=1800
 
 
-- scott유저에게 DBMS_FLASHBACK EXEUCTE 권한 부여
SQL>GRANT EXECUTE ON DBMS_FLASHBACK TO SCOTT;
 
▒▒▒▒▒▒ Flashback 사용을 위한 환경설정 끝 ▒▒▒▒▒▒
 
 
-- 테스트를 위해서 scott 유저에 접속을 합니다.
SQL>CONN scott/tiger
 
 
-- emp 테이블 14건의 데이터 확인
SQL>SELECT * FROM emp;
14 개의 행이 선택되었습니다...
  
 
-- 데이터 삭제하기전의 날짜를 확인 합니다.
-- Flashback을 이용하여 이 시점에서 데이터를 조회, 복구 할 것입니다.
SQL> SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
TO_CHAR(SYSDATE,’YY
-------------------
2006-01-21 17:16:51
 
10G 에서 SYSTIMESTAMP
SQL> SELECT SYSTIMESTAMP FROM DUAL;

SYSTIMESTAMP
---------------------------------------------------------------------------
18-DEC-08 03.27.03.993567 PM +09:00

-- 데이터를 삭제 합니다.
SQL>DELETE FROM emp;
14 행이 삭제되었습니다.
 
 
-- commit 수행
SQL>COMMIT;
 
 
-- 데이터 확인
SQL>SELECT * FROM emp;
선택된 레코드가 없습니다.
 
 
-- Flashback 과거시점의 시간사용 모드 Enable로 데이터 확인
SQL>EXEC DBMS_FLASHBACK.ENABLE_AT_TIME(TO_TIMESTAMP(’2006-01-21 17:16:51’, ’YYYY-MM-DD HH24:MI:SS’))
PL/SQL 처리가 정상적으로 완료되었습니다.
 
 
-- 데이터를 확인 할 수 있습니다.
SQL>SELECT * FROM emp;
14 개의 행이 선택되었습니다.
 
 
-- Flashback Disable로 변경
SQL> EXEC DBMS_FLASHBACK.DISABLE;
PL/SQL 처리가 정상적으로 완료되었습니다.
 
 
-- Flashback Disable로 변경하면 데이터를 확인 할 수 없습니다.
SQL>SELECT * FROM emp;
선택된 레코드가 없습니다.
 
 
Flashback Disable 상태에서도 이전데이터를 보기위해서는 데이터 복구 작업을  진행해야 합니다.
아래는 삭제된 데이터 복구 예제 입니다.
 
 
 
◈  삭제된 데이터 복구
 
Oracle9i Database Release 2이상 버전에서는  SELECT...AS OF 명령을 사용하여 쉽게 Flashback 데이터를 복구 할 수 있습니다.
Oracle9i Database Release1 버전에서는 DBMS_FLASHBACK프로시저를 이용해서 데이터를 복구해야 합니.
 
 
-- 삭제된 데이터 복구(오라클 버전 Release 9.2.0.1.0 실행)
SQL>INSERT INTO TEVENTLOG
 (SELECT * FROM TEVENTLOG AS OF TIMESTAMP TO_TIMESTAMP('2008-12-17 15:00:00','YYYY-MM-DD HH24:MI:SS'))
 
 
-- 복구된 데이터 확인
SQL>SELECT * FROM emp;
14 개의 행이 선택되었습니다.
 
 
 
-- 위에 복구된 데이타를 Rollback으로 지우고 DBMS_FLASHBACK 패키지를 이용해서 복구해 봅니다.
 
-- 삭제된 데이터 복구
SQL>DECLARE
    
     CURSOR emp_cursor is
       SELECT * FROM emp;
     
      v_emp emp%ROWTYPE;
      
    BEGIN
    
     DBMS_FLASHBACK.ENABLE_AT_TIME(TO_TIMESTAMP('2006-01-21 17:16:51', 'YYYY-MM-DD HH24:MI:SS'));
     
     OPEN emp_cursor;
     
     -- Flashback을 Disable했지만 커서(test_cursor)는 여전히 과거시점의 데이터를 가지고 있습니다.
     DBMS_FLASHBACK.DISABLE;
                             
     LOOP
        FETCH emp_cursor INTO v_emp;
            EXIT WHEN emp_cursor%NOTFOUND;
            INSERT INTO emp VALUES (v_emp.empno, v_emp.ename, v_emp.job, v_emp.mgr, v_emp.hiredate, v_emp.sal, v_emp.comm, v_emp.deptno);
     END LOOP;
     CLOSE emp_cursor;
     COMMIT;
    END;
    /
 
PL/SQL 처리가 정상적으로 완료되었습니다.

-- 복구된 데이터 확인
SQL>SELECT * FROM emp;
14 개의 행이 선택되었습니다.

추가 풀래시백 테이블

  SQL> select * from tab;

 

뭐 다른 것도 있겠지만 저것도 하나에 들어가겠죠?

 

오늘 여지없이 저걸 쳤더니 'BIN$N3+PSg4FkXfgQAB/AQASdw==$0' 이런 이름의 테이블이 보이더군요.

 

desc, select 다 됩니다. 가만 보니 제가 지웠던 테이블이네요.

 

깔끔떠는 성격에 가만 놔둘리없죠.

 

  SQL> drop table BIN$N3+PSg4FkXfgQAB/AQASdw==$0;

 

  ORA-00933: SQL command not properly ended

 

뭐 이런 식으로 뜨더군요.

 

뭐야 이건...검색결과...

 

"Oracle recycle bin flashback table feature"라고 하더군요.

 

drop 열심히 날려도 휴지통(recycle bin) 기능이 생겨서 지워지지 않고 

 

"BIN$~!#^$#*(()$" 이런 식으로 남아있는 겁니다.

 

자 저걸 지우고 싶다면...

 

  SQL> PURGE RECYCLEBIN;

 

윈도우의 휴지통 비우기 정도 되겠습니다.

 

그럼 윈도우처럼 휴지통 보내지 말고 그냥 지우긴...

 

  SQL> DROP TABLE employee PURGE;

 

employee 테이블을 지운다고 가정했습니다.

 

휴지통에 보냈다면 다시 살릴 수도 있겠죠?

 

  SQL> FLASHBACK TABLE employee TO BEFORE DROP;

 

 

딱 3줄이면 요약되는거 장황하게 늘어놔봤습니다.

 

그럼...또다시 새로운 게 보이면 적도록 하겠습니다.

 

 

더 자세한 걸 원하신다면  

 

 http://www.oracle.com/technology/pub/articles/10gdba/week5_10gdba.html


 

참고문헌
 - Oracle9i Flashback Query 오라클 기술백서 2002년 3월 pdf 문서
 - Oracle Technical Bulletins No. 17863 (V9I) ORACLE 9I New Feature : ORACLE FLASHBACK
 - 강명규님의 강좌 : Flashback (과거시점에서 질의실행)

  ================================================
    * 오라클 정보공유 커뮤니티 oracleclub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 강좌 작성자 : 김정식 (oramaster _at_ naver.com)
  ================================================
반응형

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

ALTER ~ SHRINK SPACE  (0) 2009.02.05
oracle tablespace 사용량 확인 sql  (0) 2008.12.30
DICTIONARY(DICT) 뷰  (0) 2008.12.03
oracle유저 이외의 유저가 sqlplus등을 사용하는 방법  (0) 2008.11.27
DBNAME, SID 변경하기.  (0) 2008.11.26
Posted by [PineTree]
ORACLE/TroubleShooting2008. 12. 17. 09:23
반응형



SQL> @TBOARD
SP2-0734: unknown command beginning "작업이 진..." - rest of line ignored.
SP2-0734: unknown command beginning "각각의 업..." - rest of line ignored.
SP2-0734: unknown command beginning "업무 진행..." - rest of line ignored.
SP2-0734: unknown command beginning "==========..." - rest of line ignored.
SP2-0044: For a list of known commands enter HELP
and to leave enter EXIT.
SP2-0734: unknown command beginning "시스템 Upd..." - rest of line ignored.
SP2-0734: unknown command beginning "==========..." - rest of line ignored.
SP2-0734: unknown command beginning "TO_DATE('0..." - rest of line ignored.


해결방범
set sqlblanklines on 
을 하고 스크립트 실행하면 된다.
반응형
Posted by [PineTree]
ORACLE/DataGuard2008. 12. 13. 16:24
반응형

Database:Oracle:DG PSB

목차
[숨기기]

    * 1 설정
          o 1.1 환경설정
                + 1.1.1 Production DB에서
                + 1.1.2 Standby DB에서
    * 2 Standby DB Setup
          o 2.1 datafile 및 logfile 생성
          o 2.2 ORACLE NET환경 설정
          o 2.3 STANDBY LOGFILE생성
          o 2.4 standby database 운영
          o 2.5 SWITCHOVER
                + 2.5.1 Pirmary에서 Standby로 역할 변경
                + 2.5.2 Standby에서 Primary로 역할 변경
                + 2.5.3 새로운 STANDBY DB를 STANDBY 기능을 활성화
          o 2.6 protection mode의 변경
                + 2.6.1 상위모드로의 변경(UPGRADE)
                + 2.6.2 하위모드로의 변경(DOWNGRADE)


[
 본 문서는 physical standby database만을 가정한다.
 

 설정

 환경설정

Production DB에서

1. nologging option을 방지하기 위해 DB를 FORCE LOGGING MODE로 설정한다.
 
 SQL> select log_mode, force_logging from v$database;
 
 LOG_MODE FOR
 ------------ ---
 ARCHIVELOG NO
 
 SQL> alter database force logging;
 
 Database altered.
 
 2. sysdba에 login 환경을 설정한다.
 cd $ORACLE_HOME/dbs
 orapwd file=orapw password=<sys계정의 password=""> entries=10
 
 3. initial parameter를 설정한다.
 # for DataGuard Primary DB
 *.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
 *.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
 *.LOG_ARCHIVE_MAX_PROCESSES=30
 
 *.db_name=ART
 *.db_unique_name=ART
 *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(ART,ART_SB)'
 
 *.LOG_ARCHIVE_DEST_1=
  'LOCATION=/u00/ART/ARC
  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=ART'
 *.LOG_ARCHIVE_DEST_2=
  'SERVICE=ART_SB LGWR ASYNC
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  DB_UNIQUE_NAME=ART_SB'
 *.LOG_ARCHIVE_DEST_STATE_1=ENABLE
 *.LOG_ARCHIVE_DEST_STATE_2=ENABLE
 
 # for DataGuard Primary DB when Standby Role
 *.FAL_SERVER=ART_SB
 *.FAL_CLIENT=ART
 #*.db_file_name_convert='/opt/ORA/oradata/ART_SB/','/opt/ORA/oradata/ART/'
 #*.log_file_name_convert='/opt/ORA/oradata/ART_SB/','/opt/ORA/oradata/ART/'
 *.standby_file_management=auto
 
 4. DB를 OPEN하고 online redo log를 dump한다.
 SQL> alter database open;
 
 Database altered.
 
 SQL> alter database begin backup;
 
 Database altered.
 
 SQL> alter database create standby controlfile as '/tmp/ART.ctl'; 
 
 Database altered.</sys계정의>

Standby DB에서

1. Production DB에서 datafile, logfile 등을 copy한다.
  => 물론 production DB가 BEGIN BACKUP 상태에서 진행한다.
 
 2. initial parameter를 수정한다.
 # for DataGuard Standby DB when Primary Role
 *.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
 *.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
 *.LOG_ARCHIVE_MAX_PROCESSES=30
 
 *.db_name=ART
 *.db_unique_name=ART_SB
 *.instance_name=ART_SB
 *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(ART,ART_SB)'
 
 *.LOG_ARCHIVE_DEST_1=
         'LOCATION=/u00/ART/ARC
         VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
         DB_UNIQUE_NAME=ART_SB'
 *.LOG_ARCHIVE_DEST_2=
         'SERVICE=ART LGWR ASYNC
         VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
         DB_UNIQUE_NAME=ART'
 *.LOG_ARCHIVE_DEST_STATE_1=ENABLE
 *.LOG_ARCHIVE_DEST_STATE_2=ENABLE
 
 # for DataGuard Standby DB when Standby Role
 *.FAL_SERVER=ART
 *.FAL_CLIENT=ART_SB
 #*.db_file_name_convert='/opt/ORA/oradata/ART_SB/','/opt/ORA/oradata/ART/'
 #*.log_file_name_convert='/opt/ORA/oradata/ART_SB/','/opt/ORA/oradata/ART/'
 *.standby_file_management=auto
 

 Standby DB Setup

datafile 및 logfile 생성

StandBy DB의 datafile 및 logfile은 Primary DB의 hot backup본을 copy해서 구성한다.
PrimaryDB에서
1. current log를 archiving한다.
 alter system archive log current;
 2. DB를 HOT BACKUP MODE로 변경한다.
 alter database begin backup;
 
 3. 모든 datafile를 standby db의 같은 위치로 복사한다.
 4. 모든 online redo log file를 standby db의 같은 위치로 복사한다.
 5. standby db용 control file를 생성한다.
 alter database create standby controlfile as '/tmp/ART4PSB.ctl';
 6. 생성된 standby db용 control file를 standby db의 control file위치로 복사한다.

ORACLE NET환경 설정

primary와 standby 서버 위치에서 모두 db_unique_name과 동일한 이름의 tnsnames.ora의 alias를 설정한다.
 

STANDBY LOGFILE생성

Maximum protection이나 Maximum Avalablility 모드의 경우 standby redo log file을 사용해야 한다.
이경우 primary 및 standby db에서 각각 group no와 size가 primary redo log와 동일하게 생성해야 한다.
alter database add standby logfile group 11 '/u01/oradata/ART/sb_redo01.log' size 100m;
 alter database add standby logfile group 12 '/u02/oradata/ART/sb_redo02.log' size 100m;
 alter database add standby logfile group 13 '/u03/oradata/ART/sb_redo03.log' size 100m;
 alter database add standby logfile group 14 '/u04/oradata/ART/sb_redo04.log' size 100m;
 alter database add standby logfile group 15 '/u01/oradata/ART/sb_redo05.log' size 100m;
 alter database add standby logfile group 16 '/u02/oradata/ART/sb_redo06.log' size 100m;
 alter database add standby logfile group 17 '/u03/oradata/ART/sb_redo07.log' size 100m;
 alter database add standby logfile group 18 '/u04/oradata/ART/sb_redo08.log' size 100m;
 alter database add standby logfile group 19 '/u01/oradata/ART/sb_redo09.log' size 100m;
 alter database add standby logfile group 20 '/u02/oradata/ART/sb_redo10.log' size 100m;
 alter database add standby logfile group 21 '/u03/oradata/ART/sb_redo11.log' size 100m;
 alter database add standby logfile group 22 '/u04/oradata/ART/sb_redo12.log' size 100m;

standby database 운영

alter database recover managed standby database disconnect;
 

SWITCHOVER

switchover는 기존의 Primary와 Standby가 서로 역할을 바꾸는 것을 말한다.

Pirmary에서 Standby로 역할 변경

1. Primary DB가 switch over가 가능한 지 확인한다.
SQL> select switchover_status from v$database;
 
 SWITCHOVER_STATUS
 --------------------
 SESSIONS ACTIVE
위 결과값은 TO STANBY가 아니면 현재 DB를 사용하는 사람이 있다는 의미이므로 이 상태에서는
SWITCHOVER가 불가능하다. 접속한 session이 없다면 job이 실행 중일 수 있으므로, job queue process를 0으로 주어
JOB이 실행되지 않도록 한다. 또한 10g의 경우처럼 em이 DB에 접속해 있을 경우가 있으므로 이도 종료한다.
SQL> alter system set job_queue_processes=0 scope=memory;
 
 System altered.
 
 $ emctl stop agent
 SQL> select switchover_status from v$database;
 
 SWITCHOVER_STATUS
 --------------------
 TO STANDBY
상태가 TO STANDBY이면 primary db를 standby db로 전환하고 mount 상태로 restart한다.
SQL> alter database commit to switchover to physical standby;
 SQL> alter database commit to switchover to physical standby;
 
 Database altered.
 
 SQL> shutdown immediate;
 ORA-01507: database not mounted
 
 
 ORACLE instance shut down.
 SQL> startup mount;
 ORACLE instance started.
DB의 상태를 확인해 보면 TO PRIMARY로 STANDBY 상태인 것을 확인한다.
SQL> select switchover_status from v$database;
 
 SWITCHOVER_STATUS
 --------------------
 TO PRIMARY

Standby에서 Primary로 역할 변경

1. 기존 Standby db에서 역할 변경이 가능한지 확인한다.
SQL> select switchover_status from v$database;
 
 SWITCHOVER_STATUS
 --------------------
 TO PRIMARY
 
2. primary db로 role를 변경한다.
SQL> alter database commit to switchover to primary;
 
 Database altered.
 
 
3. DB를 RESTART한다.
SQL> shutdown immediate;
 ORA-01109: database not open
 Database dismounted.
 ORACLE instance shut down.
 SQL> startup
 ORACLE instance started.
 
4.새로운 primary db의 automatic archiving을 점검한다.
SQL> alter system archive log current;
 
 System altered.
 
 SQL> select status,error from v$archive_dest where dest_id = 2;
 
 STATUS    ERROR
 --------- -----------------------------------------------------------------
 VALID
 
VALID면 성공적으로 ROLE변경이 되었다고 볼 수 있다.

새로운 STANDBY DB를 STANDBY 기능을 활성화

SQL> alter database recover managed standby database disconnect;
 
 Database altered.
 
 

 protection mode의 변경

상위모드로의 변경(UPGRADE)

1. redo apply방식을 변경한다.
alter system set log_archive_dest_2='service=ART_SB
 OPTIONAL LGWR SYNC AFFIRM
 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
 DB_UNIQUE_NAME=ART_SB'
 
2.mount 상태에서 mode를 변경한다.
SQL> shutdown immediate;
 SQL> startup mount;
 SQL> alter database set standby database to maximize protection;
 Database altered.
 SQL> alter database open;
 
3.db를 restart한다.
4. protection mode의 확인
SQL> select protection_mode,protection_level from v$database;
 
 PROTECTION_MODE      PROTECTION_LEVEL
 -------------------- --------------------
 MAXIMUM PROTECTION   MAXIMUM PROTECTION
 

하위모드로의 변경(DOWNGRADE)

1. Primary DB의 log_archive_dest_state_n을 defer로 변경
ALTER SYSTEM SET log_archive_dest_state_2=defer;
주의 protection mode에서는 아래 에러가 발생한다.
 ORA-02097: parameter cannot be modified because specified value is invalid
 ORA-16072: a minimum of one standby database destination is required
 
 protection mode에서는 shutdown/mount상태에서 변경해야 하남.
 
2. Primary DB의 log_archive_dest_n변경
alter system set log_archive_dest_2='service=ART_SB
 OPTIONAL LGWR ASYNC
 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
 DB_UNIQUE_NAME=ART_SB'
3.mode를 하위 모드로 변경한다.
SQL> alter database set standby database to maximize performance;
 Database altered.
4.Primay DB에서 LOG SWITH발생함
ALTER SYSTEM switch logfile;
 
 

 

반응형

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

Oracle9i Dataguard 구성 방법  (0) 2009.02.23
Posted by [PineTree]
ORACLE/SCRIPT2008. 12. 13. 16:13
반응형

/***********************************************
* 테이블명으로 테이블 인덱스정보조회
***********************************************/
col index_name format a15
col table_name format a15
col column_name format a15
SELECT   ICOL.INDEX_NAME  AS INDEX_NAME
          , ICOL.TABLE_NAME  AS TABLE_NAME
          , ICOL.COLUMN_NAME  AS COLUMN_NAME
FROM     DBA_OBJECTS  OBJE
          , DBA_IND_COLUMNS  ICOL
WHERE    OBJE.OBJECT_TYPE   = 'TABLE'
AND       OBJE.OBJECT_NAME   = '테이블명'
AND        ICOL.TABLE_NAME    = OBJE.OBJECT_NAME
ORDER BY ICOL.INDEX_NAME
             , ICOL.COLUMN_POSITION
반응형

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

오라클 성능고도화원리 스크립트파일  (0) 2009.09.04
인덱스 및 테이블 사이즈 보기  (0) 2009.09.02
oracle script  (0) 2009.08.28
유용한 오라클 스크립트..  (0) 2009.08.28
테이블 스페이스 용량 확인 쿼리  (0) 2009.06.10
Posted by [PineTree]
ORACLE/RAC2008. 12. 12. 21:42
반응형
 
★ Check the Hardware Requirements
 /usr/sbin/dmesg | grep "Physical:"
 /usr/sbin/swapinfo -a
 bdf /tmp   
 bdf
 /bin/getconf KERNEL_BITS
 uname -a

★Async
To verify Async I/O is running, do the following procedure with gpm or glance.
     1. Select the dbwr process from the process menu.
     2. After selecting the process, select the "open files" option
 from the menu.
     3. Look for the /dev/async file.
Glance reports which files a given process opens. When async I/O is used,
it opens /dev/async as a file. Rememeber you also must set the
 disk_async_io = TRUE parameter in init.ora parameter file to use async I/O.
 
★ IP Address Requirements
 -------------------------------------------------------------------
 Host Name               Type       IP Address       Registered In 
 -------------------------------------------------------------------
 rac1.mydomain.com       Public      143.47.43.100    DNS 
 rac1-2.mydomain.com     Public      143.46.51.101    DNS 
 rac1-vip.mydomain.com   Virtual     143.46.43.104    DNS 
 rac1-priv1              Private     10.0.0.1         /etc/hosts 
 rac1-priv2              Private     10.0.0.2         /etc/hosts 

★ Checking the Network Requirements
 /usr/bin/netstat -in
 
★ Check for Required Software
/usr/sbin/swlist -l level | more
  *  -l level         levels of objects to view, one of: "depot",
                      "bundle", "product", "subproduct", "fileset",
                      "file", "root", "shroot", "prroot",
                      "category", "patch", "control_file"
 
★Check for Required Patches
 /usr/sbin/swlist -l bundle | grep GOLD
 /usr/sbin/swlist -l patch | grep PHSS_28880
 /usr/sbin/swlist -l patch | more
 
★ Creating the OSDBA Group
 /usr/sbin/groupadd dba
 
★ Create a New Oracle Software Owner User
 [node1]
   /usr/sbin/useradd -g dba oracle
   passwd oracle
   id oracle
     -> uid=440(oracle) gid=200(dba)
 [node2]
   /usr/sbin/groupadd -g 200 dba
   /usr/sbin/useradd -u 200 -g dba oracle
   passwd oracle

★ Grant Privileges to the OSDBA Group
  /etc/privgroup (<- dba MLOCK RTPRIO RTSCHED 추가)
  /usr/sbin/setprivgrp -f /etc/privgroup (Enter the following command to grant the privileges to the OSDBA group: )
  /usr/sbin/getprivgrp dba
 
★ Configure Kernel Parameters 
  - Bourne, Bash, or Korn shell: 
    $ DISPLAY=local_host:0.0 ; export DISPLAY
  - C shell:
    $ setenv DISPLAY local_host:0.0
   
 /usr/sbin/sam

★ Identifying an Existing Oracle Base Directory
  - Identify an existing Oracle Inventory directory
    more /var/opt/oracle/oraInst.loc
   
  - Identify existing Oracle home directories
     more /etc/oratab
     
    
★ Creating a New Oracle Base Directory    
  mkdir -p /mount_point/app/oracle_sw_owner
  chown -R oracle:oinstall /mount_point/app
  chmod -R 775 /mount_point/app
  
 
★ Create the DBCA Raw Device Mapping File
  find /dev/vg_name -user oracle -name 'r*' -print  dbname_raw.conf
  Edit the dbname_raw.conf file in any text editor to create a file similar to the following:
  - Note:
     The following example shows a sample mapping file for a two-instance RAC cluster. 
 system=/dev/vg_name/rdbname_system_raw_500m
 sysaux=/dev/vg_name/rdbname_sysaux_raw_800m
 example=/dev/vg_name/rdbname_example_raw_160m
 users=/dev/vg_name/rdbname_users_raw_120m
 temp=/dev/vg_name/rdbname_temp_raw_250m
 undotbs1=/dev/vg_name/rdbname_undotbs1_raw_500m
 undotbs2=/dev/vg_name/rdbname_undotbs2_raw_500m
 redo1_1=/dev/vg_name/rdbname_redo1_1_raw_120m
 redo1_2=/dev/vg_name/rdbname_redo1_2_raw_120m
 redo2_1=/dev/vg_name/rdbname_redo2_1_raw_120m
 redo2_2=/dev/vg_name/rdbname_redo2_2_raw_120m
 control1=/dev/vg_name/rdbname_control1_raw_110m
 control2=/dev/vg_name/rdbname_control2_raw_110m
 spfile=/dev/vg_name/rdbname_spfile_raw_5m
 pwdfile=/dev/vg_name/rdbname_pwdfile_raw_5m
 
 
★ Verify the Cluster Software Configuration
 To verify that the HP Serviceguard software is running:
 
 If necessary, configure (or reconfigure) the cluster.
 
 Verify that HP Serviceguard is configured to start automatically at runlevel 3.
 
 To verify that HP Serviceguard is running correctly, enter the following command: 
 
 # /usr/sbin/cmviewcl -v
 
 Verify that the cluster status is up, and that all nodes are up and running.
 
 If the cluster is not running, enter the following command to start it:
 
 # /usr/sbin/cmruncl
 
 If any nodes are not running, enter a command similar to the following to start the cluster daemon on those nodes:
 
 # /usr/sbin/cmrunnode nodename1 nodename2...
 
 If you intend to use Hyper Messaging protocol as the cluster interconnect,
 enter the following command to verify that the HyperFabric software is configured properly:
 
 # /opt/clic/bin/clic_stat -d NET
 

★ Configure the oracle User's Environment
 $ xhost +  
 $ su - oracle  
 $ echo $SHELL 
   - Bourne shell (sh), Bash shell (bash), or Korn shell (ksh):  
     $ vi .profile 
     $ DISPLAY=local_host:0.0 ; export DISPLAY
    
   - C shell (csh or tcsh):  
     % vi .login
        $ setenv DISPLAY local_host:0.0

 su - root
 # mkdir /mount_point/tmp
 # chmod a+wr /mount_point/tmp
 # exit 
 Enter commands similar to the following to set the TEMP and TMPDIR environment variables:  
 -Bourne, Bash, or Korn shell:  
   $ TEMP=/mount_point/tmp
   $ TMPDIR=/mount_point/tmp
   $ export TEMP TMPDIR 
 - C shell:  
   $ setenv TEMP /mount_point/tmp
   $ setenv TMPDIR /mount_point/tmp
  
    $ unset ORACLE_HOME
    $ unset TNS_ADMIN
    $ umask
    $ env | more

반응형
Posted by [PineTree]
ORACLE/INSTALL2008. 12. 11. 17:20
반응형
Linux에서 Pro C 설치

Pro*C Precompiler 설치
?Oracle Database Install 시
-Database Install 후 Oracle Client Category에서 Precompiler를 다시 Install 해야 한다.
-Oracle v9.2.x 인 경우
-Oracle 9i Database -> Enterprise Edition 설치 후, 다시 Installer 를 실행하여 Oracle 9i Client -> Administrator Edition 설치.
-Oracle 9i Client 의 Net Services 와 Pro*C 가 필요하기 때문.
-Oracle v10.1.x인 경우
-Oracle 10g Database -> Enterprise Edition 설치 후, 다시 Installer 를 실행하여 Oracle 10g Client -> Administrator Edition 설치.
-Oracle 10g 에서는 Sample Code 가 설치 되지 않으므로, 다시 Installer 를 실행하여 Companion CD 를 설치.
-Sample Code 의 위치 : $ORACLE_HOME/precomp/demo


Pro*C Precompiler 옵션


?Precompiler optiion 확인
-option 의 종류와 current value 등을 확인할 수 있다.
?Precompiler option 설정 방법
1.System configuration file 에 설정
$ORACLE_HOME/precomp/admin/pcscfg.cfg
2.User configuration file 에 설정
Precompiler option의 “CONFIG” option으로 user configuration file을 지정할 수 있다.
3.Command line 에 설정
$ proc iname=[program명] userid=scott/tiger ...
4.Pro*C 소스 내에 설정
EXEC ORACLE OPTION(HOLD_CURSORS=NO);


 
Pro*C Precompiler 환경 변수(Unix, Linux)


?Compile 시 필요한 환경변수
-ORACLE_HOME
-PATH
-$ORACLE_HOME/bin과 정확한 C compiler가 있는 directory 설정.
-LD_LIBRARY_PATH
-libclntsh shared library를 찾기 위해 $ORACLE_HOME/lib ( 또는 $ORACLE_HOME/lib32 ) 설정.
** SUN : LD_LIBRARY_PATH
** HP : LD_LIBRARY_PATH, SHLIB_PATH
** AIX : LD_LIBRARY_PATH, LIBPATH
** LINUX : LD_LIBRARY_PATH
-LINUX 에서 stddef.h, stddef.h 등 default library directory 에 없는 파일은 찾아서 symbolic link를 생성해 줘야 하는 경우도 있다.

Pro*c sample program
 
$ cd $ORACLE_HOME/precomp/demo/proc
$ make ?f demo_proc.mk smaple1

user program


 
$ cd [user program이 있는 위치]
$ cd $ORACLE_HOME/precomp/demo/proc .
$ make ?f demo_proc.mk EXE=[prog] OBJS=[prog].o build
$ make ?f demo_proc.mk EXE=[prog]
                          OBJS=“prog1.o prog2.o”build


###################################

프리컴파일, 즉 잘 변형이 안되는 고정적인 헤더 파일들(ex : Windows.h등)을 미리
컴파일해서 정보를 가지고 있게 하는 기능을 가지고 있다.
위의 헤더 파일안에 변형이 잘 안되는 헤더 파일들을 넣고 첨에 컴파일 할땐 느리지만...
두 번째 부턴 미리 컴파일된 정보를 가지고 있어서 stdafx.h 안에 속한 헤더 파일들은 다시 컴파일 안하므로
컴파일 속도가 높아진다.
#####################################
Pro*C란?
"Oracle RDBMS에 준비된 Pro*C들은 SQL문을 써넣은 C프로그램을 Oracle 데이타베이스
에 있는 데이터의 액세스와 조작을 할 수 있는 C 프로그램으로 변환하기 위한 것이다.
Pro*C는 프리컴파일러이기 때문에, 입력 파일내에 있는 EXEC SQL문을 적당한 Oracle
Call로 변환해서 출력 파일을 작성한다. 그 다음, 이 출력 파일을 C 프로그램에 대한
통상의 방법으로 컴파일하고 링크해서 실행할 수 있다.
Pro*C(또는 Pro*Fortran이나 Pro*PL/I 등과 같은 제품)를 Oracle Call 인터페이스와
비교해 보자. Oracle Call 인터페이스(OCI)는 Oracle 데이터베이스의 Call 인터페이스
이므로 유저는 C, Fortran, Cobol 등의 고급언어 내에 직접 Oracle Call을 짜넣는다.
각각의 트랜잭션은 복수개의 Call과 Cursor(커서:이해할려나?)를 사용함으로써 수행된
다."
<<<<< 장점 및 이점 >>>>>
-. 1개의 Pro*C Call은 자동적으로 복수의 실행시 라이브러리 콜로 변환되기 때문에
프로그램 작성에 필요한 시간을 단축할 수 있다.
-. 1개의 프로그램을 다른 데이터베이스내의 데이터에 대해서 사용할 수 있다.
-. 복수의 프로그램을 각각 프리컴파일해서 함께 실행할 수 있다.
이상이 한글판 메뉴얼에 나와 있는 Pro*C에 대한 개략적인 정의입니다.
일반 C언어에 SQL query 문장을 넣어 파일로 저장한 다음 Pro*C로 컴파일(프리컴파일:
전처리 컴파일)하면 pc(맞나?)라는 확장자가 나오는데, 이것을 C 컴파일러로 컴파일하
면 일반 C 프로그램과 마찬가지로 실행파일이 생긴다. 이러한 실행파일은 일반적인
CGI 스크립트(이것도 이해할려나?)와 같이 작동해서 DB내에 있는 데이타를 query 해
온다.

[출처] http://tong.nate.com/odusan/21789892
반응형
Posted by [PineTree]
ORACLE/ADMIN2008. 12. 3. 15:13
반응형

DICTIONARY(DICT) 뷰

 - 데이터 사전 및 동적 성능 뷰에 대한 정보를 알고 싶으면 DICTIONARY 뷰나
    DICT_COLUMNS 뷰를 조회하면 됩니다.

 - 조회 할 수 있는 모든 데이터사전의 테이블이름과 설명을 조회 할 수 있습니다.
   물론 설명은 영문으로 되어 있습니다.

 - 동의어인 DICT를 이용해서도 똑같은 정보를 조회 할 수 있습니다.

SQL> SELECT * FROM DICTIONARY WHERE table_name LIKE ’%INDEX%’;

SQL> SELECT * FROM DICT WHERE table_name LIKE ’%INDEX%’;


DICT_COLUMNS 뷰

 - 뷰를 질의하면 해당 데이터사전의 컬럼에대한 정보를 조회 할 수 있습니다.

SQL> SELECT * FROM DICT_COLUMNS WHERE TABLE_NAME LIKE ’%INDEX%’;


데이터사전 조회 예제 1)

SQL>SELECT * FROM dict
        WHERE table_name LIKE UPPER(’%&데이타사전%’);


데이터사전 조회 예제 2)

SET LINESIZE 160
SET PAGESIZE 100
COLUMN TABLE_NAME FORMAT A25
COLUMN COLUMN_NAME FORMAT A30
COLUMN COMMENTS FORMAT A80 word_wrapped
 
SELECT *
FROM dict_columns
WHERE table_name LIKE UPPER(’%&데이터사전%’);

 

◈ 아래 데이터사전 정보는 인터넷 정보를 참고했습니다.

* 오브젝트: USER_OBJECTS(OBJ)
   모든 오브젝트에 대한 정보를 지원
   오즈젝트 유형, 작성시간, 오브젝트에 사용된 최종 DDL 명령, alter, grant 및 revoke 등


* 테이블 : USER_TABLES (TABS)   테이블에 대한 정보


* 열 : USER_TAB_COLUMNS (COLS)   컬럼에 대한 정보


* 뷰 : USER_VIEWS   뷰에 대한 정보


* 동의어 : USER_SYNONYMS (SYN)


* 시퀀스 : USER_SEQUENCES (SEQ)


* 제약조건 : USER_CONSTARINTS


* 제약조건열 :  USER_CONS_COLUMNS ( 제약 조건을 가진 열에 대한 정보)


* 제약조건의 예외사항 : EXCEPTIONS  제약조건을 활성화시 에러사항에 대한 정보


* 테이블 주석 : USER_TAB_COMMENTS  테이블/뷰에 대한 주석


* 열 주석 : USER_COL_COMMENTS ( 열에 대한 주석)


* 인덱스 : USER_INDEXES (IND) ( 인덱스에 관한 정보)


* 인덱스 열 : USER_IND_COLUMNS  인덱스열에 대한 정보


* 클러스터 : USER_CLUSTERS (CLU)  클러스터와 관련된 정보


* 데이터베이스 링크 : USER_DB_LINKS  링크에 관련된 정보


* 스냅샷 : USER_SNAPSHOTS


* 스냅샷 로그 : USER_SNAPSHOT_LOGS


* 트리거 : USER_TRIGGERS


* 프로시저, 함수 및 패키지 : USER_SOURCE


* 코드 오류 : USER_ERRORS


* 테이블스페이스 : USER_TABLESPACES


* 영역 할당량 : USER_TS_QUOTAS
   테이블스레이스 단위로 사용자가 이용할 수 있는 영역의 최대크기와
   할당된 영역의 크기 파악에 대한 정보


* 세그먼트와 익스텐트 : USER_SEGMENTS 와 USER_EXTENTS


* 여유 영역 : USER_FREE_SPACE   현재 여유로 표시된 영역이 얼마인지에 대한 정보


* 사용자 : USER_USERS


* 자원 제한량 : USER_RESOURCE_LIMITS


* 테이블 권한 : USER_TAB_PRIVS


* 열 권한 : USER_COL_PRIVS


* 시스템 권한 : USER_SYS_PRIVS


  ================================================
    * 오라클 정보공유 커뮤니티 oracleclub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 강좌 작성자 : 김정식 (oramaster _at_ naver.com)
  ================================================
반응형
Posted by [PineTree]
ORACLE/Backup & Recovery2008. 11. 28. 16:18
반응형
 Partition table 복원 작업내용 (동일 장비에서 다른 SID로 복원하기)
 
1)      Recovery에 필요한 파일 Copy
 이전의 백업 데이터파일 중 SYSTEM, UNDO, TS_PT_30(해당 테이블이 포함된 테이블
        스페이스)  Datafile, 오라클 환경 설정 파일만 임시 디렉토리로 복원한다
 
l       Recovery에 필요한 Tablespace
 
           TS_PT_30
SYSTEM
             UNDOTBS1
 
l       필요한 Oracle 파일
 
initRECOVER.ora  (initTEST.ora 복사)
orapwRECOVER   (orapwTEST password file 복사)
 
2)      환경에 맞게 initSID.ora 파일 수정
 
l       Archive를 적용하지 않기 때문에 Archive 관련 파라미터는 주석처리 한다.
-         LOG_ARCHIVE_DEST, LOG_ARCHIVE_START 주석 처리
 
l       Cold Backup 본이 아닌 Hot Backup 본으로 비정상적인 Open 이므로
    _OFFLINE_ROLLBACK_SEGMENTS, _CORRUPTED_ROLLBACK_SEGMENTS
    _ALLOW_RESETLOGS_CORRUPTION를 세팅한다.
 
l       _OFFLINE_ROLLBACK_SEGMENTS, _CORRUPTED_ROLLBACK_SEGMENTS 관련
Parameter를 세팅 하므로 Undo Tablespace 관련 Parameter를 주석처리 한다.
    - undo_management='MANUAL'로 세팅한다.
   
initRECOVER.ora  (기존 initTEST.ora 수정)
============================================================
 
background_dump_dest='/oracle9/app/oracle/admin/RECOVER/bdump'
*.compatible='9.2.0'
control_files='/home/oracle/control01.ctl'
core_dump_dest='/oracle9/app/oracle/admin/RECOVER/cdump'
*.db_block_size=8192
*.db_cache_size=1073741824
*.db_name='RECOVER'
*.java_pool_size=0
*.job_queue_processes=2
*.large_pool_size=41943040
# LOG_ARCHIVE_DEST='/arch'
# LOG_ARCHIVE_FORMAT='arcTEST_%s.arc'
# LOG_ARCHIVE_START=TRUE
*.open_cursors=500
*.pga_aggregate_target=1073741824
*.processes=500
*.query_rewrite_enabled='true'
*.service_names='RECOVER'
*.shared_pool_size=629145600
*.star_transformation_enabled='FALSE'
undo_management='MANUAL'
user_dump_dest='/oracle9/app/oracle/admin/RECOVER/udump'
 
*._OFFLINE_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$,_SYSSMU11$,_SYSSMU1
2$,_SYSSMU13$,_SYSSMU14$,_SYSSMU15$,_SYSSMU16$,_SYSSMU17$,_SYSSMU18$,_SYSSMU19$,_SYSSMU20$,_SYSSMU21$,_SYSSMU22$,_SYSSMU23$,_SYSSMU24$,_SYSSMU25$,_SYS
SMU26$,_SYSSMU27$,_SYSSMU28$,_SYSSMU29$,_SYSSMU30$,_SYSSMU31$,_SYSSMU32$,_SYSSMU33$,_SYSSMU34$,_SYSSMU35$,_SYSSMU36$,_SYSSMU37$,_SYSSMU38$,_SYSSMU39$,
_SYSSMU40$,_SYSSMU41$,_SYSSMU42$,_SYSSMU43$,_SYSSMU44$,_SYSSMU45$,_SYSSMU46$,_SYSSMU47$,_SYSSMU48$,_SYSSMU49$,_SYSSMU50$,_SYSSMU51$,_SYSSMU52$,_SYSSMU
53$,_SYSSMU54$,_SYSSMU55$,_SYSSMU56$,_SYSSMU57$,_SYSSMU58$,_SYSSMU59$)
 
*._CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$,_SYSSMU11$,_SYSSM
U12$,_SYSSMU13$,_SYSSMU14$,_SYSSMU15$,_SYSSMU16$,_SYSSMU17$,_SYSSMU18$,_SYSSMU19$,_SYSSMU20$,_SYSSMU21$,_SYSSMU22$,_SYSSMU23$,_SYSSMU24$,_SYSSMU25$,_S
YSSMU26$,_SYSSMU27$,_SYSSMU28$,_SYSSMU29$,_SYSSMU30$,_SYSSMU31$,_SYSSMU32$,_SYSSMU33$,_SYSSMU34$,_SYSSMU35$,_SYSSMU36$,_SYSSMU37$,_SYSSMU38$,_SYSSMU39
$,_SYSSMU40$,_SYSSMU41$,_SYSSMU42$,_SYSSMU43$,_SYSSMU44$,_SYSSMU45$,_SYSSMU46$,_SYSSMU47$,_SYSSMU48$,_SYSSMU49$,_SYSSMU50$,_SYSSMU51$,_SYSSMU52$,_SYSS
MU53$,_SYSSMU54$,_SYSSMU55$,_SYSSMU56$,_SYSSMU57$,_SYSSMU58$,_SYSSMU59$)
 
*._ALLOW_RESETLOGS_CORRUPTION=TRUE
 
3)      강제로 DB OPEN
 
[oracle:/oracle9/app/oracle/product/9.2.0/dbs]echo $ORACLE_SID
TEST
[oracle:/oracle9/app/oracle/product/9.2.0/dbs]export ORACLE_SID=RECOVER
 
[oracle:/oracle9/app/oracle/product/9.2.0/dbs]echo $ORACLE_SID
RECOVER
 
[oracle:/oracle9/app/oracle/product/9.2.0/dbs]sqlplus "/as sysdba"
 
SQL*Plus: Release 9.2.0.8.0 - Production on Wed Oct 1 15:21:44 2008
 
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
 
Connected to an idle instance.
 
SQL> startup nomount
ORACLE instance started.
 
Total System Global Area 1985971832 bytes
Fixed Size                   743032 bytes
Variable Size             754974720 bytes
Database Buffers         1224736768 bytes
Redo Buffers                5517312 bytes
Database mounted.
 
SQL> CREATE CONTROLFILE SET DATABASE "RECOVER" RESETLOGS NOARCHIVELOG
    MAXLOGFILES 64
    MAXLOGMEMBERS 3
    MAXDATAFILES 2000
    MAXINSTANCES 1
    MAXLOGHISTORY 17697
LOGFILE
  GROUP 1 ('/imsi/Oracle/redo01.log') SIZE 30M,
  GROUP 2 ('/imsi/Oracle/redo02.log') SIZE 30M,
  GROUP 3 ('/imsi/Oracle/redo03.log') SIZE 30M,
  GROUP 4 ('/imsi/Oracle/redo04.log') SIZE 30M
-- STANDBY LOGFILE
DATAFILE
  '/dev/rsystem',
  '/dev/rundo_01',
  '/dev/rundo_02',
   '/dev/rrec_01',
  '/dev/rrec_02',
  '/dev/rrec_03'
 CHARACTER SET KO16KSC5601
;
 
<=  SID를 Recover라고 변경해서 Open한다.
 
 
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
 
    ß 비정상 적인 불완전 복원 이기 때문에 Resetlogs Open해야 한다.
 
SQL> alter database open resetlogs;
Database altered.
 
4)      복원된 table Export & Import 수행을 한다.
 
[oracle:/temp]exp scott/oracle  file=exp1001.dmp tables=TBPT:PT_200910 log=exp1001.log


 






반응형
Posted by [PineTree]
ORACLE/ADMIN2008. 11. 27. 17:37
반응형
OS유저중 oracle유저 이외의 유저가 sqlplus등을 사용하기 위해
퍼미션을 할당하는 수순입니다.
 
> oracle유져로 실행함
 
1. 우선은 확인
  ls -al $ORACLE_HOME/bin/sqlplus
  -rwxr-x--x   1 oracle     oinstall     72080  9月  5日  15:15 sqlplus
 
2. 스크립트 실행
  $ORACLE_HOME/install/changePerm.sh
→ Do you wish to continue (y/n) [n]: 에서  y 를 입력
   시간이 조금 걸립니다.
 
3. 결과 확인
  ls -al $ORACLE_HOME/bin/sqlplus
-rwxr-xr-x   1 oracle     oinstall     72080  9月  5日  15:15 sqlplus
이것으로 다른 유저도 sqlplus를 사용할수 있게 되었네요..
 

Applies to:

Oracle Server - Enterprise Edition - Version: 9.2.0.8 to 10.2.0.3
Information in this document applies to any platform.

Goal

Where is the script changePerm.sh?

Solution


During patch set installation, all new files and directories are created with restricted access, by default. Users or third party applications with a different group identifier from that of the database, which try to access client-side utilities or libraries in the database home, will see permission errors when trying to access these files or directories.

changePerm.sh is a script that allows users that do not belong to the database group to access and execute files in the ORACLE_HOME directory. Only run this script when absolutely required as it will reduce security. The script (borne shell) loops through a hard-coded set of files and directories, extracts the "group" permissions, and set the "other" permissions the same as the group's permissions. By doing so, "other" users are able to execute these files and change to these directories

The script is located in the ORACLE_HOME/install directory on Unix and Linux systems (there is no equivalent for Windows). This script ships with Oracle Database versions 9.2.0.8 and Oracle 10g releases.
Output when the changePerm.sh script is executed:

$ cd $ORACLE_HOME/install
$ ./changePerm.sh
-------------------------------------------------------------------------------
Disclaimer: The purpose of this script is to relax permissions on some of the
files in the database Oracle Home so that all clients can access them.
Please note that Oracle Corporation recommends using the most restrictive file
permissions as possible for your given implementation. Running this script
should be done only after considering all security ramifications.
-------------------------------------------------------------------------------

Do you wish to continue (y/n) : y
Finished running the script successfully

Please see /tmp/changePerm_err.log for errors and /tmp/changePerm.log for the log of events
This script should be run by Oracle Software owner to relax the permission and can be run while database processes are active.

Note :
1. If you are patching Oracle RAC home, then you will need to run this script on all the nodes
2. Oracle recommends using the most restrictive file permissions possible for your given implementation. Run this script only after considering all security ramifications and only if you need to share this installation
반응형

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

Oracle Flashback  (0) 2008.12.18
DICTIONARY(DICT) 뷰  (0) 2008.12.03
DBNAME, SID 변경하기.  (0) 2008.11.26
Oracle 10.2.0.1에서 10.2.0.3으로 rman백업을 이용한 업그레이드 메모  (0) 2008.11.21
[Oracle] Datafile Size 변경하기  (0) 2008.11.19
Posted by [PineTree]