PostgreSQL의 기본 개념

PostgreSQL의 기본개념


 오라클과 psql의 차이점 때문에 용어 선택에서 상당히 헷갈리는 부분이 존재합니다.



1) 용어 차이

 

- 오라클은 DB 엔진이 올라간 후, 인스턴스를 생성하면서 데이터베이스가 생성됩니다. 즉, 오라클에서는 하나의 인스턴스가 하나의 DB를 나타냅니다. 하나의 데이터베이스 엔진으로 여러개의 인스턴스를 생성하면 하나의 서버에 여러개의 DB를 생성 할 수 있습니다. 인스턴스 = DB의 개념이지만, RAC 환경에서는 다수의 인스턴스가 하나의 DB를 이루는 경우도 있습니다. 


- PostgreSQL에서 인스턴스란, 서버 단위의 개념입니다. 서버 단일 인스턴스라고 부르는 PostgreSQL의 인스턴스는 서버 = 인스턴스 개념입니다. 


- 오라클에서 클러스터는 RAC 환경의 공유 노드 개념입니다. 하나의 스토리지를 바라보는 여러대의 노드, 오라클 클러스터웨어인 grid instructure 를 통한 active-active의 환경을 조성하고 클러스터웨어를 통해 이루어진 공유 노드를 클러스터라고 합니다. 


- Psql에서의 클러스터는 Psql DB 집합체를 이야기 합니다. PostgreSQL은 처음 DB를 설치하면 기본적으로 설치되는 DB가 있는데, postgres database, template0, template1 생성하는데, 이 3가지의 DB 집합체를 클러스터라고 합니다.



2) 데이터베이스 구조


- PostgreSQL의 물리적 구조는 매우 단순합니다.

- Shared Memory, 적은 수의 백그라운드 프로세스, 데이터 파일로 구성되어 있습니다.



2-1) Shared Memory


2-1-1) Shared Buffer


 - Shared Buffer의 목적은 DISK I/O를 최소화 하는 것입니다.

 - 그러기 위해서는 아래 항목을 만족해야 합니다.


  ● 매우 큰 버퍼를 빠르게 엑세스해야 한다. (수백GB 단위)

  ● 많은 사용자가 동시에 접근할 때 경합을 최소화해야 한다.

  ● 자주 사용되는 블록은 최대한 오랫동안 버퍼 내에 있어야 한다.


2-1-2) WAL 버퍼


 - WAL 버퍼는 데이터베이스의 변경 사항은 잠시 저장하는 버퍼입니다.

 - WAL 버퍼 내에 저장된 내용은 정해진 시점에서 WAL 파일로 기록됩니다.

 - 백업 및 복구 관점에서 WAL 파일은 매우 중요하고, 오라클에서 Redo의 개념과 비슷한 부분이 있습니다.



2-2) 프로세스 유형


 - Postmaster (Daemon) 프로세스

 - Background 프로세스

 - Backend 프로세스

 - Client 프로세스


2-2-1) Postmaster 프로세스


 - PostgreSQL를 구동 할 때 가장 먼저 시작되는 프로세스 입니다.

 - 초기 기동시 복구 작업, Shared Memory 초기화 작업, 백그라운드 프로세스 구동작업을 수행합니다

 - 클라이언트 프로세스의 접속 요청이 있을 때 Backend 프로세스를 생성합니다.


2-2-2) Background 프로세스


 - Autovacuum launcher를 제외하면, 오라클과 비슷한 백그라운드 프로세스들이 존재합니다.


 ● logger : 에러메세지를 로그 파일에 기록한다.

 ● checkpointer : 체크포인트 발생시, dirty 버퍼를 파일에 기록한다.

 ● writer : 주기적으로 dirty 버퍼를 파일에 기록한다.

 ● wal writer : WAL버퍼 내용을 WAL 파일에 기록한다.

 ● autovacuum launcher : Vacuum이 필요한 시점에 autovacuum worker를 fork 한다.

 ● archiver : Archive Log 모드일 때, WAL 파일을 지정된 디렉토리에 복사한다.

 ● stats collector : 세션 수행 정보 (pg_stat_activity)와 테이블 사용 통계 정보 (pg_stat_all_tables)와 같은 DBMS 사용 통계 정보를 수집한다.


