RHEL5 or OEL - 11g - ASM 설치 후 재부팅하면 오라클 디스크가 조회가 되지 않고, 시작도 안될 때

SQL> select status from v$instance;
select status from v$instance
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0


SQL> startup
ORA-00099: warning: no parameter file specified for ASM instance
ASM instance started

Total System Global Area  284565504 bytes
Fixed Size                  1336036 bytes
Variable Size             258063644 bytes
ASM Cache                  25165824 bytes
ORA-15110: no diskgroups mounted

 

[root@server122 ~]# oracleasm disks

(아무것도 안나옴)

 

▲ RHEL5, OEL에서는 dm-xxxxx 라는 파일에서 디스크를 찾게끔 만들어져 있다.
1.그 파일을 찾아서 주석처리를 해 주면 된다.
2.dm 부분을 ""이렇게 공백처리 해 주면 되나? (이건 해보진 않았다, 가설만 세움)

 

요약

11g asm 설치 후 oracleasm listdisks 했는데 디스크 목록이 안보일 경우 조치하기
해결책 : /etc/udev/rules.d/90-dm.rules 파일을 열어서 첫 번째 줄을 주석 처리할 것.

이 작업을 한 후 asm 은 정상 오픈 되었다.

이 아래는 해보진 않았지만 참고


 

 

** 위 작업 설명
We already had the same symptom of ORA-15032 & ORA-15063 mentioned in my last post. Trying to follow these instructions didn't help this time.

 

