Drop table 상황 발생


절차 

① 전체 open openbackup 받기 

② 테이블 생성후 commit 

③ 테이블 삭제하는 상황발생 

④ spfile 통해 pfile 생성하기 

⑤ pfile 수정후 이름 바꾸기 

 control 파일 생성하는 스크립트 만들기 

⑦ 받아 두었던 backup clone 경로로 이동 

⑧ rac2 경로의 archive 파일을 이동시키기 

⑨ recover 해주기 



[기본 설정하기]

SQL> create user scott identified by tiger

  2  default tablespace users

  3  temporary tablespace temp

  4  quota unlimited on users;


User created.


SQL> grant connect,resource to scott;


Grant succeeded.


SQL> create table scott.tt10(no number);


Table created.


SQL> insert into scott.tt10 values(1);


1 row created.


SQL> insert into scott.tt10 values(2);


1 row created.


SQL> insert into scott.tt10 values(3);


1 row created.


SQL> commit;


Commit complete.


SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;


TO_CHAR(SYSDATE,'YYYY-MM-DD:HH24:MI:SS

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

2015-05-04:11:04:48


SQL> select * from scott.tt10;


        NO

----------

         1

         2

         3



[Drop table 장애 발생]

SQL> drop table scott.tt10 purge;

Table dropped.

SQL> select * from scott.tt10;
select * from scott.tt10
                    *
ERROR at line 1:
ORA-00942: table or view does not exist


-1,2 번 노드 공통-
SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

[pfile 만들기]

SQL> create pfile from spfile;


[clone DB 생성하기]

[oracle@rac1 dbs]$ pwd
/home/oracle/product/10g/db/dbs
[oracle@rac1 dbs]$ vi initrac1.ora

#rac2.__db_cache_size=96468992
#rac1.__db_cache_size=92274688
#rac1.__java_pool_size=4194304
#rac2.__java_pool_size=4194304
#rac1.__large_pool_size=4194304
#rac2.__large_pool_size=4194304
#rac2.__shared_pool_size=75497472
#rac1.__shared_pool_size=79691776
#rac1.__streams_pool_size=0
#rac2.__streams_pool_size=0
*.audit_file_dest='/home/oracle/admin/rac/adump'
*.background_dump_dest='/home/oracle/admin/rac/bdump'
#*.cluster_database_instances=2
#*.cluster_database=true
*.compatible='10.2.0.3.0'
*.control_files='/data/temp/control01.ctl'
*.core_dump_dest='/home/oracle/admin/rac/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='clone'
#rac2.instance_number=2
#rac1.instance_number=1
*.job_queue_processes=10
*.log_archive_dest_1='location=/data/arc1'
*.log_archive_dest_2='location=/data/arc2'
*.nls_language='KOREAN'
*.nls_territory='KOREA'
*.open_cursors=300
*.pga_aggregate_target=60817408
*.processes=150
#*.remote_listener='LISTENERS_RAC'
*.remote_login_passwordfile='exclusive'
*.sga_target=184549376
#rac2.thread=2
#rac1.thread=1
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
#rac1.undo_tablespace='UNDOTBS1'
#rac2.undo_tablespace='UNDOTBS2'
*.user_dump_dest='/home/oracle/admin/rac/udump'


[이름 바꾸어주기]

[oracle@rac1 dbs]$ mv initrac1.ora initclone.ora


[control 파일 재생성 쿼리 만들기]

SQL> alter database backup controlfile to trace as '/home/oracle/re.sql';

Database altered.


[oracle@rac1 ~]$ vi re.sql
STARTUP NOMOUNT
CREATE CONTROLFILE  SET DATABASE "CLONE" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 32
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/data/temp/redo01.log'  SIZE 50M,
  GROUP 2 '/data/temp/redo02.log'  SIZE 50M,
  GROUP 3 '/data/temp/redo03.log'  SIZE 50M,
  GROUP 4 '/data/temp/redo04.log'  SIZE 50M
DATAFILE
  '/data/temp/raw3',
  '/data/temp/raw17',
  '/data/temp/raw4',
  '/data/temp/raw18',
  '/data/temp/raw15'
CHARACTER SET KO16MSWIN949
;



[데이터 파일 복사하기]

[oracle@rac1 open]$ mkdir /data/temp
[oracle@rac1 ~]$ cd /data/backup/open/
[oracle@rac1 open]$ dd if=/data/backup/open/sysaux_raw4 of=/data/temp/raw4 bs=8k
[oracle@rac1 open]$ dd if=/data/backup/open/system_raw3 of=/data/temp/raw3 bs=8k
[oracle@rac1 open]$ dd if=/data/backup/open/undotbs1_raw17 of=/data/temp/raw17 bs=8k
[oracle@rac1 open]$ dd if=/data/backup/open/undotbs2_raw18 of=/data/temp/raw18 bs=8k
[oracle@rac1 open]$ dd if=/data/backup/open/users_raw15 of=/data/temp/raw15 bs=8k


[oracle SID 바꾸어주기]


[oracle@rac1 ~]$ export ORACLE_SID=clone


SQL> @re.sql
ORACLE instance started.

Total System Global Area  184549376 bytes
Fixed Size                  1266488 bytes
Variable Size              62917832 bytes
Database Buffers          117440512 bytes
Redo Buffers                2924544 bytes

Control file created.

[archive log 옮겨주기]

SYS>!scp rac2:/data/arc1/* /data/arc1/
2_10_878407832.dbf                            100% 1024     1.0KB/s   00:00
2_11_878407832.dbf                            100% 1024     1.0KB/s   00:00
2_12_878407832.dbf                            100% 1024     1.0KB/s   00:00
2_13_878407832.dbf                            100% 1024     1.0KB/s   00:00
2_5_878407832.dbf                             100% 1599KB   1.6MB/s   00:00
2_6_878407832.dbf                             100% 2716KB   2.7MB/s   00:00
2_7_878407832.dbf                             100% 1536     1.5KB/s   00:00
2_8_878407832.dbf                             100% 1024     1.0KB/s   00:00
2_9_878407832.dbf                             100% 1024     1.0KB/s   00:00










'ORACLE > Back & Recovery' 카테고리의 다른 글

14장 RAC Backup & Recovery(물리적복구)  (0) 2015.05.01
14장 RAC 개념  (0) 2015.04.29
13장 Block Courruption & Repair  (0) 2015.04.28
12장 RMAN 2  (0) 2015.04.27
12장 RMAN (Recovery)  (0) 2015.04.24
Posted by 히드라야
,





ORC 개념 및 관리 






Vote Disk 개념 및 관리 






RAC Archive mode 변경하기 

(그림그리기)


※ %t_%s_%r  Thread Sequense     Incornation(고유번호)

※  rawdevice는 하나의 파일이 하나의 disk 처럼 용량이 고정되어 있다는 의미... 

※ File System은 상황에 맞추어서 File의 크기를 늘렸다가 줄였다가 가능함.  



순서

① 양쪽 노드 전부 shutdown immeiate 수행하기 

② 한쪽 노드만 mount 단계로 이동 

③ alter system set log_archive_dest_1='location=/data/arc1';

④ alter system set log_archive_dest_2='location=/data/arc2';

⑤ alter database archivelog;

⑥ alter database open;

⑦ 다른 노드에서 2, 3, 4, 6 실행하기 


SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.



SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.




[1번 노드 작업하기]

SQL> startup mount

ORACLE instance started.


Total System Global Area  184549376 bytes

Fixed Size                  1266488 bytes

Variable Size              88083656 bytes

Database Buffers           92274688 bytes

Redo Buffers                2924544 bytes

Database mounted.

SQL> select instance_name from v$instance;


INSTANCE_NAME

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

rac1


SQL> archive log list

Database log mode              No Archive Mode

Automatic archival             Disabled

Archive destination            /home/oracle/product/10g/db/dbs/arch

Oldest online log sequence     9

Current log sequence           10


SQL> show parameter spfile;


NAME                                 TYPE

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

VALUE

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

spfile                               string

/dev/raw/raw5


[여기서 arc1, arc2 미리 만들어야함..... 이왕이면 추가해줄것]


SQL> alter system set log_archive_dest_1='location=/data/arc1';


System altered.


SQL> alter system set log_archive_dest_2='location=/data/arc2';


System altered.


SQL> alter database archivelog;


Database altered.


SQL> archvie log list;

SP2-0734: unknown command beginning "archvie lo..." - rest of line ignored.

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /data/arc2

Oldest online log sequence     11

Next log sequence to archive   12

Current log sequence           12


SQL> alter database open;


Database altered.



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

SQL> startup mount
ORACLE instance started.
Total System Global Area  184549376 bytes
Fixed Size                  1266488 bytes
Variable Size              79695048 bytes
Database Buffers          100663296 bytes
Redo Buffers                2924544 bytes
Database mounted.

SQL> alter system set log_archive_dest_1='location=/data/arc1';

System altered.

SQL> alter system set log_archive_dest_2='location=/data/arc2';

System altered.

SQL> alter database open;

Database altered.

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /data/arc2
Oldest online log sequence     4
Next log sequence to archive   5
Current log sequence           5
SQL>










RAC HOT backup 하기 

절차

① tablespace 별 rawdevice 조사

② 백업 폴더를 만들어주고 

③ alter tablespace system begin backup

④ dd 명령어로 복사하기 

⑤ alter tablespace systemend backup




[tablespace 조회하기]

col tablespace_name for a10

col file_name for a45

select tablespace_name ,bytes/1024/1024 MB ,file_name

from dba_data_files;



[백업용 폴더 만들어 주고]


[oracle@rac1 data]$ mkdir -p /data/backup/open


[end backup 조회하기]

set line 200

col name for a50

col status for a15

select a.file#, a.name, b.status , to_char(b.time,

'YYYY-MM-DD:HH24:MI:SS') as time

from v$datafile a, v$backup b

where a.file#=b.file#;


TABLESPACE         MB FILE_NAME

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

SYSTEM            300 /dev/raw/raw3

UNDOTBS1          200 /dev/raw/raw17

SYSAUX            120 /dev/raw/raw4

UNDOTBS2          200 /dev/raw/raw18

USERS               5 /dev/raw/raw15



[begin backup 시작]

SQL> alter tablespace system begin backup;



[dd 명령어로 복사하기]

SQL> !dd if=/dev/raw/raw3 of=/data/backup/open/system_raw3 bs=8k

76800+0개의 레코드를 입력하였습니다

76800+0개의 레코드를 출력하였습니다


[end backup 해주기]

SQL> alter tablespace system end backup;



[동기화 하기]

SQL> alter system checkpoint;



[모아서 sql]


alter tablespace system begin backup;

!dd if=/dev/raw/raw3 of=/data/backup/open/system_raw3 bs=8k

alter tablespace system end backup;



alter tablespace undotbs1 begin backup;

!dd if=/dev/raw/raw17 of=/data/backup/open/undotbs1_raw17 bs=8k

alter tablespace undotbs1 end backup;


alter tablespace sysaux begin backup;
!dd if=/dev/raw/raw4 of=/data/backup/open/sysaux_raw4 bs=8k
alter tablespace sysaux end backup;

alter tablespace undotbs2 begin backup;
!dd if=/dev/raw/raw18 of=/data/backup/open/undotbs2_raw18 bs=8k
alter tablespace undotbs2 end backup;


alter tablespace users begin backup;
!dd if=/dev/raw/raw15 of=/data/backup/open/users_raw15 bs=8k
alter tablespace users end backup;

alter system checkpoint;








RAC Cold Backup






※ raw_device 추가하기 



Archive 모드에서 물리적 장애 복구




① 백업이 있고 ,Offline 되는 tablespace 장애 , online redo log 로 복구 

② 백업이 있고 ,Offline 되는 tablespace 장애 , Archive redo log  로 복구

③ 백업이 있고 ,Offline 안되는 데이터 파일 장애 , DB 종료후 복구 하기 

④ 백업이 없는 , Offline 되는 데이터 파일 장애 시, 새로 생성해서 복구 

-rawdevice 여분이 있는 경우

-rawdevice 여분이 없는 경우 


 













'ORACLE > Back & Recovery' 카테고리의 다른 글

14장 RAC Backup & Recovery(논리적복구)  (0) 2015.05.04
14장 RAC 개념  (0) 2015.04.29
13장 Block Courruption & Repair  (0) 2015.04.28
12장 RMAN 2  (0) 2015.04.27
12장 RMAN (Recovery)  (0) 2015.04.24
Posted by 히드라야
,



- ★★★ RAC를 깔때의 중요 포인트를 중요 현상  


1. High Availability 방식 

    

    배경: DB server 을 무중단으로 만들기 위해서 하는 기법으로 같은 데이터 베이스, Instance 를 1개 더 구성(예비)해서 

          처음에는 그냥 두었다가 문제가 있을때 예비를 쓰자 → 아무문제가 없으면 낭비 


    목표: 서버를 똑같이 만들자 (1 DATA Guaurd (HA)) 

       24 * 7 : 1주일간 안끔 

     down time 을 0으로 만드는 것이 목표  


    구성: Active(사용중),  Standby(예비)

   

    문제: 데이터가 일관되지 않을 수 있음 (어떻게 동기화를 할것인가) 

- 돈이 많이 듬 

- 평소에는 예비는 안씀 

      - DataBase의 동기화를 지속해서 해주어야함 

- Data Gard 프로그램 : 동기화를 해주는 프로그램 

※ HA : 고가용성


  

2. OPS  oracle parallel server ( ~ 8i)  

목적 :  서버를 3개로 (node1, node2, Database Server)

   인스 턴스(작업)     인스턴스(작업)

        스토리지(저장, 디스크, 파워 등 전부 2중화)

 

 

- 데이터를 동기화 할 필요가 없음 

- 들어오는 문이 2개 

- 인스턴스가 2개여서 부하를 나눈다고 예상했음  (생각보다 덜함)

- 공유하는 Database 는 1개 

      - 이론적으로는 확장에 제한이 없음 



     문제

      - 데이터는 메모리에서 바뀌는데 저장되는곳은 Disk , dml 명령의 경우 

         

      - RAC Ping 현상: node1에서 변경한 데이터를 가져오기 위해서는 Disk에 먼저 저장을 한뒤에 

         해당데이터를  node2 에서 복사해오는 현상 (시간이 오래걸림→ 성능저하 )

 , 변경하는 node에게 저장해달라고 요청하는 현상 




3. RAC  Real Application Cluster (9i ~) 

- 인스턴스 간에 통신(캐쉬 퓨전)을 해서 데이터의 변환을 바로 알려줌

      - interconnect 를 통해서 연결 

- 별도의 프로그램을 통해서 여러 인스턴스를 하나의 인스턴스 처럼 만들어줌  

      - Clusterware 역할은 여러 인스턴스간의 변경사항을 조정하고 관리하는 역할 










   

 □ 설정 방법(큰 부분만)

      1. 하드웨어 설정 ( node 1, node 2 만듬 , 저장 폴더()를 1개 생성할것 )


    ip 설정

    - public 망은 유지 보수 용으로 만든 망 (외부에서 public ip로 접속 할 수 있도록 )

  사용자가 접속하는 ip (외부에서 접속가능한 ip)

    - private 망은 node1 ,node2 간의 전용 통신을 만듬 (interConnect -> private, 내부망)

vmware에서 host-only로 해줌 (vipca 단계에서 설정할것) 

      - virtuar 망은: CRS 데몬의 아이피피는 virtuar ip(뒷문), public ip 예비망의 개념 

    public  IP, virtuar IP(뒷문 같은 개념) 같은 데역으로 

      2. egu 설정

- 양쪽 노드에 설정해서 암호를 안묻도록 설정해줌 


3. clusterware (10g)설정

   Grid Infrastructure(11g egu + clustarwre) 

- 여러개의 node를 관리 해주는 프로그램 


  □ 용어

- OCR(Oracle Cluster Repository) : RAC 구성의 전체 정보를 저장하는 디스크 레지스터

- Vote Disk : 매 초마다 vote disk 에 자신이 정상적으로 동작하고 있다고 표시 (2차확인)

-CRS :데몬 Instance를 체크하기 ,hert beat (살아있는지 ping 확인 1차확인)

   RAC 에서는 어떤 Instance 에서 작업을 해도 마치 하나의 서버에서 작업을 하는 것과 같은 효과

-GES(Global Enqueue Service): 데이터 변경작업 ( 트랜잭션 )을 하든 하나의 Instance 에서 데이터 변경 

                                     작업을 하는 것과 같이 관리하는 기능, 즉 작업을 할때 그작업을 lock 

- LMD(Lock Monitor Daemon Process) :GES 기능을 수행하는 RAC 용 백그라운드 프로세스, 

  여러 Instance 끼리 Lock 관련 정보를 전송하고 혹시 발생할 지 모를 DeadLock 등을 관리

-GCS(Global Cache Service): Cache Fusion 기능이 구현되기 위한 필수 서비스로서 어떤 사용자가 

  자신의 Instance 에서 원하는 데이터를 찾지 못해서 다른 Instance 에 있는 데이터를 요청했을 때 

   Interconnect 를 통해서 데이터를 전달해 주는 서비스


- GCS의 블럭 관리 모드 

 1 건의 데이터를 여러 Instance 에서 동시에 변경하거나 삭제할 수도 있기 때문에 늘 해당 데이터가 

 어떤 상태인지 관리 해야함


- Null (N) 모드 : 해당 블록을 사용중인 사용자가 없다는 것을 뜻합니다.

- Share (S) 모드 : 해당 블록을 select 하고 있는 세션이 있다는 뜻입니다.

- Exclusive (X) 모드 : 해당 블록을 누군가가 변경하고 있다는 뜻입니다. (1개 Instance 밖에 안됨)


- Master node Instance(최초접속?) : RAC에서 특정 데이터에 대한 모드를 관리하는 Instance 




- eviction? 

-GES, GCS



- cssd : 각노드들이 정상작동을 하고 있는지 확인 

① Interconnect 를 통해 매 초마다 각node에 heartbit 보내고 각노드는 답해줌 

② ①하지 못한경우 Vote Disk를 체크해줌 

③ ①, ② 모두 실패하는 경우 해당 node를 Cluster에서 제외함   

※11 g 부터 clinet 에 대표 IP (Scan IP) , 

※ 중요한건 메모리에서 작업을 계속해줌 , node에 Instance의 내용이 바뀌는 것은 아님. 

  

 


   □ RAC 구현 방법 (4가지) ★★★

   10g  RawDevice  

   10g  ASM

          11g  RawDevice 

     11g  ASM



저장방식


종류 

- FileSystem

OS에 의존적임 

프로그램 <---> OS <----> disk



- RawDevice 로우디바이스 (10g 의경우 무조건임)

RAC를 할때 

커널을 거치지만 파일시스템 보다 빠름   

oracle <----> disk

11g 부터는 rawdevice 를 공식적으로 제공 안하지만 메뉴얼에 있음        



- ASM 기술 (11g )

   프로그램을 통해 하드디스크를 관리해줌 

   oracle <----> ASM <-----> disk 


 

rac란 무엇인가?

★★★★★ 면접질문 



1. RAC 스펠링

2. 주요 용어 : interconnect , 캐시퓨젼 ,  ip 용도 (Scan ip (11g) ), 

CTF : 한쪽 노드가 죽으면 다른 노드로 접속할수있도록 (자동)

TAF : 작업하던 인스턴스가 죽어도  

crs 데몬 

HA : 

3. 설치 (10g, 11g)

4. 명령어 crs_stat -t , node 1, 껏다가 키기 , 






CRS, Grid , ClustarWare 개념


- 여러개의 장비를 묶어주는것 

- 1개의 작업이 여러 장비에서 돌거나 (하나의 장비처럼 작동)

- 여러개의 작업이 여러 장비에서 독자적으로 작동 


※ SMP: 하나의 프로그램을 여러개의 노드에서 운영 



Cluster의 구성


Node : 실제 작업을 처리하는 하드웨어 시스템 

Cluster Manager  : application 들이 작업할 수 있도록 해주는 소프트웨어 

  Node 관리, 클러스터내 노드 추가, 삭제, 자원 모니터링 , Failover 처리기능 


※ Cluster Manager 를 작동할 수 있도록 Node와의 설정을 잘 맞추어야함 



Oracle Cluster  구성 


ServiceRAC 에서 작업하는 작업  (ex 학사 서비스), 

            하나의 Instance 에서 여러 서비스를 제공할 수 있고, 

            여러개의 Instance에 걸쳐서 하나의 서비스가 제공될 수 있음 

Node Application : 각 Node 별로 다르게 운영되는것 

-Oracle Listener, 

-Global Services Daemon (GSD), 

-Oracle Enterprise

-Manager Agent (OEM Agent), 

-Virtual IP Address (VIP)

Cluster Ready Services: logical하게 node를 묶어주는 Cluster Manager (핵심★★★)

Cluster Resources : Oracle Cluster Service에 의해 관리되는 Resource들이며 데이터베이스 인스턴스,

   서비스, Listener 및 VIP 등이 포함됩니다.

 



※ Rolling patch : 운영을 중단하지 않고 DB를 패치하는것 

                    (Node 1개 서비스를 옮기고, 끄고, 패치하고, 다시 node 추가하고)


※ 알아야함 

 디스크 별로 저장되는 프로그램 각 node 별, Stroge에 

- node 사양이 다르면 , 각노드에대한 pfile의 설정을 해야함 (권장은 아님)

  Service 명령어 관련 (면접질문)


CRS(Cluster Ready Service)


3개의 구성


CSS:

EVM : 

CRS(OCR) : resource를 관리하는 process


동작원리(모두 OS의 init 에 의해서 동작이됨)

-oprocd (Processor Monitor Daemon) :상대방 노드가 응답이없다(정해진 시간)면 재부팅 

                                          시키는것 (IO fencing solution)

  ※ 리눅스: hangcheck time 

-evmd(Event Forwardig Daemon) :cluster내의 event발생시 이 event를 전파하는 기능(프로세스가 알아서 운영) 

①Cevm: cluster EVM(cluster 정보)

Levm : local EVM()


사건에 대한 log 기록



-cssd(cluster synchronization service daemon) : 새로운 노드 추가, 빠져나간 노드 삭제 하는 데몬   ★★★

클러스터 동기화 서비스 종류 


①node information service  : 어떤 node가 cluster에 join을 했는지 떠났는지 monitor 하는 기능 

Group service: 

lock service:  mode를 관리해줌 



crs_stat -t

crs_stat -p 


※ 

※ iinittab 파일 ? 

OCR : 전체 중요한 정보가 OCR에 들어있다. 


local node에 

master chache 실제 ocr 

Eviction 노드를 버린다. 






Logfiles 가 여려개 존재 




- 자신만의 확실한 무기 








Load Balancing / Failover 


Load Balancing : 서버에 걸리는 부하를 나누는 이유 

(서버에 걸리는 업무량) 을 Balancing (균형이 맞게 배분) 하는 것을 의미


방법

① clinet 단에서 설정하기 

- 문제점은 client 별로 설정을 해주어야함 . 



① rac1 /etc/hosts vip 확인하기 

② clinent 에서 C:\app\stu\product\11.2.0\client_1\network\admin 에가서 tnsname.ora 수정









② server 쪽에서 설정하는 방법 ★★★







※ Dynamic Register : Listener 끼리 부하정보를 넘겨주는것 



local_listener 파라미터: node 간에 instance 정보교환을 위한 listener 설정을 위한 파라미터

서비스이름= DB SID 





Failover 

CTF : Node 가 죽으면 죽은 Node로 접속 안함 

★★TAF : 에러난 작업을 연속해서 가능하게 하는것(select 만 가능, DML은 불가)









rac 운영하기 


□ 현재 상태 확인하기



* Target : 목표 상태

* State : 현재 상태

* Host : 작동 노드


◎ crs_stat명령어 확인하기

[oracle@rac1 ~]$crs_stat -h 


◎ 전체 확인

[oracle@rac1 ~]$ crs_stat -t


[Full name ]

ora.rac.db                          (ra1 +rac2 instance)                                

ora.rac.rac1.inst   (rac1 DB instance)                                                       

ora.rac.rac2.inst                   (rac2 DB instance)                               

ora.rac1.LISTENER_RAC1.lsnr                                           

ora.rac1.gsd                                                             

ora.rac1.ons                                                               

ora.rac1.vip                                                              

ora.rac2.LISTENER_RAC2.lsnr                                            

ora.rac2.gsd                                                               

ora.rac2.ons                                                             

ora.rac2.vip  



1초마다 확인하기

[oracle@rac1 ~]$ watch -n 1 'crs_stat -t'



 데이터베이스 상태, 모든인스턴스와 서비스 상태 확인


[oracle@rac1 ~]$ srvctl status database -d rac -v





세부명령어 조회

[oracle@rac1 ~]$ srvctl


◎ 데이터베이스의 상태, 모든 인스턴스와 모든 서비스의 상태 확인
[oracle@rac1 ~]$ srvctl status database -d rac -v


◎ 특정 인스턴스의 상태와 현재 서비스의 상태 확인
[oracle@rac1 ~]$ srvctl status instance -d rac -i rac1,rac2


◎ 모든 node의 상태를 확인합니다 
[oracle@rac1 ~]$ srvctl status nodeapps -n rac1



□ RAC 중단하기


순서

RAC 끄기 중단 순서가 중요함 


① DB instante 종료 


◎ rac1, rac2 종료하기

[oracle@rac1 ~]$ srvctl stop instance -d rac -i rac1

[oracle@rac2 ~]$ srvctl stop instance -d rac -i rac2


② ASM 종료 (없으면 생략하기) 



③ node application 종료하기 

[oracle@rac1 ~]$srvctl stop nodeapps -n rac1

[oracle@rac2 ~]$srvctl stop nodeapps -n rac2



◎ 전체 시작, 종료하기 

[oracle@rac2 raw]$ crs_start -all

[oracle@rac2 raw]$ crs_stop -all



※ rac1관련 명령은 rac1 에서 , rac2관련 명령은 rac2 에서


tnsname 에 서비스를 넣음 운용 



node application 

vip, 리스너 



□ RAC 시작하기 


 node application 시작하기 

[oracle@rac1 ~]$srvctl start nodeapps -n rac1

[oracle@rac2 ~]$srvctl start nodeapps -n rac2



② ASM 종료 (없으면 생략하기)

 

 DB instante 시작 

[oracle@rac1 ~]$ srvctl start  instance -d rac -i rac1

[oracle@rac2 ~]$ srvctl start instance -d rac -i rac2




□ RAC에 자원 추가 & 제거 하기 


★★서비스를 추가 & 


① 인사 관리를 위한 서비스를 추가할때 

 

 데이터베이스 이름은(-d) rac 이고  

 서비스를 추가하되 (-s)insa 

 rac2 에서 운영 하고(-r), 

 rac1 대기상태로(-a)


[oracle@rac1 ~]$ srvctl add service -d rac -s insa -r rac2 -a rac1



② 서비스 실행하기 

[oracle@rac1 ~]$ srvctl start service -d rac -s insa


생성할때 만들어짐....
ora.rac.insa.cs                                                         
ora.rac.insa.rac2.srv 


- 서비스 stop 후 제거하기 


◎ 그냥 제거 하려고 하면 안됨 

[oracle@rac1 ~]$ srvctl remove service -d rac -s insa

insa PREF: rac2 AVAIL: rac1

rac 데이터베이스에서 insa 서비스를 제거하겠습니까? (y/[n]) y

PRKP-1024 : insa 서비스는 아직 실행 중입니다.


◎ 제거 과정



① 먼저 Stop 시킨다음

[oracle@rac1 ~]$ srvctl stop service -d rac -s insa



② 서비스를 제거한다 

[oracle@rac1 ~]$ srvctl remove service -d rac -s insa

insa PREF: rac2 AVAIL: rac1

rac 데이터베이스에서 insa 서비스를 제거하겠습니까? (y/[n]) y




□ srvctl 명령을 사용하여 rac service 관련 설정 변경하기

-srvctl modify database

-srvctl modify instance

-srvctl modify service

-srvctl modify nodeapps




□ Service 재배치 하기


[상황 설정하기]

[oracle@rac2 ~]$ srvctl add service -d rac -s insa -r rac1 -a rac2

[oracle@rac2 ~]$ srvctl start service -d rac -s insa



◎ rac1 → rac2로 서비스 이동 위치를 바꿈  ★★★

[oracle@rac2 ~]$ srvctl relocate service -d rac -s insa -i rac1 -t rac2





□ CRS 자원의 일시적인 활성화 / 비활성화 설정하기


※ 실행중인 서비스는 비활성화 할 수 없음 


◎ 서비스 활성화 하기 


① 서비스 stop를 한뒤

[oracle@rac1 ~]$ srvctl stop service -d rac -s insa


 

② 서비스 비활성화 해줌 

[oracle@rac1 ~]$ srvctl disable service -d rac -s insa



◎ 서비스 비활성화 하기 


① 서비스 활성화 한다음

[oracle@rac1 ~]$ srvctl enable service -d rac -s insa



② 서비스 start 

[oracle@rac1 ~]$ srvctl start service -d rac -s insa





□ Log 확인하기 


◎ $ORA_CRS_HOME/crs/log : CRS resources 와 관련된 주요 내용이 저장됩니다

/home/oracle/product/10g/crs/crs/init/



◎ $ORA_CRS_HOME/crs/init :CRS daemon 이 시작될 때부터 관련 내용을 기록합니다

/home/oracle/product/10g/crs/crs/init


◎ $ORA_CRS_HOME/css/log 만약 CSS 데몬에 문제가 발생해서 재부팅을 할 경우
/home/oracle/product/10g/crs/css/log


 $ORA_CRS_HOME/log : Oracle Clusterware 관련된 일반적 내용이 저장되는 log file 입니다. 가장 일반적으로 많이 모니터링 됩니다.








★★ (중요, 패치할때 사용)서비스 재배치하기 












'ORACLE > Back & Recovery' 카테고리의 다른 글

14장 RAC Backup & Recovery(논리적복구)  (0) 2015.05.04
14장 RAC Backup & Recovery(물리적복구)  (0) 2015.05.01
13장 Block Courruption & Repair  (0) 2015.04.28
12장 RMAN 2  (0) 2015.04.27
12장 RMAN (Recovery)  (0) 2015.04.24
Posted by 히드라야
,





데이터를 읽을때 데이터블럭 순서대로 header을 읽음 

이때 특정 데이터 블럭이 장애가 난상황 에서의 조치 


기존에서는 offline 후 tablespace를 포기했음 


DB verifiy: 10g 이전버젼에서 block를 검사하는 방법 

DBMS_Repair: 10g 버젼 이후 검사한 후에 고장난 block를 Skip 하기 

BBED: 고장난 블럭의 header를 System Change Number 를 바꾸어서 해결






DB verifiy: 10g 이전버젼에서 block를 검사하는 방법 

[oracle@server113 ~]$ dbv file=/app/oracle/oradata/testdb/example01.dbf


DBVERIFY: Release 11.2.0.1.0 - Production on Sat Apr 11 06:14:39 2015


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


DBVERIFY - Verification starting : FILE = /app/oracle/oradata/testdb/example01.dbf



DBVERIFY - Verification complete


Total Pages Examined         : 12800

Total Pages Processed (Data) : 6598

Total Pages Failing   (Data) : 0

Total Pages Processed (Index): 1261

Total Pages Failing   (Index): 0

Total Pages Processed (Other): 3252

Total Pages Processed (Seg)  : 0

Total Pages Failing   (Seg)  : 0

Total Pages Empty            : 1689

Total Pages Marked Corrupt   : 0

Total Pages Influx           : 0

Total Pages Encrypted        : 0

Highest block SCN            : 1779379 (0.1779379)





DBMS_Repair: 10g 버젼 이후 검사한 후에 고장난 block를 Skip 하기 

[admin_table 통해 REPAIR_TABLE 만들기]

 begin

  2  dbms_repair.admin_tables(

  3  table_name => 'REPAIR_TABLE',

  4  table_type => dbms_repair.repair_table,

  5  action => dbms_repair.create_action,

  6  tablespace => 'USERS');

  7  end;

  8  /


[Index 만드는 table 만들기]

 begin

  dbms_repair.admin_tables(

   table_name => 'ORPHAN_KEY_TABLE',

  table_type => dbms_repair.orphan_table,

  action => dbms_repair.create_action,

  tablespace => 'USERS');

   end;

   /


[db_block_checking = true 로만들기]


SQL> show parameter db_block_checking;


NAME                                 TYPE        VALUE

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

db_block_checking                    string      FALSE


SQL> alter system set db_block_checking=true;


System altered.


SQL> show parameter db_block_checking;


NAME                                 TYPE        VALUE

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

db_block_checking                    string      TRUE




[table space 조회하기]


set line 200

col tablespace_name for a10

col file_name for a50

col mb for 9999

select tablespace_name , bytes/1024/1024 MB , file_name

from dba_data_files







[tablespace 생성]

SQL> create tablespace test20

  2  datafile '/app/oracle/oradata/testdb/test20.dbf' size 15M

  3  autoextend on;



[table 만들어 주기 ]

SQL> create table scott.tt910(no number , name varchar2(20)) tablespace test20;


[데이터 입력하기]

BEGIN

FOR  i IN 1..50000 LOOP

INSERT INTO scott.tt910 VALUES( i, DBMS_RANDOM.STRING('B',19));

END LOOP;

COMMIT;

END;

/


[확인하기]

SQL> select * from scott.tt910;


[off line 후]

SQL> alter tablespace test20 offline;


[scp로 이동후 block 깨는 작업하기]






[online]

SQL> alter tablespace test20 online;



SQL> select * from scott.tt910;


ORA-01578: ORACLE data block corrupted (file # 7, block # 383)

ORA-01110: data file 7: '/app/oracle/oradata/testdb/test20.dbf'



[DBMS_REPAIR에 에러를 넣어서 에러찾기]


declare n_corrupt int;

begin

n_corrupt:=0;

dbms_repair.check_object(

schema_name => 'SCOTT',

object_name => 'TT910',

repair_table_name =>'REPAIR_TABLE',

corrupt_count =>n_corrupt);

dbms_output.put_line('장애블럭수: ' || to_char(n_corrupt));

end;

/


장애블럭수: 1


PL/SQL procedure successfully completed.




[repair 조회하기]

col line 200;

col object_name for a10

col corrupt_description for a20

col repair_description for a20

select object_name , block_id, corrupt_type, marked_corrupt,

         corrupt_description, repair_description

from repair_table;


OBJECT_NAM   BLOCK_ID CORRUPT_TYPE MARKED_COR CORRUPT_DESCRIPTION  REPAIR_DESCRIPTION

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

TT910             383         6148 TRUE                            mark block software

                                                                   corrupt


TT910             383         6148 TRUE                            mark block software

                                                                   corrupt





[skip 하기]

begin 
dbms_repair.skip_corrupt_blocks(
schema_name =>'SCOTT',
object_name => 'TT910',
object_type => dbms_repair.table_object,
flags =>dbms_repair.skip_flag);
end;
/

[어떤 테이블이 skip 설정이 되어 있는지 확인하기]

select owner, table_name, skip_corrupt
from dba_tables
where owner='SCOTT';















'ORACLE > Back & Recovery' 카테고리의 다른 글

14장 RAC Backup & Recovery(물리적복구)  (0) 2015.05.01
14장 RAC 개념  (0) 2015.04.29
12장 RMAN 2  (0) 2015.04.27
12장 RMAN (Recovery)  (0) 2015.04.24
12장 RMAN(BACKUP)  (0) 2015.04.24
Posted by 히드라야
,



논리적 장애 복구 ★★

RAC raw device 복구 (나중에)

RMAN Block 복구  (나중에)


Control 파일 재생성시 복구 카탈로그 재생성

Data Recovery Advisor ★(물리적 장애만 가능)

예방 점검하기 

10g 이후 버젼에 RMAN + Datapunp 사용해서 마이그레이션 ★★


12c 기능 논리적 장애도 한방에 복구...ㄷㄷ 



논리적 장애 복구 ★★



[접속]


[전체백업 받기]

RMAN> backup as compressed backupset database

2> format '/data/backup/open/rman/%U_%T_full';


Starting backup at 10-APR-15
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=39 device type=DISK
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/app/oracle/oradata/testdb/system01.dbf
input datafile file number=00002 name=/app/oracle/oradata/testdb/sysaux01.dbf
input datafile file number=00003 name=/app/oracle/oradata/testdb/undotbs01.dbf
input datafile file number=00005 name=/app/oracle/oradata/testdb/example01.dbf
input datafile file number=00004 name=/app/oracle/oradata/testdb/users01.dbf
input datafile file number=00006 name=/app/oracle/oradata/testdb/test04.dbf
input datafile file number=00007 name=/app/oracle/oradata/testdb/test001.dbf
channel ORA_DISK_1: starting piece 1 at 10-APR-15
channel ORA_DISK_1: finished piece 1 at 10-APR-15
piece handle=/data/backup/open/rman/1aq40om3_1_1_20150410_full tag=TAG20150410T054019 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:17
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_1: starting piece 1 at 10-APR-15
channel ORA_DISK_1: finished piece 1 at 10-APR-15
piece handle=/data/backup/open/rman/1bq40oqc_1_1_20150410_full tag=TAG20150410T054019 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 10-APR-15



[예제 테이블 생성하기 ]


[oracle@server113 rman]$ sqlplus sys/oracle as sysdba


SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 10 05:55:11 2015


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



Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning option



SQL> create table scott.gogak2

  2  (no number,

  3  name varchar2(10),

  4  addr varchar2(20));


Table created.



SQL> insert into scott.gogak2 values(1,'하민성', '경기성남');


1 row created.


SQL> insert into scott.gogak2 values(2,'김태희', '경기부천');


1 row created.


SQL> insert into scott.gogak2 values(3,'한가인', '부산');


1 row created.


SQL> commit;


Commit complete.


SQL> select * from scott.gogak2;


        NO NAME       ADDR

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

         1 하민성     경기성남

         2 김태희     경기부천

         3 한가인     부산


SQL> alter system switch logfile;


System altered.


SQL> alter system switch logfile;


System altered.


SQL> alter system switch logfile;


System altered.


SQL> alter system switch logfile;


System altered.


SQL> select to_char(sysdate, 'YYYY-MM-DD-HH24:MI:SS')from dual;


TO_CHAR(SYSDATE,'YY

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

2015-04-10-06:00:26


SQL> drop table scott.gogak purge;


[clone DB 만들기]


[oracle@server113 dbs]$ cp inittestdb.ora ./initrman.ora

[oracle@server113 dbs]$ vi initrman.ora


rman.__pga_aggregate_target=171966464

rman.__sga_target=251658240

rman.__shared_io_pool_size=0

rman.__shared_pool_size=83886080

rman.__streams_pool_size=0

*.audit_file_dest='/app/oracle/admin/rman/adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'

*.control_files='/data2/rman/clone/control01.ctl'

*.db_block_size=8192

*.db_domain=''

*.db_name='rman'

*.diagnostic_dest='/app/oracle'

*.log_archive_dest_1='location=/data2/arc1'

*.log_archive_dest_2='location=/data2/arc2'

*.log_archive_format='%s_%t_%r.arc'

#*.memory_target=422576128

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

db_file_name_convert=('/data2/rman/testdb','/data2/rman/clone')

log_file_name_convert=('/data2/rman/testdb',/data2/rman/clone')






※ inittestdb.ora가 원본이면 안됨 .... 




[clonedb용 디렉토리 설정]


[oracle@server113 data2]$ mkdir -p rman/clone

[oracle@server113 rmanclone]$ mkdir -p /app/oracle/admin/rman

[oracle@server113 rmanclone]$ mkdir -p /app/oracle/admin/rman/adump

[oracle@server113 rmanclone]$ mkdir -p /app/oracle/admin/rman/dpdump


[archive log 복사 → ramn 있는 곳으로]



[oracle@server113 rman]$ cp -av /data2/arc1/* /data/backup/open/rman/



[]
[oracle@server113 dbs]$ export ORACLE_SID=rman
[oracle@server113 dbs]$ export NLS_FORMAT='YYYY-MM-DD-HH24:MI:SS'
[oracle@server113 admin]$ sqlplus sys/oracle as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 10 07:04:37 2015

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

Connected to an idle instance.

SQL> startup nomount;
ORACLE instance started.

Total System Global Area  146472960 bytes
Fixed Size                  1335080 bytes
Variable Size              92274904 bytes
Database Buffers           50331648 bytes
Redo Buffers                2531328 bytes
만일 접속안되면 : [oracle@server113 dbs]$ cp orapwtestdb ./orapwrmanclone


[rman으로 들어가서]

[oracle@server113 admin]$ rman auxiliary sys/oracle

[실행하기 알아서 복구됨? ] 실패
duplicate database to 'rman'
pfile='/app/oracle/product/11g/dbs/initrman.ora'
nofilenamecheck
backup location '/data/backup/open/rman'
until time '2015-04-10-06:00:26';






ORA-01127: database name 'rmanclone' exceeds size limit of 8 characters
SQL> select status from v$instance;
select status from v$instance
*






















[현재 시스템 조회]

col platform_name for a20

col endian_format for a20 

select d.platform_name, endian_format

from v$transportable_platform tp , v$database d

where tp.platform_name=d.platform_name;


[RHEL4 에서 작업하기]


SQL> create tablespace conv_test

  2  datafile '/home/oracle/oradata/testdb/conv_test01.dbf' size 10M;


Tablespace created.


SQL> create table scott.ctest1(no number) tablespace conv_test;


Table created.


SQL> insert into scott.ctest1 values(1);


1 row created.


SQL> insert into scott.ctest1 values(2);


1 row created.


SQL> commit;


Commit complete.


SQL> select * from scott.ctest1;


        NO

----------

         1

         2


[점검]

exec dbms_tts.transport_set_check('CONV_TEST',true);


SYS>select * from transport_set_violations;
no rows selected


[datapump 용 작업]
[oracle@server10g112 ~]$ mkdir /home/oracle/dp_conv

SQL> create directory dp_conv as '/home/oracle/dp_conv';
Directory created.

SQL> grant read ,write on directory dp_conv to system;
Grant succeeded.



[read only 로 바꾼다음 expdp 수행]
SQL> alter tablespace conv_test read only;

Tablespace altered.

[oracle@server10g112 ~]$ expdp system/oracle dumpfile=conv.dmp  directory=dp_conv transport_tablespaces=conv_test logfile=conv.log

Export: Release 10.2.0.4.0 - Production on Monday, 27 April, 2015 16:34:37

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01":  system/******** dumpfile=conv.dmp directory=dp_conv transport_tablespaces=conv_test logfile=conv.log
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
  /home/oracle/dp_conv/conv.dmp
Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at 16:35:44




[oracle@server113 dp_conv]$ expdp system/oracle dumpfile=conv_meta.dmp directory=dp_conv full=y include=user,role,role_grant,profile content=metadata_only

Export: Release 11.2.0.1.0 - Production on Fri Apr 10 13:06:55 2015

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

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning option
FLASHBACK automatically enabled to preserve database integrity.
Starting "SYSTEM"."SYS_EXPORT_FULL_01":  system/******** dumpfile=conv_meta.dmp directory=dp_conv full=y include=user,role,role_grant,profile content=metadata_only
Processing object type DATABASE_EXPORT/PROFILE
Processing object type DATABASE_EXPORT/SYS_USER/USER
Processing object type DATABASE_EXPORT/SCHEMA/USER
Processing object type DATABASE_EXPORT/ROLE
Processing object type DATABASE_EXPORT/SCHEMA/ROLE_GRANT
Master table "SYSTEM"."SYS_EXPORT_FULL_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_FULL_01 is:
  /data/dp_conv/conv_meta.dmp
Job "SYSTEM"."SYS_EXPORT_FULL_01" successfully completed at 13:08:04








[옮길 플랫폼 확인하기 target 에서 확인하기]

[oracle@server113 ~]$ sqlplus sys/oracle as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 10 11:41:25 2015

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning option

col platform_name for a20
SQL> col endian_format for a20
select d.platform_name, endian_format
from v$transportable_platform tp , v$database d
  3  where tp.platform_name=d.platform_name;

PLATFORM_NAME        ENDIAN_FORMAT
-------------------- --------------------
Linux IA (32-bit)    Little

[변환 작업하기(보내는 쪽에서)]
Cause : RMAN버그
Action : 
10g 에서는 RMAN에 버그가 있어서 원래경로에 있는 RMAN을 실행되는 경로로 복사해줘야 합니다.
[oracle@database ~]$ which rman
/usr/X11R6/bin/rman
[oracle@database ~]$ su -
Password:
[root@database ~]# cp /home/oracle/product/10g/bin/rman /usr/X11R6/bin/rman
cp: overwrite `/usr/X11R6/bin/rman'? y
[oracle@database ~]$ rman target /


RMAN> convert tablespace 'CONV_TEST' to platform 'Linux IA (32-bit)'
format '/home/oracle/dp_conv/%U'2> ;

Starting backup at 27-APR-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=158 devtype=DISK
channel ORA_DISK_1: starting datafile conversion
input datafile fno=00006 name=/home/oracle/oradata/testdb/conv_test01.dbf
converted datafile=/home/oracle/dp_conv/data_D-TESTDB_I-2661467944_TS-CONV_TEST_FNO-6_01q5eq82
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03
Finished backup at 27-APR-15


[데이터 전송받기]

[oracle@server113 dp_conv]$ scp 172.16.65.140:/home/oracle/dp_conv/* /data/dp_conv/

oracle@172.16.65.140's password:

conv.dmp                                      100%   68KB  68.0KB/s   00:00

conv.log                                      100%  958     0.9KB/s   00:00

conv_meta.dmp                                 100%  208KB 208.0KB/s   00:00

data_D-TESTDB_I-2661467944_TS-CONV_TEST_FNO-6 100%   10MB  10.0MB/s   00:01

export.log                  



[data pump 작업 target 에서]


[oracle@server113 dp_conv]$ sqlplus sys/oracle as sysdba


SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 10 12:11:09 2015


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

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning option


SQL> create directory dp_conv as '/data/dp_conv';


Directory created.


SQL> grant read, write on directory dp_conv to system;


Grant succeeded.



[oracle@server113 dp_conv]$ rman target sys/oracle

RMAN> convert datafile '/data/dp_conv/data_D-TESTDB_I-2661467944_TS-CONV_TEST_FNO-6_01q5eq82'

 format "/app/oracle/oradata/testdb/conv_test01.dbf";2>


Starting conversion at target at 10-APR-15

using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile conversion

input file name=/data/dp_conv/data_D-TESTDB_I-2661467944_TS-CONV_TEST_FNO-6_01q5eq82

converted datafile=/app/oracle/oradata/testdb/conv_test01.dbf

channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:07

Finished conversion at target at 10-APR-15























'ORACLE > Back & Recovery' 카테고리의 다른 글

14장 RAC 개념  (0) 2015.04.29
13장 Block Courruption & Repair  (0) 2015.04.28
12장 RMAN (Recovery)  (0) 2015.04.24
12장 RMAN(BACKUP)  (0) 2015.04.24
11장 FLASHBACK  (0) 2015.04.23
Posted by 히드라야
,




기본적인 복구 방법과 절차가 같음 다만 명령어가 생긴것이 다를뿐 원리가중요함 



※작업형 명령어의 경우 중간에 실패하면 중간 실패됨 



완전복구





실습 예제 


□ OFFLINE 되는 데이터 파일 삭제된 상황

① datafile 을 offline 으로 바꿈 

② 복원 (restore)

③ datafile 복구 (recovery)

④ datafile online; 


[상황 만들기]

SQL> create tablespace rtest

  2  datafile '/app/oracle/oradata/testdb/rtest01.dbf' size 10M

  3  autoextend on;


[RMAN 전체 백업 받기]


RMAN> backup as compressed backupset database

2> format '/data/backup/open/rman/%T_full_%U';



[삭제하기]

[oracle@server113 ~]$ rm -f /app/oracle/oradata/testdb/rtest01.dbf

[oracle@server113 ~]$ ls /app/oracle/oradata/testdb/rtest01.dbf

ls: /app/oracle/oradata/testdb/rtest01.dbf: 그런 파일이나 디렉토리가 없음

[oracle@server113 ~]$


[복구하기]



RMAN> sql 'alter tablespace rtest offline immediate';


sql statement: alter tablespace rtest offline immediate



RMAN> restore tablespace rtest;


Starting restore at 07-APR-15

using channel ORA_DISK_1


channel ORA_DISK_1: starting datafile backup set restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

channel ORA_DISK_1: restoring datafile 00008 to /app/oracle/oradata/testdb/rtest01.dbf

channel ORA_DISK_1: reading from backup piece /data/backup/open/rman/20150407_full_18q3pift_1_1

channel ORA_DISK_1: piece handle=/data/backup/open/rman/20150407_full_18q3pift_1_1 tag=TAG20150407T121141

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete, elapsed time: 00:00:01

Finished restore at 07-APR-15



RMAN> recover tablespace rtest;

Starting recover at 07-APR-15
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:01
Finished recover at 07-APR-15


RMAN> sql 'alter tablespace rtest online';

sql statement: alter tablespace rtest online

※ 작업형 명령어
run {
sql 'alter tablespace rtest offline immediate';
 restore tablespace rtest;
 recover tablespace rtest;
sql 'alter tablespace rtest online';
}











□ OFFLINE 안되는 데이터 파일 삭제된 상황

① DB 종료

② 복원 (restore)

③ 데이터베이스 복구 (recovery)

④ 데이터 베이스 open 



[상황설정]



[oracle@server113 ~]$ rm -f /app/oracle/oradata/testdb/system01.dbf

[oracle@server113 ~]$ ls /app/oracle/oradata/testdb/system01.dbf

ls: /app/oracle/oradata/testdb/system01.dbf: 그런 파일이나 디렉토리가 없음



[oracle@server113 ~]$ rman target sys/oracle

Recovery Manager: Release 11.2.0.1.0 - Production on Tue Apr 7 12:38:28 2015

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

connected to target database (not started)

RMAN> startup

Oracle instance started
database mounted
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of startup command at 04/07/2015 12:38:53
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/app/oracle/oradata/testdb/system01.dbf'

RMAN> restore tablespace system;

Starting restore at 07-APR-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=21 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /app/oracle/oradata/testdb/system01.dbf
channel ORA_DISK_1: reading from backup piece /data/backup/open/rman/20150407_full_18q3pift_1_1
channel ORA_DISK_1: piece handle=/data/backup/open/rman/20150407_full_18q3pift_1_1 tag=TAG20150407T121141
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:02:19
Finished restore at 07-APR-15

RMAN> recover database;

Starting recover at 07-APR-15
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:01

Finished recover at 07-APR-15



RMAN> alter database open;

database opened









□ 임시 경로 에서 datafile 복구하기


① datafile 을 offline 으로 바꿈 

② datafile을 임시 경로로 바꿔주기

 복원 (restore)

 control 파일의 경로를 바꾸어 주고

  datafile 복구 (recovery)

⑥  datafile online; 



[상황설정]

[oracle@server113 ~]$ rm -f /app/oracle/oradata/testdb/rtest01.dbf
[oracle@server113 ~]$ ls /app/oracle/oradata/testdb/rtest01.dbf
ls: /app/oracle/oradata/testdb/rtest01.dbf: 그런 파일이나 디렉토리가 없음

[]

RMAN> report schema;

Report of database schema for database with db_unique_name TESTDB

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    740      SYSTEM               ***     /app/oracle/oradata/testdb/system01.dbf
2    560      SYSAUX               ***     /app/oracle/oradata/testdb/sysaux01.dbf
3    350      UNDOTBS1             ***     /app/oracle/oradata/testdb/undotbs01.dbf
4    15       USERS                ***     /app/oracle/oradata/testdb/users01.dbf
5    100      EXAMPLE              ***     /app/oracle/oradata/testdb/example01.dbf
6    10       TEST4                ***     /app/oracle/oradata/testdb/test04.dbf
7    10       TEST                 ***     /app/oracle/oradata/testdb/test001.dbf
8    10       RTEST                ***     /app/oracle/oradata/testdb/rtest01.dbf

[상태]

TABLESPACE         MB FILE_NAME
---------- ---------- --------------------------------------------------
EXAMPLE           100 /app/oracle/oradata/testdb/example01.dbf
USERS              15 /app/oracle/oradata/testdb/users01.dbf
UNDOTBS1          350 /app/oracle/oradata/testdb/undotbs01.dbf
SYSAUX            560 /app/oracle/oradata/testdb/sysaux01.dbf
SYSTEM            740 /app/oracle/oradata/testdb/system01.dbf
TEST4              10 /app/oracle/oradata/testdb/test04.dbf
TEST               10 /app/oracle/oradata/testdb/test001.dbf
RTEST              10 /app/oracle/oradata/testdb/rtest01.dbf


[복구]




run {
sql 'alter tablespace rtest offline immediate';
set newname for datafile ' /app/oracle/oradata/testdb/rtest01.dbf'  
to '/data2/temp/rtest01.dbf';
restore tablesapce rtest;
switch datafile 8
recover tablespace rtest;
sql 'alter tablespace rtest online';
}














 임시경로에서 필요한 Datafile만 복구 + 백업이 없는 Datafile 상황


①  DB 종료

②  control , redolog 를 임시경로로 복사하기

  parameter에 control읠 경로를 임시 경로로 해줌 DB 

  mount 상태로

 OPEN시  필요한datafile(system,sysaux,undotbs, 해당 datafile),  redolog 의 경로를 임시경로로 바꾸어줌 

⑥ 복구에 필요없는 datafile은 offline 한뒤에 

⑦  ---만일 백업이 없는 경우 생성해주기 

⑧ 필요한 datafile(system,sysaux,undotbs, 해당 datafile복원 (restore)

⑨ 파일 변경 위치를 control 파일에 반영하기 

⑩ datafile 복구 (recovery)

⑪ DB open  

⑫ 해당 table space online 해주고 














불완전복구 





'ORACLE > Back & Recovery' 카테고리의 다른 글

13장 Block Courruption & Repair  (0) 2015.04.28
12장 RMAN 2  (0) 2015.04.27
12장 RMAN(BACKUP)  (0) 2015.04.24
11장 FLASHBACK  (0) 2015.04.23
10장 oracle net work + db link  (0) 2015.04.22
Posted by 히드라야
,



설치 , 업글, 장애처리 , 마이그래이션


RMAN 

자동으로 백업하고 복구해주는 프로그램 



방식

① 복구 카탈로그 DB를 사용

복구카탈로그 DB를 새로운 DB에서 관리

② 운영 DB 에 control File 내부에서 관리를 할것인가 

만일 control을 재생성하면 복구카탈로그도 없어짐 

but 다시 생성하는 명령어가 있음 



특징

① 쓰는 block 만 backup 함 

② 기존의 백업에서 추가되는 것만 백업 가능 

③ 백업 시간이 예측 가능하다 



채널: 복구파일이 저장되는 경로 , 할당해주어야함 


백업 종류 

① backupset

② image copy 



명령어종류

① 독립형 명령 : 명령어를 1개씩 사용 

② 작업형 명령 : 여러개의 명령어를 모아서 사용 run 사용



증분 백업 

차등증분 백업:  자신의 Level(숫자) 보다 앞시점부터 검색해서 Level이 같거나 작은것 이후로 추가된 것들을 모두 백업


누적 증분 백업: 자신의 Level(숫자) 보다 앞시점부터 검색해서 Level이 작은것 이후로 추가된 것들을 모두 백업

※ Block change tracking 기능 : 블럭의 변경이력의 파일로 보다 block를 전부 검색 하지 않아도됨 

                                     but 변경이력이 많을 경우 server process 간에 병목현상이 발생 

                                     disable 할것 

[설정 명령어]

SQL> alter database enable block change tracking

  2  using file '/data/backup/open/dt.bat';


[사용 안함 명령어]

SQL> alter database disable block change tracking;


[조회 명령어]

SQL> set line 200

SQL> col status for a10

SQL> col filename for a50

SQL> col MB for 999999

SQL> select status , filename, bytes/1024/1024 MB

  2  from v$block_change_tracking;





chanel 할당하기 

[접속하기]

[oracle@server113 ~]$ rman target sys/oracle


Recovery Manager: Release 11.2.0.1.0 - Production on Tue Apr 7 06:22:10 2015


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


connected to target database: TESTDB (DBID=2657215234)



□ 자동으로 채널 설정하기 

  - 기본채널설정

  - 사용자가 원하는 채널 설정 


[기본체널로 설정하기]

RMAN> configure default device type to disk;


using target database control file instead of recovery catalog

new RMAN configuration parameters:

CONFIGURE DEFAULT DEVICE TYPE TO DISK;

new RMAN configuration parameters are successfully stored




[저장되는 위치 확인]

RMAN> backup tablespace example;


Starting backup at 07-APR-15

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=34 device type=DISK

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00005 name=/app/oracle/oradata/testdb/example01.dbf

channel ORA_DISK_1: starting piece 1 at 07-APR-15

channel ORA_DISK_1: finished piece 1 at 07-APR-15

piece handle=/app/oracle/flash_recovery_area/TESTDB/backupset/2015_04_07/o1_mf_nnndf_TAG20150407T062636_bl5yjfx5_.bkp tag=TAG20150407T062636 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:01:08

Finished backup at 07-APR-15


※  default 저장되는 위치

/app/oracle/flash_recovery_area/TESTDB/backupset/2015_04_07



[사용자 지정 저장 위치 정하기]

RMAN> configure channel device type disk

2> format '/data/backup/open/rman/%U_%T.bak'';


old RMAN configuration parameters:

CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/data/backup/open/rman/%U_%T';

new RMAN configuration parameters:

CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/data/backup/open/rman/%U_%T.bak';

new RMAN configuration parameters are successfully stored



[테스트 하기]

RMAN> backup tablespace example;


Starting backup at 07-APR-15

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=34 device type=DISK

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00005 name=/app/oracle/oradata/testdb/example01.dbf

channel ORA_DISK_1: starting piece 1 at 07-APR-15

channel ORA_DISK_1: finished piece 1 at 07-APR-15

piece handle=/data/backup/open/rman/05q3ov7s_1_1_20150407.bak tag=TAG20150407T064308 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03

Finished backup at 07-APR-15






□ 수동으로 Channel 설정

     명령어를 할때마다 


RMAN> run {

2> allocate channel ch1 type disk

3> format '/data/backup/open/%U_%T';

4> backup tablespace example;

5> }


released channel: ORA_DISK_1

allocated channel: ch1

channel ch1: SID=34 device type=DISK


Starting backup at 07-APR-15

channel ch1: starting full datafile backup set

channel ch1: specifying datafile(s) in backup set

input datafile file number=00005 name=/app/oracle/oradata/testdb/example01.dbf

channel ch1: starting piece 1 at 07-APR-15

channel ch1: finished piece 1 at 07-APR-15

piece handle=/data/backup/open/04q3ouua_1_1_20150407 tag=TAG20150407T063802 comment=NONE

channel ch1: backup set complete, elapsed time: 00:00:03

Finished backup at 07-APR-15

released channel: ch1







압축하면서 백업하기 



[압축 하면서 백업하기] 

RMAN> backup as compressed backupset database

2> format '/data/backup/open/rman/%T_full_comp_%U';


Starting backup at 07-APR-15

using channel ORA_DISK_1

channel ORA_DISK_1: starting compressed full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00001 name=/app/oracle/oradata/testdb/system01.dbf

input datafile file number=00002 name=/app/oracle/oradata/testdb/sysaux01.dbf

input datafile file number=00003 name=/app/oracle/oradata/testdb/undotbs01.dbf

input datafile file number=00005 name=/app/oracle/oradata/testdb/example01.dbf

input datafile file number=00004 name=/app/oracle/oradata/testdb/users01.dbf

input datafile file number=00006 name=/app/oracle/oradata/testdb/test04.dbf

channel ORA_DISK_1: starting piece 1 at 07-APR-15

channel ORA_DISK_1: finished piece 1 at 07-APR-15

piece handle=/data/backup/open/rman/20150407_full_comp_09q3p1e7_1_1.dbf tag=TAG20150407T072038 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:02:25

channel ORA_DISK_1: starting compressed full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

including current control file in backup set

channel ORA_DISK_1: starting piece 1 at 07-APR-15

channel ORA_DISK_1: finished piece 1 at 07-APR-15

piece handle=/data/backup/open/rman/20150407_full_comp_0aq3p1io_1_1.dbf tag=TAG20150407T072038 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

Finished backup at 07-APR-15



[압축하면서 Archive log file 백업하기] (실패)

backup as compressed backupset archivelog all
format '/data/backup/open/rman/%U_%T';


옵션


[keep_backup]


RMAN> backup as compressed backupset tablespace example

2> format '/data/backup/open/rman/%U_keep_%T'

3> keep until time 'sysdate+90';


[not backed up]


RMAN> backup as compressed backupset database;


Starting backup at 07-APR-15

using channel ORA_DISK_1

channel ORA_DISK_1: starting compressed full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00001 name=/app/oracle/oradata/testdb/system01.dbf

input datafile file number=00002 name=/app/oracle/oradata/testdb/sysaux01.dbf

input datafile file number=00003 name=/app/oracle/oradata/testdb/undotbs01.dbf

input datafile file number=00005 name=/app/oracle/oradata/testdb/example01.dbf

input datafile file number=00004 name=/app/oracle/oradata/testdb/users01.dbf

input datafile file number=00006 name=/app/oracle/oradata/testdb/test04.dbf

channel ORA_DISK_1: starting piece 1 at 07-APR-15

channel ORA_DISK_1: finished piece 1 at 07-APR-15

piece handle=/data/backup/open/rman/0bq3p5qn_1_1_20150407.bak tag=TAG20150407T083535 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:03:16

channel ORA_DISK_1: starting compressed full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

including current control file in backup set

channel ORA_DISK_1: starting piece 1 at 07-APR-15

channel ORA_DISK_1: finished piece 1 at 07-APR-15

piece handle=/data/backup/open/rman/0cq3p60r_1_1_20150407.bak tag=TAG20150407T083535 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

Finished backup at 07-APR-15


[데이터 파일 추가하고]
SQL> create tablespace test
  2  datafile '/app/oracle/oradata/testdb/test001.dbf' size 10M;


not backed up 해보기]
※ 파일 추가가 안된것은 불가능 
RMAN> backup as compressed backupset database
2> format '/data/backup/open/rman/%U_%T'
3> not backed up;

Starting backup at 07-APR-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=28 device type=DISK
skipping datafile 1; already backed up on 07-APR-15
skipping datafile 2; already backed up on 07-APR-15
skipping datafile 3; already backed up on 07-APR-15
skipping datafile 4; already backed up on 07-APR-15
skipping datafile 5; already backed up on 07-APR-15
skipping datafile 6; already backed up on 07-APR-15
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/app/oracle/oradata/testdb/test001.dbf
channel ORA_DISK_1: starting piece 1 at 07-APR-15
channel ORA_DISK_1: finished piece 1 at 07-APR-15
piece handle=/data/backup/open/rman/0gq3p6jh_1_1_20150407 tag=TAG20150407T084849 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 07-APR-15

※ 내용이 변경된것을 할려면 


RMAN> backup as compressed backupset database
2> format '/data/backup/open/rman/%U_%T'
3> not backed up since time ='sysdate - 5';



진행상황 조회하기


SELECT  SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,

ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"

FROM V$SESSION_LONGOPS

WHERE OPNAME LIKE 'RMAN%'

AND OPNAME NOT LIKE '%aggregate%'

AND TOTALWORK !=0

AND SOFAR <> TOTALWORK;


  SID    SERIAL#    CONTEXT      SOFAR  TOTALWORK %_COMPLETE

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

        37         64          1      68922     228480      30.17




backup 관리하기


[조회]

RMAN> list backupset;


[특정삭제]

RMAN> delete backupset 2;


[다지우기]

RMAN> delete backupset;


[만일 OS에서지우면 다시 생성하기] 

RMAN> crosscheck backupset;




schema 조회하기


RMAN> report schema;


Report of database schema for database with db_unique_name TESTDB


List of Permanent Datafiles

===========================

File Size(MB) Tablespace           RB segs Datafile Name

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

1    740      SYSTEM               ***     /app/oracle/oradata/testdb/system01.dbf

2    560      SYSAUX               ***     /app/oracle/oradata/testdb/sysaux01.dbf

3    350      UNDOTBS1             ***     /app/oracle/oradata/testdb/undotbs01.dbf

4    15       USERS                ***     /app/oracle/oradata/testdb/users01.dbf

5    100      EXAMPLE              ***     /app/oracle/oradata/testdb/example01.dbf

6    10       TEST4                ***     /app/oracle/oradata/testdb/test04.dbf

7    10       TEST                 ***     /app/oracle/oradata/testdb/test001.dbf


List of Temporary Files

=======================

File Size(MB) Tablespace           Maxsize(MB) Tempfile Name

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

1    50       TEMP2                32767       /app/oracle/oradata/testdb/temp02.dbf

2    10       TEMP_TEST4           32767       /app/oracle/oradata/testdb/temp_test04.dbf





[여러개의 채널로 받기]

run {

allocate channel  ch10  device type disk;

allocate channel  ch11  device  type disk;


backup as compressed backupset 

tablespace example channel ch10

format  '/data/backup/open/rman/ch10_%U_%T';


backup as compressed backupset 

tablespace sysaux channel ch11

format '/data/backup/open/rman/ch11_%U_%T';

}




복구 카탈로그 관리하기

① clone DB 1개 만들어 주기

② 카탈로그 생성하기 

③ TEST

④ 관리하기 

-동기화

-

-








'ORACLE > Back & Recovery' 카테고리의 다른 글

12장 RMAN 2  (0) 2015.04.27
12장 RMAN (Recovery)  (0) 2015.04.24
11장 FLASHBACK  (0) 2015.04.23
10장 oracle net work + db link  (0) 2015.04.22
9장 무정지 상태에서 복구  (0) 2015.04.21
Posted by 히드라야
,



적극적인 의지 

왜 나를 뽑아야함? 



OS- 리눅스

DB- 설치/ oui silent      DBE

 patch , upgrade 

SQL /PL SQL             DBA 

admin                   공통 

backup recovery



테이블 만들고  칼럼 2개 

데이터를 넣어줌 

commit 


update where 절 X 하고 명령어 후에 

commit 하면 

rollback 안됨


장애시에 

Flashback 로 한번 시도하고 안되면 바로 clone db를 해줄것 



문제 

DML 명령후에 commit을 하게되면 데이터를 복구를 못함 

clone DB 를 한 후에 특정시점으로 복구한 뒤에 데이터를 넣어야 했음 

그것을 줄이기 위한 기능 



Flash back 란 

논리적인 장애를 복구하기 위해 ORACLE 에서 제공하는 기능 

undo를 활용해서 복구를 수행 


종류 

Row Lavel Flashback:  특정 row 만 과거로, (자동설정됨)


Table Level Flashback: 특정 table 만 과거로 (자동설정됨)

-DML 시에

- drop 시에

Database Level Flashback  : DB 전체를 과거로 ,(ON ↔ OFF 가능)


※Flashback Version Query : undo를 통해서 변한 이력을 조회할 수 있음 




Row Lavel Flashback







[]

select versions_startscn st_scn, versions_endscn endscn,

versions_xid txid, versions_operation opt,name

from scott.fmem versions between scn minvalue and maxvalue

where tel=111;


    ST_SCN     ENDSCN TXID             O NAME

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

   1873526            05001A0015040000 U 하민성

   1873484    1873526 0300160066040000 I 박동주



[시간 조회하기 ]

select scn_to_timestamp(1873484) from dual;

SCN_TO_TIMESTAMP(1873484)

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

06-APR-15 11.47.11.000000000 AM



[바뀐 내용을 확인하고  update 문장 수행]

update "SCOTT"."FMEM" set "NAME" = '박동주' where tel =111;






Table Level Flashback




  

※테이블의 구조가 바뀌면 사용 못함












'ORACLE > Back & Recovery' 카테고리의 다른 글

12장 RMAN (Recovery)  (0) 2015.04.24
12장 RMAN(BACKUP)  (0) 2015.04.24
10장 oracle net work + db link  (0) 2015.04.22
9장 무정지 상태에서 복구  (0) 2015.04.21
8장 데이터 이동하기 2 (다못함)  (0) 2015.04.21
Posted by 히드라야
,


9.3Truncate(454p).txt

9Drop_user(466p).txt

※ 방법 2가지를 이해해야함 


① clone DB 로 데이터를 복구한 뒤에 network 인 dblink 로 연결 해서 데이터 옮기기

② export / import 를 수행해서 데이터를 옮기기 


oracle 설치 후 할일

1. sys 비번 설정하기 

2.  oracle port 바꾸기 



◎ Oracle Net Work 

□ 접속절차

① 확인

② 요청

③ 요청

④ Connection

⑤ Sesseion

※ 최초접속에만 ② 적용하고 그다음 부터는 ② 생략  


□ Client

Client 측에서는 tnsnames. ora 를 확인 

tnsnames.ora : 접속하려는 oracle 서버에 대한 정보 를 적음 

(SID , Port , 주소(ip, host name) 등의 정보)



□ Server

Server 쪽에는 listener.ora 

(SID , Port , 주소(ip, host name) 등의 정보, 여려개의 Listener로 나눌 수 있음 )




※ oracle 과 Listener는 별개의 프로그램 

※ 복구시에는 운영DB가 Clinent 가되고 CloneDB가 Server의 역할을 하게됨

※ port 는 program 별로 할당된 들어오는 문  ex) http:80 , oracle=1521 

※ 1개의 Server에 실제로 oracle Instance를 여러개 실행해 놓고 할 수 있음 


※ Listener 


※ conectction & sesstion





□ window(oracle clinent program) → linux(oracle server) 실습

[Window Client ]


①  관리자 실행 setup Program 설치하기 (주의 할점은 관리자 선택)

     C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Oracle - OraClient11g_home1

② 설치 완료후 윈도우 → 모든프로그램→ OraClient11g_home1→ →구성 및 이전 툴

    → Net Configuration Assistant(관리자 권한 실행)

③ 설치 화면 나옴 1

사진

01234567891011

사진

- 이름 지정 방법구성, 다음

-  기본값대로 다음

-  완료화면

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

- 로컬 네트 서비스 이름 구성 다음

- 추가 다음

- 서비스 이름은 database 이름(SID)하고 같게 해야함 ★★

- TCP 다음

- oracle 서버 확인후에 호스트 이름에 ip 주소를 넣어줌, 포트 확인하기

- 테스트를 수행합니다 다음 

           

④ [ Linux Server 설정] (리스너가 없습니다 경우)

① 콘솔 화면이 아닌 display 화면으로 가서 터미널 실행 후 export LANG=ko , netca 

사진

012

사진

② Listener 구성 

③ add 선택

④ 이름 선택 

[oracle@server113 ~]$ cd /app/oracle/product/11g/network/admin/listener.ora 가 생겨야 함

⑤ [oracle@server113 admin]$ vi listener.ora

[내용 추가해줄것] 


SID_LIST_LISTENER =

 (SID_LIST =

  (SID_DESC =

   (SID_NAME = testdb)

   (ORACLE_HOME = /app/oracle/product/11g)

  )

 )


⑥ 완료된 후에 consol 에서 lsnrctl 후  status  , start listener , stop listener 


③ 설치 화면 나옴 2 

- 로그인문제의 경우 계정을 scott/tiger 로 바꿀것 

- 네트 서비스이름도 testdb로 해줄것을 권장 (SID 와 같게해주기 쉽게 구분하기위해)

- 다른 네트 서비스를 구성하시겠습니까 아니오

C:\app\stu\product\11.2.0\client_1\network\admin/tnsnames.ora 가 있어야함 

사진

012

사진

⑤ 확인 하기 window cmd 에서 tnsping testdb

    sqlplus scott/tiger@testdb

    sqlplus sys/oracle@testdb as sysdba


※ 설정바뀌면 리스너 재시작 할것 

※  네트워크 설정이 Bridged 여야 되는듯= 같은 대역이여야 됨 

※ 네트 서비스 : tnsnames.ora 설정되어 있는 접속하려는 db 정보 

※ Listener :  DB의 접속하기 위한 정보기 들어 있는 것 listener.ora

※ lsnrctl start listener2 : 번호 조심할것!! 








◎ DB link 


□ 개요

    물리적인 DB server 2대를 연결하여 1개의 DB server 처럼 사용 


※ 기존의 export/import 활용한 복구


※  DB LINK 를 활용한 복구





□ cloneDB 만들어서 DB link 연결 실습

 개요: 장애가 발생한 운영DB 를 복사해서 Clone DB 에서 데이터를 복구 후에 db link 생성해서 운영 DB로 이동하기



[테이블 만들어 주기]

 create table scott.ctest(

  2  no number,

  3  name varchar2(10),

  4  address varchar2(10))

  5  tablespace users;



[root 돌리기 ]


begin

for i in 1..100 loop

insert into scott.ctest

values(i, dbms_random.string('a',9),

dbms_random.string('b',9));

end loop;

commit;

end;

/


[조회하기]

select count(*) from scott.ctest;

 COUNT(*)

----------

       100


[시간 조회하기]

select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;

TO_CHAR(SYSDATE,'YY

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

2015-04-05:10:54:34




SQL> truncate table scott.ctest;


테이블이 잘렸습니다.


SQL> select count(*) from scott.ctest;


  COUNT(*)

----------

         0


SQL> alter system switch logfile;


시스템이 변경되었습니다.


SQL> /


시스템이 변경되었습니다.


SQL> /


시스템이 변경되었습니다.


SQL> /


시스템이 변경되었습니다.


SQL> /


시스템이 변경되었습니다.


SQL>


[복구는 알아서 할것 ㅋㅋㅋㅋ]



[Listner 연결하기]

운영 DB 를 Client 로 만들려면 tnsnames.ora 가있어야함 


/app/oracle/product/11g/network/admin 위치에 만들어 줄것 (sample에서 복사하면 쉬움)


listener.ora (복구 Server에 대한 정보 )


tnsnames.ora (운영 DB (Clinent 쪽)에서 요청하는)




[Listener2 실행하기]

[oracle@server113 admin]$ lsnrctl start listener2


[ Clinet 에 설정된 net 서비스 실행하기]

[oracle@server113 admin]$ tnsping clonedb


[Clinet 에서 clone DB 로 연결하는 db link 생성]


SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
testdb

SQL> create database link clone_link
  2  connect to scott identified by tiger
  3  using 'clonedb';

Database link created.

[복구 서버에 접속 가능한지 테스트 하기]
SQL> select count(*) from  scott.ctest@clone_link;

  COUNT(*)
----------
       100




[원래는 없었는데]
SQL> select * from scott.ctest;

no rows selected


[복구 하기]
SQL> insert into scott.ctest
  2  select *
  3  from scott.ctest@clone_link;

100 rows created.

SQL> select count(*) from scott.ctest;

  COUNT(*)
----------
       100





□ 여러가지 짬뽕 장애





SQL> create tablespace test4

  2  datafile '/app/oracle/oradata/testdb/test04.dbf' size 10M

  3  autoextend on;



SQL> create temporary tablespace temp_test4

  2  tempfile '/app/oracle/oradata/testdb/temp_test04.dbf' size 10M

  3  autoextend on;



SQL> create user usera

  2  identified by abc123

  3  default tablespace test4

  4  temporary tablespace temp_test4;



SQL> grant connect , resource to usera;


SQL> conn usera/abc123;


USERA>create table gogak

  2  (no number ,

  3  name varchar2(10),

  4  address varchar2(20));



USERA>create table sangpum

  2  (no number,

  3  name varchar2(10),

  4  qty number);



begin

for i in 1..1000 loop

insert into gogak values(i, dbms_random.string('A',10), dbms_random.string('K',10));

end loop;

commit;

end;

/




begin 
for i in 1..1000 loop
insert into sangpum values(i, dbms_random.string('A',10), dbms_random.value(1,9));
end loop;
commit;
end;
/

USERA>select  count(*) from gogak;

  COUNT(*)
----------
      1000


USERA>select  count(*) from sangpum;

  COUNT(*)
----------
      1000

USERA>conn sys/oracle as sysdba;


SYS>select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2015-04-05:13:22:50


SYS>drop user usera cascade;


SYS>select  count(*) from gogak;
select  count(*) from gogak
                      *
ERROR at line 1:
ORA-00942: table or view does not exist


SYS>select  count(*) from sangpum;
select  count(*) from sangpum
                      *
ERROR at line 1:
ORA-00942: table or view does not exist

[여러번 수행]
SYS>alter system switch  logfile; 




[장애를 복구 후에]
[리스너 , tnsname 해서 연결후에]


[운영 서버에 지워진 다시 usera를 생성해주기]
?? 어떻게 확인할 것인가???


[db link 해주기]
SYS>create database link c2
  2  connect to usera identified by abc123
  3  using 'clonedb2';

[확인하기]
SYS>select count(*) from usera.gogak@c2;

[복구 하기 CTAS] 

SYS>create table usera.gogak
  2  as
  3  select * from usera.gogak@c2;

Table created.

SYS>create table usera.sngpum
  2  as
  3  select * from usera.sangpum@c2;



















'ORACLE > Back & Recovery' 카테고리의 다른 글

12장 RMAN(BACKUP)  (0) 2015.04.24
11장 FLASHBACK  (0) 2015.04.23
9장 무정지 상태에서 복구  (0) 2015.04.21
8장 데이터 이동하기 2 (다못함)  (0) 2015.04.21
8장 데이터 이동하기  (0) 2015.04.20
Posted by 히드라야
,







개념: 






- 사전에 close 백업 받아 놓기 



장애 상황 설정 (안꺼짐)

① archive 모드 확인 , control ,redo log , data file 같은 곳으로 

② close 백업 받기
 테이블 1개 만들고 시간확인 후 commit 시간확인 

④ drop table 해주기 



------clone DB 만들기-------

① sys 계정으로 logfile 을 archive 로 만들어 주기 

② p file을 복사하기 , dB 이름을 바꾸어주기 control 파일 경로 바꾸기 , 메모리 타겟 주석처리 

 control 파일 만들기 .dbf 복사를 해와서 SQL 만들어서 스크립트 File 만듬

   스크립트 내부는 reuse = set , resetlogs로 , DB 이름 바꾸기 , datafile, redolog 경로 바꾸기  





------clone DB 접속하기-------

 export ORACLE_SID =clonedb  후에 sqlplus / as sysdba  

⑤ 만들어 놓은 SQL 실행하기 

⑥ mount 상태에서 복구 하기 

⑦ 확인하고 


------운영 DB 로 옮기기-------

⑧ clone DB export /

⑨ 운영 DB import 

⑩ 확인


※ allter log 생김 /app/oracle/diag/rdbms/clonedb/clonedb/trace/ 

※ parameter file & sql 파일 하고 & export ORACLE_SID=  내용이 전부 동일해야함...





- 사전에 close 백업 받아 놓기 


[oracle@server113 close]$ cp -v /app/oracle/oradata/testdb/* ./20150421/



장애 상황 설정 (안꺼짐)

① archive 모드 확인 , control ,redo log , data file 같은 곳으로 

SQL> archive log list;

SQL> select name from v$datafile;

SQL> select member from v$logfile;

SQL> select name from v$controlfile;


 scott으로 테이블 1개 만들고 시간확인 후 commit 시간확인 


SQL> create table scott.abc(no number);

SQL> insert into  scott.abc values(1);

SQL> insert into  scott.abc values(2);

SQL> insert into  scott.abc values(3);
SQL> commit;
SQL> select * from scott.abc;

        NO
----------
         1
         2
         3

SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2015-04-04:10:12:25

 drop table 해주기 


SYS>drop table scott.abc;



sys 계정으로 logfile 을 archive 로 만들어 주기 

SYS>alter system switch logfile;



------clone DB 만들기-------



① p file을 복사하기 , dB 이름을 바꾸어주기 control 파일 경로 바꾸기 , 메모리 타겟 주석처리

 

[oracle@server113 dbs]$ cp inittestdb.ora  initclonedb.ora

[oracle@server113 dbs]$ vi initclonedb.ora

 19 db_name=clonedb


 24 control_files="/data2/clone_db/control01.ctl",

 25                "/data2/clone_db/control02.ctl",

 26                "/data2/clone_db/control03.ctl"


 35 #memory_target=422576128


 .dbf 복사를 해와서 testdb에서   SQL 만들어서 스크립트 File 만들어서 control 파일 만들기


[oracle@server113 20150421]$  cp /data/backup/close/20150421/*.dbf /data2/clone_db/


SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
testdb


SQL> alter database backup controlfile to trace as '/data2/clone_db/re.sql';

④ 스크립트 내부는 reuse = set , resetlogs로 , DB 이름 바꾸기 , datafile, redolog 경로 바꾸기  
[oracle@server113 clone_db]$ vi re.sql
STARTUP NOMOUNT
CREATE CONTROLFILE SET  DATABASE "CLONDB" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 (
    '/data2/clone_db/redo01_a.log',
    '/data2/clone_db/redo01_b.log'
  ) SIZE 50M BLOCKSIZE 512,
  GROUP 2 (
    '/data2/clone_db/redo02_b.log',
    '/data2/clone_db/redo02_a.log'
  ) SIZE 50M BLOCKSIZE 512,
  GROUP 3 (
    '/data2/clone_db/redo03_a.log',
    '/data2/clone_db/redo03_b.log'
  ) SIZE 50M BLOCKSIZE 512
DATAFILE
  '/data2/clone_db/system01.dbf',
  '/data2/clone_db/sysaux01.dbf',
  '/data2/clone_db/undotbs01.dbf',
  '/data2/clone_db/users01.dbf',
  '/data2/clone_db/example01.dbf',
  '/data2/clone_db/test02.dbf'
CHARACTER SET KO16MSWIN949
;

wq!




------clone DB 접속하기-------

 export ORACLE_SID =clonedb  후에 sqlplus / as sysdba  

[oracle@server113 ~]$ export ORACLE_SID=clonedb



------clone DB 접속실패의 경우 passwd 파일을 복사해준다-------
SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 5 11:14:05 2015

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

ERROR:
ORA-01031: insufficient privileges


Enter user-name: sys/oracle
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0


[oracle@server113 dbs]$ cp orapwtestdb ./orapwclonedb




[oracle@server113 clone_db]$ sqlplus / as sysdba

⑤ 만들어 놓은 SQL 실행하기

SQL> @re.sql

 

⑥ mount 상태에서 복구 하기 


SQL> recover database until time '2015-04-04:10:12:25' using backup controlfile;


ORA-00279: change 1789629 generated at 04/04/2015 09:58:32 needed for thread 1

ORA-00289: suggestion : /data2/arc2/20_1_876058156.arc

ORA-00280: change 1789629 for thread 1 is in sequence #20



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

auto

Log applied.

Media recovery complete.



⑦ reset logs 로 open 한다음 확인하고 


SQL> alter database open resetlogs;


SQL> select * from scott.abc;


        NO

----------

         1

         2

         3



------운영 DB 로 옮기기-------

⑧ clone DB export /


[oracle@server113 clone_db]$ export ORACLE_SID=clonedb


[oracle@server113 clone_db]$ exp scott/tiger file=abc.dmp tables=abc


Export: Release 11.2.0.1.0 - Production on Sat Apr 4 10:58:07 2015


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



Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning option

Export done in KO16MSWIN949 character set and AL16UTF16 NCHAR character set


About to export specified tables via Conventional Path ...

. . exporting table                            ABC          3 rows exported

Export terminated successfully without warnings.


⑨ 운영 DB import 

[oracle@server113 clone_db]$ export ORACLE_SID=testdb

[oracle@server113 clone_db]$ imp scott/tiger file=abc.dmp ignore=y


Import: Release 11.2.0.1.0 - Production on Sat Apr 4 11:00:27 2015

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


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning option

Export file created by EXPORT:V11.02.00 via conventional path
import done in KO16MSWIN949 character set and AL16UTF16 NCHAR character set
. importing SCOTT's objects into SCOTT
. importing SCOTT's objects into SCOTT
. . importing table                          "ABC"          3 rows imported
Import terminated successfully without warnings.



⑩  운영DB 에서 확인


SQL> select instance_name from v$instance;


INSTANCE_NAME

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

testdb


SQL> select * from scott.abc;


        NO

----------

         1

         2

         3








[백업에는 datafile이 없을때의 복구방법,.......]



create tablespace test03 

datafile '/app/oracle/oradata/testdb/test03.dbf' size 10M

autoextend on 

SQL> create table scott.abc2(no number) tablespace test03;

SQL> insert into scott.abc2 values(1);

SQL> insert into scott.abc2 values(2);

SQL> insert into scott.abc2 values(3);



SQL> select * from scott.abc2

  2  ;


        NO

----------

         1

         2

         3


SQL> commit

  2  ;


Commit complete.


TO_CHAR(SYSDATE,'YY

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

2015-04-04:12:35:41



SQL> drop tablespace test02 including contents and datafiles;





[sql file 만들고 실행하기]
★★★ 중요사항은 sql 파일안에 지워진 table space 경로를 지워 주어야함.





[한번 시도 해야 임시 tablespace를 만들어 줌]
SQL> recover database until time '2015-04-04:12:37:31' using backup controlfile;

ORA-00279: change 1809291 generated at 04/04/2015 12:24:49 needed for thread 1
ORA-00289: suggestion : /data2/arc2/27_1_876058156.arc
ORA-00280: change 1809291 for thread 1 is in sequence #27


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

ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to control file by media recovery
ORA-01110: data file 6: '/app/oracle/oradata/testdb/test03.dbf'


ORA-01112: media recovery not started


SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/data2/clone2/system01.dbf
/data2/clone2/sysaux01.dbf
/data2/clone2/undotbs01.dbf
/data2/clone2/users01.dbf
/data2/clone2/example01.dbf
/app/oracle/product/11g/dbs/UNNAMED00006


★★[지워진 datafile 다시만들기]

SQL> alter database create datafile '/app/oracle/product/11g/dbs/UNNAMED00006'

       as '/data2/clone2/test03.dbf';



[다시 실행]

SQL> recover database until time '2015-04-04:12:37:31' using backup controlfile;


SQL> recover database until time '2015-04-04:12:37:31' using backup controlfile;

ORA-00279: change 1809542 generated at 04/04/2015 12:34:13 needed for thread 1

ORA-00289: suggestion : /data2/arc2/27_1_876058156.arc

ORA-00280: change 1809542 for thread 1 is in sequence #27



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


Log applied.

Media recovery complete.


SQL> alter database open resetlogs;



SQL> select * from scott.abc2;


        NO

----------

         1

         2

         3


[oracle@server113 clone2]$ export ORACLE_SID=clonedb2


[oracle@server113 clone2]$ exp scott/tiger file=abc2.dmp tables=abc2


Export: Release 11.2.0.1.0 - Production on Sat Apr 4 13:03:14 2015


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



Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning option

Export done in KO16MSWIN949 character set and AL16UTF16 NCHAR character set


About to export specified tables via Conventional Path ...

. . exporting table                           ABC2          3 rows exported

Export terminated successfully without warnings.

[oracle@server113 clone2]$


[oracle@server113 ~]$ imp scott/tiger file='/data2/clone2/abc2.dmp' ignore=y


Import: Release 11.2.0.1.0 - Production on Sat Apr 4 13:21:47 2015

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


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning option


Export file created by EXPORT:V11.02.00 via conventional path

import done in KO16MSWIN949 character set and AL16UTF16 NCHAR character set

. importing SCOTT's objects into SCOTT

. importing SCOTT's objects into SCOTT

. . importing table                         "ABC2"          3 rows imported

Import terminated successfully without warnings.
















'ORACLE > Back & Recovery' 카테고리의 다른 글

11장 FLASHBACK  (0) 2015.04.23
10장 oracle net work + db link  (0) 2015.04.22
8장 데이터 이동하기 2 (다못함)  (0) 2015.04.21
8장 데이터 이동하기  (0) 2015.04.20
6장 Datafile 복구하기 2 (불완전 복구)  (0) 2015.04.16
Posted by 히드라야
,