2-2-3) Backend 프로세스


 - Backend 프로세스의 최대 개수는 max_connections 파라미터로 설정 가능하며, 기본값은 100입니다.

 - Backend 프로세스는 사용자 프로세스의 쿼리 요청을 수행한 후, 결과를 전송하는 역할을 수행합니다.

 - 쿼리 수행에 몇가지 메모리 구조가 필요한데, 이 것을 통칭해서 로컬 메모리라고 합니다.

 

 - 로컬 메모리 관련 주요 파라미터


 ◈ work_mem 파라미터

  - 정렬 작업, Bitmap 작업, 해시 조인과 Merge조인 작업시에 사용되는 공간. 기본값은 4MB

 

 ◈ maintenance_work_mem 파라미터

  - Vacuum 및 create index 작업 시에 사용되는 공간. 기본값은 64MB


 ◈ temp_buffers 파라미터

  - Temporary 테이블을 저장하기 위한 공간. 기본값은 8MB



 



'PostgreSQL' 카테고리의 다른 글

PostgreSQL의 기본 개념  (0) 2018.12.12
pgadmin4 설치  (0) 2018.12.03
PostgreSQL 11 설치  (0) 2018.12.03
PostgreSQL 백업 및 복구  (0) 2018.11.24
PostgreSQL 소스 코드로 설치  (0) 2018.04.03
PostgreSQL 버그 리포팅 가이드 라인  (0) 2018.04.03

pgadmin4 설치

pgadmin 은 웹에서 postgresql을 관리 해줄수 있게 해주는 관리 툴입니다.

오라클 EM 같은거라고 보시면 됩니다.



SELINUX 해제


setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config



Yum으로 pgadmin 설치


# yum install  https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-redhat96-9.6-3.noarch.rpm -y

# yum install epel-release


# yum install pgadmin4



pgadmin4 환경설정


# vi /usr/lib/python2.7/site-packages/pgadmin4-web/config_distro.py

LOG_FILE = '/var/log/pgadmin4/pgadmin4.log'

SQLITE_PATH = '/var/lib/pgadmin4/pgadmin4.db'

SESSION_DB_PATH = '/var/lib/pgadmin4/sessions'

STORAGE_DIR = '/var/lib/pgadmin4/storage'



# python /usr/lib/python2.7/site-packages/pgadmin4-web/setup.py

NOTE: Configuring authentication for SERVER mode.


Enter the email address and password to use for the initial pgAdmin user account:


Email address: <이메일 주소>

Password: <패스워드>

Retype password: <패스워드 확인>

pgAdmin 4 - Application Initialisation

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



# mkdir -p /var/lib/pgadmin4/

# mkdir -p /var/log/pgadmin4/


# chown -R apache:apache /var/lib/pgadmin4

# chown -R apache:apache /var/log/pgadmin4


# chcon -R -t httpd_sys_content_rw_t "/var/log/pgadmin4/"

# chcon -R -t httpd_sys_content_rw_t "/var/lib/pgadmin4/"




virtual host 만들기


# vi /etc/httpd/conf.d/pgadmin4.conf


<VirtualHost *>

    ServerName 192.168.0.9/pgadmin


    WSGIDaemonProcess pgadmin processes=1 threads=25

    WSGIScriptAlias / /usr/lib/python2.7/site-packages/pgadmin4-web/pgAdmin4.wsgi

 

    <Directory "/usr/lib/python2.7/site-packages/pgadmin4-web/">

        WSGIProcessGroup pgadmin

        WSGIApplicationGroup %{GLOBAL}

        Require all granted

    </Directory>

</VirtualHost>



# apachectl configtest

Syntax OK



# systemctl restart httpd


# setsebool -P httpd_can_network_connect 1


# firewall-cmd --permanent --add-service=http

# firewall-cmd --reload

success



웹 브라우저에서 192.168.0.9/pgadmin 으로 접속해보면 아래와 같은 화면이 나오고 위에서 입력한 메일 주소로 로그인이 가능합니다.




'PostgreSQL' 카테고리의 다른 글

PostgreSQL의 기본 개념  (0) 2018.12.12
pgadmin4 설치  (0) 2018.12.03
PostgreSQL 11 설치  (0) 2018.12.03
PostgreSQL 백업 및 복구  (0) 2018.11.24
PostgreSQL 소스 코드로 설치  (0) 2018.04.03
PostgreSQL 버그 리포팅 가이드 라인  (0) 2018.04.03

PostgreSQL 11 설치

Linux Cent OS 7.5 x64


PostgreSQL 11



우선 yum repository를 설치합니다. 


# yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm



그 후에 yum으로 postgresql을 설치 합니다.


# yum -y install postgresql11-server postgresql11