ls -l /dev/oracleasm/disks/*
rpm -qa | grep oracleasm ->
kfod asm_diskstring='ORCL:*' disks=all
(/etc/init.d/oracleasm) /etc/sysconfig/oracleasm conatin ORACLEASM_SCANORDER=dm
spfile has: asm_diskstring = /dev/dm*

 

All of these command worked fine. Beacause of the dm* parameter I checked the filesystem:

 

$ ls -l /dev/dm-*
/bin/ls: /dev/dm-*: No such file or directory

 

It seems that the dm* devices are missing and must be there for ASM by Note 602952.1 :

 

NOTE: When scanning, only the device names known by the kernel are scanned. With device-mapper, the kernel sees the devices as /dev/dm-XX. The /dev/mapper/XXX names are created by udev for human readability. Any configuration of ORACLEASM_SCANORDER or ORACLEASM_SCANEXCLUDE must use the dm prefix.

 

Since this Host is RedHat 5, we found the source of the problem by Note 558596.1:

 

Cause: The oracleasm scans /proc/partitions and expects devices to be available in /dev. If the device doesn't exist in /dev it will fail to open the device. RHEL/OEL5 does not create dm-xx devices in /dev by default.

Solution: Please comment out the following line in file /etc/udev/rules.d/50-udev.rules
#KERNEL=="dm-[0-9]*", ACTION=="add", OPTIONS+="ignore_device"
reboot and the problem should be gone.
Note: Newer versions of EL/RH 5 the udev rule has been moved to "/etc/udev/rules.d/90-dm.rules".

 


11g asm 설치 후 재부팅하면 DB 시작이 안되는 경우 조치방법
-> root 계정으로 $ASM_HOME/bin 아래에서
   ./crsctl start resource ora.cssd  실행

by 짱구를꼭말려 2013. 8. 13. 10:57

1. $ORACLE_HOME 하위 파일 삭제

 

2. /etc 에 oraInst.loc , oratab 삭제

 

3. /usr/local/bin/oraenv 삭제

 

4. /tmp 에 관련 파일 삭제

 

5. oracle 관련 계정 삭제

 

6. oracle 관리 계정 홈디렉토리 삭제

'Oracle > TIP' 카테고리의 다른 글

Putty에서 한글 입력시 깨짐 현상 해결(in linux)  (0) 2013.08.07
Redo Log File, Data File 조회 SQL  (0) 2013.07.18
Alert Log 보며 작업하기  (0) 2013.07.16
by 짱구를꼭말려 2013. 8. 12. 23:38

 

 

Swap Size 해결하는 방법

 

이미 운영 중인 시스템에서 사용하고 있는 스왑공간이 부족(그럴 이유는 없겠지만, 거의...그러나간혹 오라클설치하려니 스왑 공간이 부족하다. 괜히 늘려주고 싶다.)하여 스왑영역을 확보하기 위해서는, 파티션을 재구성하여 스왑파티션을 설정하거나 스왑파일을만드는 방법이 있습니다. 그러나, 파티션을 다시 구성하기 위해서는 여유있는파티션이 있어야 하며, 번거롭고, 많은 작업이 필요하므로, 스왑파일을 만들어서 스왑영역을 확보하는 방법에 대해 찾다가 알게 되었습니다.

256MB의 스왑파일을 만들어 보겠습니다. 먼저 스왑파일을 만들 공간을 설 정합니다.

다음과 같은 명령을 내리면 /boot 디렉토리 밑에 256MB짜리 NULL 파일이 만들어 집니다.

/dev/zero는 Null byte의 source를 뜻하며 생성하고자 하는 swap파일의 명칭은 편의상 swapfile로 하였습니다.

#dd if=/dev/zero of=/boot/swapfile bs=1024 count=262144 (256MB)

#mkswap -c -v1 /boot/swapfile  -c옵션은 스왑메모리로 생성하는 도중 배드블록을 점검하도록 하는 옵션이며,

-v1옵션은 업데이트된 버전의 스왑파일시스템을 이용한다는 것을 설정하는 옵션이다

만든 파일이 스왑파일로 작동할 수 있도록 설정을 합니다. v0 옵션은 old 스 타일이고, v1은 new 스타일입니다.

#swapon /boot/swapfile 활성화를 시킵니다.

#free명령으로 스왑영역이 늘어난 것을 확인할 수 있습니다.

부팅 시 스왑공간이 활성화되게 하려면 /etc/fstab 파일에 아래 한 줄을 추가 합니다.

/boot/swapfile swap swap defaults 1 1

 

[root@server122 /]# more /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/sda5                               partition       2048248 80      -4
/home/swapfile                          file            2621432 0       -6

▲ SWAP 보기 (/home/swapfile 로 만들었다)

 

 

by 짱구를꼭말려 2013. 8. 12. 11:13

백업 복구2 - p68

Flashback Query의 3가지 분류

1. Row level Flashback

2. Table Level Flashback

3. Database Level Flashback

 

 1. Row Level Flashback (기본값 : 사용함)

※ Table의 특정 부분만 찾아서 변경하는 방법

※ 이 기능은 Undo Data의 정보를 이용한다. 만약 Undo Segment를 다른 Transaction에서 재사용하면 이 기능으로 Flashback 할 수 없다.

※ table의 구조가 변경되어도 Flashback 할 수 없다.

 

Flashback Version Query (해당 데이터의 과거 변경 이력을 전부 찾아주는 쿼리)

SQL> select versions_startscn st_scn, versions_endscn endscn,
  2  versions_xid txid, versions_operation opt, 이름
  3  from 회원 versions between scn minvalue and maxvalue
  4  where tel=111;

 

   ST_SCN  ENDSCN         TXID             O 이름
---------- ---------- ---------------- - ----------
   1654659                   06001500F9030000 U 홍길동
   1654625    1654659     09001D0005040000 I 김유신

 

SCN을 시간으로 (Version Query를 시간으로 변경하여 보여주는 기능)

SCOTT> select scn_to_timestamp(1654625) from dual;

 

SCN_TO_TIMESTAMP(1654625)
--------------------------------
06-JUL-13 03.28.07.000000000 PM

 

Flashback Transaction Query (원래 데이터로 돌려주게 하는 기능, 업데이트 쿼리를 가르쳐 주는 기능)

이 기능은 본인이 UPDATE로 원래 데이터로 돌릴 수 있다면 필요성이 낮은 기능

  1  select undo_sql from flashback_transaction_query
  2  where table_name='회원'
  3  and commit_scn between 611043 and 611071
  4  order by start_timestamp desc

select undo_sql from flashback_transaction_query
                              *
ERROR at line 1:
ORA-01031: insufficient privileges     --------------------      권한 에러가 발생한다

 

SCOTT> conn / as sysdba
Connected.
SYS> grant select any transaction to scott;

Grant succeeded.

SYS> conn scott/tiger
Connected.                                                                        권한을 부여한다

 

  1  select undo_sql from flashback_transaction_query
  2  where table_name='회원'
  3  and commit_scn between 1654625 and 1654659                 -> 위에서 조회한 SCN 번호
  4  order by start_timestamp desc

이렇게 치면 업데이트를 시키게 해 주는 쿼리가 나오는데 복사해서 실행하면 된다.

나는 왜 안나오지... 안나와서 그냥 넘어간다.

 

 2. Table Level Flashback 백업과 복구2 p82 (기본값 : 사용함)

DML 에러가 발생했을 때 특정 테이블 전체를 되돌리는 Flashback 방법

※ Supplimental log 기능이 enable 되어 있어야 사용하능하다

※ 이 기능은 Undo Data의 정보를 이용한다. 만약 Undo Segment를 다른 Transaction에서 재사용하면 이 기능으로 Flashback 할 수 없다.

※ table의 구조가 변경되어도 Flashback 할 수 없다.

※ 테이블 전체의 내용이 변경 된다.

① 특정 테이블에 DML 에러가 발생했을 때 사용하는 방법 - Undo data 사용

② 특정 테이블이 drop table 되었을 때 사용하는 방법 - Recyclebin 사용

 

① 특정 테이블에 DML 에러가 발생했을 때 사용하는 방법

▼ 복구시점의 SCN을 알고 있을 경우 복구 방법

SCOTT> select * from ibgo;

    I_CODE I_NAME            QTY
---------- ---------- ----------
       100 새우              100
       101 문어               50
       102 오징어             20
       105 쭈꾸미             50

 

SCOTT> conn / as sysdba                            scott이 SCN을 확인하기 위해 권한을 부여함
Connected.

SYS> grant dba to scott;

Grant succeeded.

 

SCOTT> select current_scn from v$database;                                현재 SCN 조회하기

CURRENT_SCN
-----------
    1674124

 

SCOTT> update ibgo set i_name='왕새우' where i_name='새우';

1 row updated.

 

SCOTT> commit;

Commit complete.

 

SCOTT> select * from ibgo;

    I_CODE I_NAME            QTY
---------- ---------- ----------
       100 왕새우            100
       101 문어               50
       102 오징어             20
       105 쭈꾸미             50

SCOTT> select current_scn from v$database;

CURRENT_SCN
-----------
    1674255                                                새우를 왕새우로 변경한 후 SCN

 

SCOTT> update ibgo set i_name='대왕문어' where i_name='문어';

1 row updated.

 

SCOTT> commit;

Commit complete.

 

SCOTT> select current_scn from v$database;

CURRENT_SCN
-----------
    1674279                                                문어를 대왕문어로 변경한 후 SCN

 

SCOTT> delete from ibgo;

4 rows deleted.

 

SCOTT> commit;

Commit complete.

 

SCOTT> select current_scn from v$database;

CURRENT_SCN
-----------
    1674306                                                모든 데이터를 삭제한 후 SCN

 

SCOTT> flashback table ibgo to scn '1674124';                     새우가 있던 table로 flashback
flashback table ibgo to scn '1674124'
                      *
ERROR at line 1:
ORA-08189: cannot flashback the table because row movement is not enabled

(이 기능을 사용하려면 테이블에 row movement라는 속성이 enable 되어 있어야 한다)

 

SCOTT> alter table ibgo enable row movement;

Table altered.

 

SCOTT> flashback table ibgo to scn '1674124';

Flashback complete.

 

SCOTT> select * from ibgo;

    I_CODE I_NAME            QTY
---------- ---------- ----------
       100 새우              100
       101 문어               50
       102 오징어             20
       105 쭈꾸미             50

복구시점의 SCN만 알면 쉽게 복구가 가능하지만, SCN을 알고 있는 경우가 많이 없기 때문에 별로 쓰이지는 않는 내용이었습니다.


row movement

어떤 테이블에서 row movement를 enable 하면 그 테이블과 연관된 View 기능을 사용할 수 없게 되는 경우가 발생한다

Flashback table을 사용하기 위해 row movement를 enable로 변경하였다면 반드시 해당 테이블과 연관된 view를 확인해야 한다 (10g 까지만, 11g는 예외)

명령어 : alter table ibgo enable row movement

 

SCOTT> set line 200;
SCOTT> col object_name for a10
SCOTT> col object_type for a10
SCOTT> col status for a8
SCOTT> select object_name,object_type,status from dba_objects where owner='SCOTT' and object_name like 'IBGO%';

OBJECT_NAM OBJECT_TYP STATUS
---------- ---------- --------
IBGO       TABLE      VALID                                        현재 상태조회

 

SCOTT> create index ibgo_iname_idx on ibgo (i_name);

Index created.

SCOTT> create view ibgo_v as select i_name,qty from ibgo;

View created.

(ibgo table에 index와 view생성)

 

SCOTT> col object_name for a15
SCOTT> select object_name,object_type,status from dba_objects where owner='SCOTT' and object_name like 'IBGO%';

OBJECT_NAME     OBJECT_TYP STATUS
--------------- ---------- --------
IBGO            TABLE      VALID
IBGO_INAME_IDX  INDEX      VALID
IBGO_V          VIEW       VALID                            현재 상태 조회

 

SCOTT> alter table ibgo disable row movement;

Table altered.

SCOTT> select object_name,object_type,status from dba_objects where owner='SCOTT' and object_name like 'IBGO%';

OBJECT_NAME     OBJECT_TYP STATUS
--------------- ---------- --------
IBGO            TABLE      VALID
IBGO_INAME_IDX  INDEX      VALID
IBGO_V          VIEW       INVALID

 

(10g 까지만 이렇게 되니 11g는 걱정않고 사용해도 됩니다)

 

 

 

▼ SCN은 모르지만 시간을 알고 있을 때 복구하는 방법 (백업과 복구2 p.88)

장애가 난 시간을 추측하여 Flashback 하는 방법

Flashback Version Query를 사용하여 변경사항을 조회해서 찾을 수 있기도 하지만

시간으로 간단히 해결해보자

 

SCOTT> flashback table ibgo to timestamp(systimestamp - interval '5' minute);

Flashback complete.

(지금으로부터 5분전으로 되돌리기)

 

SCOTT> flashback table ibgo to timestamp(systimestamp - interval '30' second);

Flashback complete.

(지금으로부터 30초전으로 되돌리기)

 

원하는 데이터를 찾을 때까지 반복할 수 있으나 이 방법도 Undo data를 이용하기 때문에 오래 전 데이터는 Flashback 할 수 없을 가능성도 많다

 

② 특정 테이블이 drop table 되었을 때 사용하는 방법 - 휴지통(Recyclebin) 사용

10g 부터 휴지통 기능이 생겼다

※ 테이블이 삭제되어 휴지통으로 옮겨지게되면 해당 테이블스페이스에 그대로 용량을 차지하고 남아있게 되지만, 해당 테이블스페이스의 용량이 꽉 차고 다른 데이터가 insert 되면 휴지통에 해당하는 부분에 덮어 쓰게 되어 그 이후로 사라지게 된다. 이 점은 Autoextend 기능이 on 으로 되어 있어도 같다.

※ sys사용자의 table은 삭제해도 휴지통으로 들어가지 않고 purge 된다. But sys사용자가 다른 사용자의 테이블을 삭제하면 해당 사용자의 user_recyclebin에 지워진 테이블이 저장된다.

 

▼ drop table 복구하기

SCOTT> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
ASSM                           TABLE
BIN$4MyQZhMJCajgQAB/AQAnRA==$0 TABLE
BONUS                          TABLE
CLOBTEST                       TABLE
DEPT                           TABLE
DEPT2                          TABLE
DEPT20                         TABLE
EMP                            TABLE
GOGAK                          TABLE
IBGO                           TABLE
IBGO_V                         VIEW

JOB_TEST01                     TABLE
RTEST01                        TABLE
RTEST02                        TABLE
RTEST2                         TABLE
SALGRADE                       TABLE
SYS_TEMP_FBT                   TABLE
T1                             TABLE
TEST02                         TABLE
TEST3                          TABLE
TEST4                          TABLE
TT100                          TABLE

UTEST01                        TABLE
회원                           TABLE

24 rows selected.                                현재 사용자의 테이블 상황 확인

 

SCOTT> drop table ibgo;

Table dropped.

 

SCOTT> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
ASSM                           TABLE
BIN$4MyQZhMJCajgQAB/AQAnRA==$0 TABLE
BIN$4NYp0Gt+2kngQAB/AQA5BA==$0 TABLE                        ibgo 테이블이 휴지통으로 옮겨짐
BONUS                          TABLE
CLOBTEST                       TABLE
DEPT                           TABLE
DEPT2                          TABLE
DEPT20                         TABLE
EMP                            TABLE
GOGAK                          TABLE
IBGO_V                         VIEW

JOB_TEST01                     TABLE
RTEST01                        TABLE
RTEST02                        TABLE
RTEST2                         TABLE
SALGRADE                       TABLE
SYS_TEMP_FBT                   TABLE
T1                             TABLE
TEST02                         TABLE
TEST3                          TABLE
TEST4                          TABLE
TT100                          TABLE

UTEST01                        TABLE
회원                           TABLE

24 rows selected.

 

SCOTT> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
IBGO             BIN$4NYp0Gt+2kngQAB/AQA5BA==$0 TABLE        2013-07-06:19:20:41
TEST3            BIN$4MyQZhMJCajgQAB/AQAnRA==$0 TABLE        2013-07-06:09:05:07

휴지통 확인

 

SCOTT>  flashback table ibgo to before drop                                 - 테이블 복구
Flashback complete.

 

SCOTT> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
ASSM                           TABLE
BIN$4MyQZhMJCajgQAB/AQAnRA==$0 TABLE
BONUS                          TABLE
CLOBTEST                       TABLE
DEPT                           TABLE
DEPT2                          TABLE
DEPT20                         TABLE
EMP                            TABLE
GOGAK                          TABLE
IBGO                           TABLE
IBGO_V                         VIEW

JOB_TEST01                     TABLE
RTEST01                        TABLE
RTEST02                        TABLE
RTEST2                         TABLE
SALGRADE                       TABLE
SYS_TEMP_FBT                   TABLE
T1                             TABLE
TEST02                         TABLE
TEST3                          TABLE
TEST4                          TABLE
TT100                          TABLE

UTEST01                        TABLE
회원                           TABLE

24 rows selected.

 

SCOTT> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
TEST3            BIN$4MyQZhMJCajgQAB/AQAnRA==$0 TABLE        2013-07-06:09:05:07

 

ibgo 테이블이 복구되었고 휴지통에서 사라졌다

 

휴지통 비우는 방법

SCOTT> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
TEST3            BIN$4MyQZhMJCajgQAB/AQAnRA==$0 TABLE        2013-07-06:09:05:07

SCOTT> purge table test3;                test3 테이블만 휴지통에서 삭제

Table purged.

 

SCOTT> show recyclebin;

아무것도 없다.

 

SCOTT> purge recyclebin;                휴지통 전체를 비우는 방법

Recyclebin Purged.

 

SCOTT> drop table 회원 purge;            휴지통에 넣지 않고 완전히 삭제하는 방법

Table dropped.

 

 

 

 

 



 

 

 

'Oracle > 백업과 복구' 카테고리의 다른 글

Drop 된 Table 복구하기  (0) 2013.07.22
by 짱구를꼭말려 2013. 8. 8. 12:18

가끔 영문이나 default 로 Linux 를 설치 시 putty 나 xshell 같은 곳에서 vi editor 사용시에 한글입력이 다 깨지는 경우가 있다.

이럴 경우, 아래와 같이 /etc/sysconfig/i18n 을 수정해 줌으로써 간단히 해결 할 수 있다.

참고로, 본인의 환경은 OEL5 (Oracle Enterprise Linux 5) 32bit 환경이고, 커널은 2.6.18-238.el5 이다. (아마 rhel5 에서도 해당 방법이 가능 할 것이다. 하지만 가끔 따로 폰트 패키지를 설치해야 할 경우가 있으니 참고하자.)

 

- 터미널 프로그램이 putty 일 경우, 캐릭터 셋을 UTF-8 이 아닌 cp949 로 해놓고 하자 


- /etc/sysconfig/i18n 파일 수정 후 적용 방법

### 본인의 경우 원본 /etc/sysconfig/i18n 을 열어보면,
### 아래와 같이 셋팅이 되어져 있다.
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"


### 요 부분을 아래와 같이 바꿔주자 (참고로 root 계정으로 수정가능)
LANG="ko_KR.eucKR"
SUPPORTED="en_US.UTF-8:en_US:en:ko_KR.eucKR:ko_KR:ko"
SYSFONT="latarcyrheb-sun16"


## 그런 다음 reboot 하지 않고 적용 되게 source 로 적용하자
[root@chacha ~]# source /etc/sysconfig/i18n
## 다른 계정에서도 필요하다면 (oracle 같은..) 해당 계정에서도 적용해주자.
[oracle@chacha ~]$ source /etc/sysconfig/i18n

 

- 그리고 xshell 일 경우, 인코딩을 Korean (EUC) 로 바꿔주어야 되는 경우도 있다. 참고하자!

by 짱구를꼭말려 2013. 8. 7. 12:01

 DB (Database) 복구의 원리   백업과복구1 P.29~31

데이터의 복구 원리를 설명하기 전에 우선, 데이터가 저장되는 원리를 먼저 보자. 사용자가 A라는 데이터를 테이블에 입력한다고 하면,

- Redo log buffer 에 A 에 먼저 들어가고,

 

- 사용자가 commit 을 하면 Redo log buffer 에 A 가 Redo log file 에 SCN 과 함께 저장이 되고 (SCN 을 1이라고 가정한다. ) Redo log buffer 에서는 A 가 지워질 것이다.

 

- 이 때, log switch 같은 것이 발생해서 checkpoint  가 일어나면 DB buffer cache 에 있던 A 가 Data file 로 내려써 지게 되면서 CKPT (check point) 프로세스가 Data file 헤더와 Control file 헤더에 각각 동일한 SCN (여기서는 1) 을 기록하게 된다.

 

- 이 상태에서 DB backup 을 받고 (Data 파일에 SCN 이 1인 상태), 그 이후로 데이터 B, C 가 들어와서 SCN 이 2~3 으로 증가 후 Data/control file의 헤더에 이제 SCN 이 3인 상태가 되었다고 가정하자.

 

- 여기서 새로운 데이터 D와 E 가 들어와서 commit 이 발생, 그리고 LGWR 이 해당 데이터들을 Redo log file 내려써야 하는데, 빈 공간이 없다면 기존의 A, B 가 들어가 있는 공간 (inactive redo log file) 에 덮어 쓸 것이다. 그러면서 또 다시 checkpoint 가 일어나서 data/control header 에도 SCN 이 4->5 로 증가했다고 가정하자.

 


 

만약, 이 상황에서 예기치 않게 DB 서버에 장애가 생겨서 데이터 파일이 날아갔다고 하면, 기존에 backup 해 둔 데이터를 복사해 와서 (Restore) DB 를 Recover 해야한다.

 

하지만 위의 상황에서 backup data 에는 A 가 입력 되었을 때의 데이터, 즉, Data file 의 SCN 이 1 일때의 상태이고, 현재 Control file 의 SCN 이 5 번이다.

 

SCN 이 서로 다르므로 Recover 를 할 때는 2~5 번까지의 작업을 Redo log file 이나 Archive log file 을 뒤져서 Recover 를 해야하는데 (2~5 번 순서대로 하고, 만약 2번이 없으면 더 이상 진행되지 않는다.) Redo log 에서 SCN 2번이 저장되어 있는 부분을 (즉, 데이터 B 를 입력했던 부분) 데이터 D 가 덮어써 버렸으니, SCN 2번 부분을 복구 할 수 없게 된다.

 

이런 경우는 no archive log mode 라고 하고 Oracle 을 처음 설치하면 기본 모드이다.

 

이런 문제를 막기 위해서 Redo log file 에 덮어쓰기 전에 다른 곳으로 복사해 두고 덮어쓰는 방법을 쓸 수 있는데 이런 방법을 archive log mode 라고 한다.

 

 

 

 Archive log mode 로 변경하기

 

## 현재 log mode 조회

SYS> archive log list;

Database log mode       No Archive Mode

Automatic archival       Disabled

Archive destination       USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     101

 

Current log sequence       103


## DB 종료

SYS> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

 


## Parameter file 변경

SYS> !vi $ORACLE_HOME/dbs/inittestdb.ora

log_archive_dest_1='location=/data/arc1'

log_archive_dest_2='location=/data/arc2'

 

log_archive_format=%s_%t_%r.arc

▲ 1과 2 폴더에는 같은 파일이 저장이 된다. 용량이 부족할 경우 1개만 사용하도록 하자


## mount 상태로 startup

SYS> startup mount;

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size    1344616 bytes

Variable Size  260049816 bytes

Database Buffers  155189248 bytes

Redo Buffers    6086656 bytes

 

Database mounted.


## archive log mode 경로 변경 내용 확인

SYS> archive log list;

Database log mode       No Archive Mode

Automatic archival       Disabled

Archive destination       /data/arc2

Oldest online log sequence     101

 

Current log sequence       103


## archive mode 로 변경하기

SYS> alter database archivelog;


Database altered.


SYS> archive log list;

Database log mode       Archive Mode

Automatic archival       Enabled

Archive destination       /data/arc2

Oldest online log sequence     101

Next log sequence to archive   103

 

Current log sequence       103


## DB open

SYS> alter database open;


 

Database altered.

 

'Oracle > Admin' 카테고리의 다른 글

[Oracle Admin] Chap 2. SQL 문장의 실행 원리  (0) 2013.09.08
[Oracle Admin] Chap 1. Oracle server 구조  (0) 2013.09.08
Export, Import  (0) 2013.07.24
Table Space 및 DATA file 관리  (0) 2013.07.16
불완전 복구(Incomplete Recovery)  (0) 2013.07.16
by 짱구를꼭말려 2013. 8. 2. 22:27

Tablespace 단위로 Export 한 후, Import 할 때 imp 프로그램이 Tablespace를 만들지는 않는다. 

직접 만들어 놓아야 한다.


 Export

Import 

계정,비밀번호,Default tablespace 가 같아야 한다. 


dmp 파일은 절대로 수정 및 저장 금지




Large Object loB(대용량 자료)


A(일반 칼럼)

B(일반 칼럼)

C(LOB)

 data

data 

Large data 


Select A,B from table 이라고 쳤을 경우 DB cache에 C도 같이 올라가게 된다.

그러면 많은 과부하가 걸리기 때문에 LOB 는 따로 관리를 하게 된다.

C 칼럼은 링크 형식으로 해놓고 따로 별개의 tablespace에 저장을 해 놓기 때문에, Export, Import 할 때에도 A,B 가 저장되어 있는 tablepsace 와 C 가 저장되어 있는 tablepsace 모두 준비를 해 놓고 Import 해야 한다.



by 짱구를꼭말려 2013. 7. 24. 12:34

예제 : 1. create table space test -> create table guest tablespace test -> insert into guest -> rm test datafile -> drop table guest

 

temp 폴더에서 사용하던 오라클을 temp2 폴더로 임시로 지정하여 guest 테이블이 나오는지 본다.

 

[oracle@server122 temp2]$ cp -av /data/temp/control01.ctl ./
`/data/temp/control01.ctl' -> `./control01.ctl'
[oracle@server122 temp2]$ cp -av /data/temp/redo* ./
`/data/temp/redo01_a.rdo' -> `./redo01_a.rdo'
`/data/temp/redo01_b.rdo' -> `./redo01_b.rdo'
`/data/temp/redo01_c.rdo' -> `./redo01_c.rdo'
`/data/temp/redo02_a.rdo' -> `./redo02_a.rdo'
`/data/temp/redo02_b.rdo' -> `./redo02_b.rdo'
`/data/temp/redo02_c.rdo' -> `./redo02_c.rdo'
[oracle@server122 temp2]$ cp -av /data/backup/close/*.dbf ./
`/data/backup/close/example01.dbf' -> `./example01.dbf'
`/data/backup/close/sysaux01.dbf' -> `./sysaux01.dbf'
`/data/backup/close/system01.dbf' -> `./system01.dbf'
`/data/backup/close/temp01.dbf' -> `./temp01.dbf'
`/data/backup/close/temp_web01.dbf' -> `./temp_web01.dbf'
`/data/backup/close/test01.dbf' -> `./test01.dbf'
`/data/backup/close/ts_web01.dbf' -> `./ts_web01.dbf'
`/data/backup/close/ts_web_idx01.dbf' -> `./ts_web_idx01.dbf'
`/data/backup/close/undotbs01.dbf' -> `./undotbs01.dbf'
`/data/backup/close/users01.dbf' -> `./users01.dbf'

백업된 datafile과 현재 사용하던 control file & redo log file 을 temp2 로 폴더로 복사한다.

백업된 Control file 을 쓰면 어떻게 될까?_?


[oracle@server122 temp2]$ cd ~
[oracle@server122 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Thu Jul 4 17:40:35 2013

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

Connected to an idle instance.

SYS> startup mount
ORACLE instance started.

Total System Global Area  422670336 bytes
Fixed Size                  1344616 bytes
Variable Size             272632728 bytes
Database Buffers          142606336 bytes
Redo Buffers                6086656 bytes
Database mounted.
SYS> @df

TS_NAME    FILE_NAME                                             MB STATUS
---------- -------------------------------------------------- ----- -------
SYSTEM     /data/temp2/system01.dbf                            2010 SYSTEM
SYSAUX     /data/temp2/sysaux01.dbf                             520 ONLINE
UNDOTBS1   /data/temp2/undotbs01.dbf                             90 ONLINE
USERS      /data/temp2/users01.dbf                                5 ONLINE
EXAMPLE    /data/temp2/example01.dbf                            346 ONLINE
TS_WEBHARD /data/temp/ts_web01.dbf                              100 OFFLINE
TS_WEB_IDX /data/temp/ts_web_idx01.dbf                           10 OFFLINE
TEST       /data/temp/test01.dbf                                  0 ONLINE
TS_NEW     /data/temp/ts_new.dbf                                 10 RECOVER

9 rows selected.

SYS> !
[oracle@server122 ~]$ vi /app/oracle/product/11g/dbs/inittestdb.ora
[oracle@server122 ~]$ exit
exit

SYS> alter database create datafile '/data/temp/test01.dbf'
  2  as '/data/temp2/test01.dbf';

Database altered.

test01.dbf 파일이 지워졌으니 대체품을 새로 만든다.

 

SYS> @df

TS_NAME    FILE_NAME                                             MB STATUS
---------- -------------------------------------------------- ----- -------
SYSTEM     /data/temp2/system01.dbf                            2010 SYSTEM
SYSAUX     /data/temp2/sysaux01.dbf                             520 ONLINE
UNDOTBS1   /data/temp2/undotbs01.dbf                             90 ONLINE
USERS      /data/temp2/users01.dbf                                5 ONLINE
EXAMPLE    /data/temp2/example01.dbf                            346 ONLINE
TS_WEBHARD /data/temp/ts_web01.dbf                              100 OFFLINE
TS_WEB_IDX /data/temp/ts_web_idx01.dbf                           10 OFFLINE
TEST       /data/temp2/test01.dbf                                 5 ONLINE
TS_NEW     /data/temp/ts_new.dbf                                 10 RECOVER

9 rows selected.

temp2 로 모두 변경 완료

SYS> @log

GROUP# MEMBER                                          MB SEQ# STATUS   ARC
------ --------------------------------------------- ---- ---- -------- -----
     1 /data/temp/redo01_a.rdo                         10    1 CURRENT  NO
     1 /data/temp/redo01_b.rdo                         10    1 CURRENT  NO
     1 /data/temp/redo01_c.rdo                         10    1 CURRENT  NO
     2 /data/temp/redo02_a.rdo                         10    0 UNUSED   YES
     2 /data/temp/redo02_b.rdo                         10    0 UNUSED   YES
     2 /data/temp/redo02_c.rdo                         10    0 UNUSED   YES

6 rows selected.

SYS> alter database rename file '/data/temp/redo01_a.rdo'
  2  to '/data/temp2/redo01_a.rdo';

Database altered.

SYS> ed
Wrote file afiedt.buf

  1  alter database rename file '/data/temp/redo01_b.rdo'
  2* to '/data/temp2/redo01_b.rdo'
SYS> /

Database altered.

SYS> ed
Wrote file afiedt.buf

  1  alter database rename file '/data/temp/redo01_c.rdo'
  2* to '/data/temp2/redo01_c.rdo'
SYS> /

Database altered.

SYS> ed
Wrote file afiedt.buf

  1  alter database rename file '/data/temp/redo02_c.rdo'
  2* to '/data/temp2/redo02_c.rdo'
SYS> /

Database altered.

SYS> ed
Wrote file afiedt.buf

  1  alter database rename file '/data/temp/redo02_b.rdo'
  2* to '/data/temp2/redo02_b.rdo'
SYS> /

Database altered.

SYS> ed
Wrote file afiedt.buf

  1  alter database rename file '/data/temp/redo02_a.rdo'
  2* to '/data/temp2/redo02_a.rdo'
SYS> /

Database altered.

SYS> ed
Wrote file afiedt.buf

  1  alter database rename file '/data/temp/redo02_a.rdo'
  2* to '/data/temp2/redo02_a.rdo'
SYS> @log

GROUP# MEMBER                                          MB SEQ# STATUS   ARC
------ --------------------------------------------- ---- ---- -------- -----
     1 /data/temp2/redo01_a.rdo                        10    1 CURRENT  NO
     1 /data/temp2/redo01_b.rdo                        10    1 CURRENT  NO
     1 /data/temp2/redo01_c.rdo                        10    1 CURRENT  NO
     2 /data/temp2/redo02_a.rdo                        10    0 UNUSED   YES
     2 /data/temp2/redo02_b.rdo                        10    0 UNUSED   YES
     2 /data/temp2/redo02_c.rdo                        10    0 UNUSED   YES

6 rows selected.

temp2 로 리두 파일들도 변경 완료

SYS> @df

TS_NAME    FILE_NAME                                             MB STATUS
---------- -------------------------------------------------- ----- --------
SYSTEM     /data/temp2/system01.dbf                            2010 SYSTEM
SYSAUX     /data/temp2/sysaux01.dbf                             520 ONLINE
UNDOTBS1   /data/temp2/undotbs01.dbf                             90 ONLINE
USERS      /data/temp2/users01.dbf                                5 ONLINE
EXAMPLE    /data/temp2/example01.dbf                            346 ONLINE
TS_WEBHARD /data/temp/ts_web01.dbf                              100 OFFLINE
TS_WEB_IDX /data/temp/ts_web_idx01.dbf                           10 OFFLINE
TEST       /data/temp2/test01.dbf                                 5 ONLINE
TS_NEW     /data/temp/ts_new.dbf                                 10 RECOVER

9 rows selected.

SYS> recover database time until '2013-07-04:16:44:00' ; (미리 알고 있는 시간으로 복구)(시간모를땐 어케하지?ㅠㅠ)
ORA-00905: missing keyword


SYS> recover database until time '2013-07-04:16:44:00';
ORA-00279: change 1271471 generated at 07/04/2013 12:37:04 needed for thread 1
ORA-00289: suggestion : /data/arc1/1_1_819894588.arc
ORA-00280: change 1271471 for thread 1 is in sequence #1


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

Log applied.
Media recovery complete.
SYS> alter database open resetlogs;

Database altered.

SYS> select * from guest;

        NO
----------
         3
         6
         7
         9

'Oracle > 백업과 복구' 카테고리의 다른 글

Flashback Query  (411) 2013.08.08
by 짱구를꼭말려 2013. 7. 22. 11:17

 Redo Log File 조회  log.sql

 

SELECT a.group#,a.member,b.bytes/1024/1024 MB,b.sequence# "SEQ#",b.status,b.archived"ARC" FROM v$logfile a, v$log b
WHERE a.group#=b.group#
ORDER BY 1,2 

 

GROUP# MEMBER                                          MB SEQ# STATUS   ARC
------ --------------------------------------------- ---- ---- -------- -----
     1 /data/temp/redo01_a.rdo                         10    3 INACTIVE YES
     1 /data/temp/redo01_b.rdo                         10    3 INACTIVE YES
     1 /data/temp/redo01_c.rdo                         10    3 INACTIVE YES
     2 /data/temp/redo02_a.rdo                         10    4 CURRENT  NO
     2 /data/temp/redo02_b.rdo                         10    4 CURRENT  NO
     2 /data/temp/redo02_c.rdo                         10    4 CURRENT  NO

6 rows selected.

 

 

Data File 조회  df.sql

 

set line 200

col tablespace_name for a10

col file_name for a50

select a.name "TS_NAME", b.name "FILE_NAME", b.bytes/1024/1024 MB, b.status
from v$tablespace a, v$datafile b
where a.ts#=b.ts#

 

TS_NAME    FILE_NAME                                             MB STATUS
---------- -------------------------------------------------- ----- --------
SYSTEM     /data/temp2/system01.dbf                            2010 SYSTEM
SYSAUX     /data/temp2/sysaux01.dbf                             520 ONLINE
UNDOTBS1   /data/temp2/undotbs01.dbf                             90 ONLINE
USERS      /data/temp2/users01.dbf                                5 ONLINE
EXAMPLE    /data/temp2/example01.dbf                            346 ONLINE
TS_WEBHARD /data/temp/ts_web01.dbf                              100 OFFLINE
TS_WEB_IDX /data/temp/ts_web_idx01.dbf                           10 OFFLINE

7 rows selected.

 

 

by 짱구를꼭말려 2013. 7. 18. 12:40

SCN 이 달라서 데이터파일이 온라인으로 안되는 경우

 

SYS> @df

TS_NAME    FILE_NAME                                             MB STATUS
---------- -------------------------------------------------- ----- --------
SYSTEM     /data/temp/system01.dbf                             2010 SYSTEM
SYSAUX     /data/temp/sysaux01.dbf                              520 ONLINE
UNDOTBS1   /data/temp/undotbs01.dbf                              90 ONLINE
USERS       /data/temp/users01.dbf                                 5 ONLINE
EXAMPLE    /data/temp/example01.dbf                             346 ONLINE
TS_WEBHARD /data/temp/ts_web01.dbf                              100 ONLINE
TS_WEB_IDX /data/temp/ts_web_idx01.dbf                           10 OFFLINE

7 rows selected.

 

SYS> alter database datafile '/data/temp/ts_web_idx01.dbf' online;
alter database datafile '/data/temp/ts_web_idx01.dbf' online
*
ERROR at line 1:
ORA-01190: control file or data file 7 is from before the last RESETLOGS
ORA-01110: data file 7: '/data/temp/ts_web_idx01.dbf'

SQL> recover datafile '/data/temp/ts_web_idx01.dbf' 

 

ORA-00279: change 1242623 generated at 07/04/2013 05:17:03 needed for thread 1
ORA-00289: suggestion : /data/arc1/3_1_819794020.arc
ORA-00280: change 1242623 for thread 1 is in sequence #3


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

AUTO

 

어쩌구저쩌구 많이 나옴

 

Log applied.
Media recovery complete.

 

SYS> alter database datafile '/data/temp/ts_web_idx01.dbf' online;

Database altered.

정상적으로 온라인 되었다.

 

 

'Oracle > 오류' 카테고리의 다른 글

Oracle 설치 도중 Swap Size Error  (0) 2013.08.12
by 짱구를꼭말려 2013. 7. 18. 11:21
| 1 2 3 4 |