설치하고 나면 postgres 라는 계정이 생성됩니다.


# su - postgres

-bash-4.2$


프로토콜이 보기 불편하니 변경해줍니다.


$ vi .bash_profile


export PS1="[\u@\h:\w]\\$ "   

추가


root에서 DB를 서비스에 init 합니다.


[root@psql-db ~]# /usr/pgsql-11/bin/postgresql-11-setup initdb

Initializing database ... OK


systemctl 로 DB를 구동하고, 서버 실행시 자동 실행되게 등록해줍니다.


[root@psql-db ~]# systemctl start postgresql-11

[root@psql-db ~]# systemctl enable postgresql-11

Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-11.service to /usr/lib/systemd/system/postgresql-11.service.

[root@psql-db ~]#


방화벽에 PostgreSQL을 차단하지 않게 정책을 추가해줍니다.


[root@psql-db ~]# firewall-cmd --add-service=postgresql --permanent

success

[root@psql-db ~]# firewall-cmd --reload

success

[root@psql-db ~]#



PostgreSQL의 conf 파일은 /var/lib/pgsql/11/data/postgresql.conf 있습니다.


vi로 열어서 listener  설정을 해줍니다.



listen_addresses = '192.168.0.9'



remote 접속 허용 설정을 해줍니다.


[root@psql-db ~]# vi /var/lib/pgsql/11/data/pg_hba.conf


# Accept from anywhere  (아무나 다)

host all all 0.0.0.0/0 md5


or


# Accept from trusted subnet (특정 대역대만)

host all all 192.168.18.0/24 md5



예>


# IPv4 local connections:

host    all             all             0.0.0.0/0               md5

#host    all             all             127.0.0.1/32            ident


Postgres 재구동


# systemctl restart postgresql-11



TEST 유저와 TEST DB를 만들고 접속 해봅니다.


[postgres@psql-db:~]$ createuser test_user

[postgres@psql-db:~]$ createdb test_db -O test_user

[postgres@psql-db:~]$ psql -c "alter user test_user with password 'test'"


권한을 주기위해 admin 유저로 접속을 합니다. postgres/postgres


[postgres@psql-db:~]$ psql -U postgres -d postgres

psql (9.2.24, server 11.1)

WARNING: psql version 9.2, server version 11.0.

         Some psql features might not work.

Type "help" for help.


postgres=# 

postgres=# 

postgres=# grant all privileges on database test_db to test_user;

GRANT

postgres=# \q


터미널에서 TEST DB에 접속


[postgres@psql-db:~]$ psql -U test_user -h 192.168.0.9 -d test_db

psql (9.2.24, server 11.1)

WARNING: psql version 9.2, server version 11.0.

         Some psql features might not work.

Type "help" for help.


test_db=>


설치가 완료 되었습니다.

'PostgreSQL' 카테고리의 다른 글

PostgreSQL의 기본 개념  (0) 2018.12.12
pgadmin4 설치  (0) 2018.12.03
PostgreSQL 11 설치  (0) 2018.12.03
PostgreSQL 백업 및 복구  (0) 2018.11.24
PostgreSQL 소스 코드로 설치  (0) 2018.04.03
PostgreSQL 버그 리포팅 가이드 라인  (0) 2018.04.03

PostgreSQL 백업 및 복구

DATABASE 및 TABLE 백업 / 복구



백업


superuser 계정으로 접속



문법>


pg_dump [DATABASE명] -t [TABLE명] > [저장 될 DUMP FILE명]



예)


[postgres@test data]$ pg_dump pgsqldb -t tb_test > PGSQL_tb_test_20090830.dump

[postgres@test data]$



복구


superuser 계정으로 접속



문법>


psql -f [FILE명] [DATABASE명]



예)

[postgres@test data]$ psql -f PGSQL_tb_test_20090830.dump pgsqldb

SET

SET

SET

SET

SET

SET

SET

SET

CREATE TABLE

ALTER TABLE

[postgres@test data]$




전체 DATABASE 백업 / 복구



백업


superuser 계정으로 접속



문법>


pg_dumpall > [저장 될 DUMP FILE명]



예)


[postgres@test data]$ pg_dumpall > PGSQL_all_20090830.dump

[postgres@test data]$



복구


superuser 계정으로 접속



문법>


psql -f [FILE명] template1




예)


[postgres@test data]$ psql -f PGSQL_all_20090830.dump template1

SET

SET

SET

CREATE TABLE

ALTER TABLE

...

[postgres@test data]$

'PostgreSQL' 카테고리의 다른 글

pgadmin4 설치  (0) 2018.12.03
PostgreSQL 11 설치  (0) 2018.12.03
PostgreSQL 백업 및 복구  (0) 2018.11.24
PostgreSQL 소스 코드로 설치  (0) 2018.04.03
PostgreSQL 버그 리포팅 가이드 라인  (0) 2018.04.03
PostgresSQL 이란?  (0) 2018.04.03

Netbackup 연동 RMAN 복원 테스트

현업에서는 서버를 관리하는데 있어서 대부분 백업 솔루션이 들업갑니다.


중소규모의 회사나 서버가 몇대 없는 회사의 경우, RMAN 스크립트를 만들어서 crontab 이나 작업스케줄러에 등록하여 백업을 받기도 하지만, 대규모의 기업이나 많은 수의 서버를 가진 업체의 경우 Netbackup 같은 백업 솔루션이 들어갑니다.


백업 솔루션은 Netbackup만 있는 것은 아니고 많은 회사들이 출시한 다양한 제품이 있지만, 국내에서 가장 많이 사용하는 백업 솔루션은 Netbackup 입니다. 백업 솔루션은 Acronis 같은 제품도 있고, 다양하게 있습니다.


Netbackup 같은 백업 솔루션은 단순 DB 백업 뿐 아니라 서버 자체를 백업 한다거나 다른 어플리케이션 백업도 가능합니다.

그렇기 때문에 Netbackup 엔지니어들은 Netbackup 설치나 OS 복구 정도는 할 수 있습니다. 


하지만, 오라클은 DB를 Netbackup을 이용해서 백업 할 줄 알아도, DB를 복구 하는 방법을 모르는 경우가 대부분 입니다. Netbackup을 다루는 회사마다 복구 메뉴얼이 있고, 메뉴얼 대로 복구 하는 경우가 많지만, 왜 그렇게 복구를 해야 하는지?, 복구하다 막혔을때 어떻게 해야 하는지 모르는 경우가 많아 DB 엔지니어나 DBA의 도움을 필요로 합니다. Netbackup 엔지니어들은 오라클을 집중적으로 공부한 경우가 많지 않기 때문이죠.


백업 계약이라는 것은 백업만 해주는게 아니고 장애시 복구가 포함 되는 것인데 백업 엔지니어가 DBA가 없으면 복구를 못하는 경운가 많다는 것이죠. 개인적으로 봤을때는 말이 안되는 상황이라고 봅니다. 업체측에서 restore 까지만 계약 되어 있다고 하는 경우도 있는데, 일반적으로 백업 복구는 recovery 후 시스템 정상화까지가 복구입니다. 


DBA와 백업 엔지니어가 협력해야 하는게 맞고, 서로서로 좋은게 좋은것이지만, 기본적으로 혼자 복구 할 줄 알아야 한다고 생각합니다. 어떤 회사는 들어가보면 DB는 있는데 DBA도 없고, DB 유지보수 계약도 없는 경우도 많거든요.




시나리오


● RAC 2노드 (ASM) -> Single DB (ASM Standalone)


 - RAC는 라이센스도 비싸고, 장비 세팅이나 준비사항이 많습니다. 

   그렇기 때문에 DR서버를 구축하거나 복구를 위한 테스트 서버를 RAC로 구축하는것은 낭비입니다.

 - 오라클 DB의 버전은 동일하게 맞춥니다. 원본이 11.2.0.4 라면 복구도 11.2.0.4

 - 파일 시스템은 일반 파일시스템이나 Raw Device 이어도 상관 없지만, 복구 과정 중에 Rename 작업이 필요하며, 

   ASM의 경우는 Rename 작업이 필요가 없습니다.

 - Netbackup에서 원본 서버의 RMAN 백업과 Archive 파일을 백업 받습니다.

 - 복구 서버에도 Netbackup 에이전트를 설치하고, RMAN의 저장 경로를 Netbackup으로 인식 시켜줍니다.



1. pfile 설정


 - pfile을 Netbackup에 있는 RMAN 백업에서 내려 받아도 상관 없지만, 그냥 원본에서 spfile을 pfile로 백업해서 드래그로 긁어 오는게 편합니다.


 원본서버

 SQL> create pfile='init<SID>.ora' from spfile;


 $ORACLE_HOME/dbs 밑에 가면 init<SID>.ora 파일이 생성 되어 있는데, 복구서버의 동일한 디렉토리에 복사해 주거나, vi로 만들어서 안의 내용을 복사해서 붙여 넣습니다.


rac2.__db_cache_size=1526726656

rac1.__db_cache_size=1459617792

rac2.__java_pool_size=16777216

rac1.__java_pool_size=16777216

rac2.__large_pool_size=33554432

rac1.__large_pool_size=33554432

rac1.__oracle_base='/app/oracle'#ORACLE_BASE set from environment

rac2.__oracle_base='/app/oracle'#ORACLE_BASE set from environment

rac2.__pga_aggregate_target=1258291200

rac1.__pga_aggregate_target=1342177280

rac2.__sga_target=2097152000

rac1.__sga_target=2013265920

rac2.__shared_io_pool_size=0

rac1.__shared_io_pool_size=0

rac2.__shared_pool_size=486539264

rac1.__shared_pool_size=469762048

rac2.__streams_pool_size=0

rac1.__streams_pool_size=0

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

*.audit_trail='db'

*.cluster_database=true

*.compatible='11.2.0.4.0'

*.control_files='+DATA/rac/controlfile/current.260.923661671','+RECO/rac/controlfile/current.256.923661671'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_name='rac'

*.db_recovery_file_dest='+RECO'

*.db_recovery_file_dest_size=7423918080

*.diagnostic_dest='/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=racXDB)'

rac1.instance_number=1

rac2.instance_number=2

*.log_archive_dest_1='LOCATION=/archive'

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

*.memory_target=3348103168

*.open_cursors=300

*.processes=350

*.remote_listener='rac-cluster-scan:1521'

*.remote_login_passwordfile='exclusive'

*.sessions=390

rac2.thread=2

rac1.thread=1

rac2.undo_tablespace='UNDOTBS2'

rac1.undo_tablespace='UNDOTBS1'

 


파라미터 파일을 수정해야 합니다.

rac 관련되 부분을 삭제 혹은 주석 처리하고, cluster_database는 ture에서 false로 변경해 줍니다.


수정 후


rac.__db_cache_size=1459617792

rac.__java_pool_size=16777216

rac.__large_pool_size=33554432

rac.__oracle_base='/app/oracle'#ORACLE_BASE set from environment

rac.__pga_aggregate_target=1342177280

rac.__sga_target=2013265920

rac.__shared_io_pool_size=0

rac.__shared_pool_size=469762048

rac.__streams_pool_size=0

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

*.audit_trail='db'

*.cluster_database=false

*.compatible='11.2.0.4.0'

*.control_files='+DATA/rac/controlfile/current.260.923661671'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_name='rac'

*.db_recovery_file_dest='+DATA'

*.db_recovery_file_dest_size=7423918080

*.diagnostic_dest='/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=racXDB)'

rac.instance_number=1

#rac2.instance_number=2

*.log_archive_dest_1='LOCATION=/archive'

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

*.memory_target=3348103168

*.open_cursors=300

*.processes=350

#*.remote_listener='rac-cluster-scan:1521'

*.remote_login_passwordfile='exclusive'

*.sessions=390

#rac2.thread=2

rac.thread=1

#rac2.undo_tablespace='UNDOTBS2'

rac.undo_tablespace='UNDOTBS1'


수정하고 diag 경로를 생성하고, archive 경로가 맞는지 확인해줍니다.


$ mkdir -p /app/oracle/admin/rac/adump

$ mkdir -p /archive

# chown oracle.oinstall /archive


수정이 완료 되면 DB가 nomount 상태까지 올라갑니다.


$ sqlplus / as sysdba

SQL> startup nomount;


그러면 DB쪽은 Restore 준비가 끝난 상태입니다.



2. Netbackup 에서 Controlfile 내려 받기


 - DB가 nomount 상태가 되면 Netbackup 에이전트 설치 및 Netbackup RMAN 연동이 가능합니다. (Netbackup 엔지니어 작업)

 - Netbackup과 RMAN이 연결되면, RMAN에서 list backup 명령시 백업 파일들이 나옵니다.


RMAN> 


RUN {

ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

SEND 'NB_ORA_SERV=<넷백업 서버명>, NB_ORA_CLIENT=<복구서버 클라이언트 명>';

RESTORE CONTROLFILE FROM 'ctrl_dracDB_udnrljheg_s439_p1_t928630224';

RELEASE CHANNEL ch00;

}


빨간색으로 된 부분은 콘트롤 파일의 백업인데, 백업마다 이름이 다르고, 서버마다 다르니 맞는 걸 찾아서 복원하면 됩니다.


콘트롤 파일이 복원디면 DB mount가 가능해집니다.


RMAN> alter database mount;



3. Restore


 - controlfile이 복원되면 restore가 가능해집니다.

 - ASM의 경우 datafile의 끝에 랜덤 숫자로 고유번호가 붙는데, 원본 DB와 복구DB의 번호가 다릅니다.

 - Restore 시 바뀐 번호로 자동 적용됩니다.


restore 명령을 실행 해봅니다.


RMAN>


RUN {

ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

SEND 'NB_ORA_SERV=<넷백업 서버명>, NB_ORA_CLIENT=<복구서버 클라이언트 명>';

RESTORE DATABASE;                                   

RELEASE CHANNEL ch00;

}


그러면 진행 상황이 나오며, restore가 진행됩니다.


Starting restore at 23-OCT-16

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 00001 to +DATA/rac/datafile/system.256.923661571

channel ORA_DISK_1: restoring datafile 00002 to +DATA/rac/datafile/sysaux.257.923661571

channel ORA_DISK_1: restoring datafile 00003 to +DATA/rac/datafile/undotbs1.258.923661573

channel ORA_DISK_1: restoring datafile 00004 to +DATA/rac/datafile/users.259.923661573

channel ORA_DISK_1: restoring datafile 00005 to +DATA/rac/datafile/example.264.923661707

channel ORA_DISK_1: restoring datafile 00006 to +DATA/rac/datafile/undotbs2.265.923661973

channel ORA_DISK_1: restoring datafile 00007 to +DATA/rac/datafile/test01.269.924548909

channel ORA_DISK_1: reading from backup piece /work/rman/0qrijlsp_1_1_20161017.bkp

channel ORA_DISK_1: piece handle=/work/rman/0qrijlsp_1_1_20161017.bkp tag=TAG20161017T161729

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete, elapsed time: 00:18:05

Finished restore at 23-OCT-16


RMAN>



4. Recovery


 - recover database 명령을 날려보면 필요한 archive log 파일 리스트가 나옵니다.


RMAN> recover database;


Starting recover at 23-OCT-16
using channel ORA_DISK_1

starting media recovery

channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=2 sequence=473
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=239
channel ORA_DISK_1: reading from backup piece /work/rman/0srijm73_1_1_20161017.bkp
channel ORA_DISK_1: ORA-19870: error while restoring backup piece /work/rman/0srijm73_1_1_20161017.bkp
ORA-19504: failed to create file "/archive/arch_rac_2_473_923661675.arc"
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 13: Permission denied
Additional information: 1

failover to previous backup
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 10/23/2016 17:28:31
RMAN-20506: no backup of archived log found
RMAN-06053: unable to perform media recovery because of missing log
RMAN-06025: no backup of archived log for thread 1 with sequence 239 and starting SCN of 4539696 found to restore
RMAN-06025: no backup of archived log for thread 2 with sequence 473 and starting SCN of 4539693 found to restore
RMAN-06025: no backup of archived log for thread 1 with sequence 238 and starting SCN of 4539695 found to restore
RMAN-06025: no backup of archived log for thread 2 with sequence 472 and starting SCN of 4539692 found to restore
RMAN-06025: no backup of archived log for thread 1 with sequence 237 and starting SCN of 4539694 found to restore
RMAN-06025: no backup of archived log for thread 2 with sequence 471 and starting SCN of 4539691 found to restore

thread 1은 1번 노드, thread 2는 2번 노드의 아카이브 파일입니다.
빨간색으로 된 부분에서 sequence 넘버를 잘 보면 맨 위에가 최신이고, 아래쪽이 오래된 시퀀스 넘버입니다.
해당 시퀀스 번호를 가진 아카이브 로그가 필요하다는 뜻 입니다.

그러면 Netbackup에서 아카이브 로그를 복구 합니다.

RUN {
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';
SEND 'NB_ORA_SERV=<넷백업 서버명>, NB_ORA_CLIENT=<복구서버 클라이언트 명>';
RESTORE ARCHIVELOG FROM SEQUENCE 237 UNTIL SEQUENCE 239 THREAD 1;
RESTORE ARCHIVELOG FROM SEQUENCE 471 UNTIL SEQUENCE 473 THREAD 2;
RELEASE CHANNEL ch00;
}


그 후에

RMAN> recover database;

RMAN> alter database open resetlogs; 

하면 완료가 됩니다.


티스토리 툴바