오늘은 정신없이 Error수정을 하다가 강의를 들으러 왔습니다. 고객사에 문제가 터졌는데 전에 원활하게 해결이 되지 않았는지 외근나간 다른 직원에게 확인을 하지 못하여 내일 업무를 바로 처리하는 것을 예정으로 하고 급하게 강의를 들으러 왔습니다.
늦게 온 만큼 자리를 잘 잡지 못하여 내일부터는 가능하면 laptop을 들고 와서 강의를 수강할 수 있도록 하는것이 좋을 것 같습니다.
강의 전 다른 일행분들을 위해 자리를 옮겨서 내일부터는 노트북을 들고오도록 해야겠습니다.
첫날 첫시간은 DB backup 및 Recovery에 관한 내용으로 교재의 내용을 앞부분부터 차근차근 진행하셨습니다.
각종 DB 실패의 원인 및 해결 방법에 관한 내용이었습니다. 그리고 DB실습을 위한 환경구축을 위해 VM ware설치 및 리눅스 시작까지 마쳤습니다.
======================================= 2 =====================================
리눅스 안에서 터미널을 열어서 DB를 시작하였습니다.
그 후에는 접속 프로그램으로 사용할 Putty 설정을 하였습니다. 이번 시간에는 처음으로 접속기의 색을 변경하는 방법도 가르쳐주셨습니다.
위의 화면에서 블럭처리 한 부분은 스크롤을 내릴수있는 출의 최대치라고 생각하시면 됩니다. 기본값이 200으로 되어있었는데 그정도 양으로는 부족할 수 있다고 하셨습니다.
이번에는 저도 하늘색 바탕의 설정하나와 기본 흰색 설정 2가지를 미리 저장을 해 두었습니다.
VM 내부의 Linux의 터미널로 작업을 하는 경우는 터미널에서 . .bash_profile을 입력하여 주어 환경변수를 수동으로 컴파일 해 줘야 한다고 설명을 해 주셨습니다.
위 작업은 편리한 사용을 위함이라고 설명을 해 주셨습니다.
저의 경우는 커리큘럼에 맞게 벌써 4번째 DB수업을 듣는 것이지만 다른 수강생 특히 이번 DB강의가 처음인 분들도 계셔서 이 강의에 맞는 부분으로만 이론 기초 설명을 진행한다고 하셨습니다.
DB관리 계정은 SYS 와 SYSTEM 이 있습니다.
sys계정으로 접속하는 것은 조금 특이한 방법이 있는것을 알고는 있었지만 conn / as sysdba로 바로 로긴이 가능 한 것은 오늘에서야 알게 되었습니다.
DB구조를 나타내는 그림에서 이번 DB백업과 복구에 관련이 깊은 Redo log buffer에 관해 책 내용을 설명 해 주셨습니다.
select * from v$datafile;
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/example01.dbf
조회를 해 보니 아까 VM ware에서 확인한 Datafile이 있는것을 확인할 수 있습니다.
SQL> select * from v$logfile;
GROUP# STATUS TYPE
---------- ------- -------
MEMBER
--------------------------------------------------------------------------------
IS_
---
3 ONLINE
/u01/app/oracle/oradata/orcl/redo03.log
NO
2 ONLINE
/u01/app/oracle/oradata/orcl/redo02.log
NO
1 ONLINE
/u01/app/oracle/oradata/orcl/redo01.log
NO
위의 결과는 Redo log파일을 조회한 결과입니다.
이번에는 실습을 하는 파일을 Text파일로 주시지는 않으시고 인쇄만 해서 주셨습니다. 직접 타자를 쳐서 실습을 하게 만드신 것 같은데 4번의 강의를 들으면서 계속 다른 방식으로 강의를 하시는 것이 흥미롭기도 하고 개인적으로는 직접 손으로 실습을 해 보는것이 더 도움이 된다고 생각을 하지만 지난 실습을 txt파일에서 복사 붙여넣기만 하는것이 많이 편해진 것인지 직접 타자를 치는게 달갑지만은 않지만 더 기억에 남을 것 같습니다.
쉬는시간 2장의 실습을 진행해보겠습니다.
1. DB에서 모든 DBfile의 이름을 찾는데 사용하는 v$뷰를 질의하시오.
SQL>
Select name FROM v$datafile;
현장감 있는 실습 1의 결과입니다. 결과가 깔끔한 경우에는 추후에는 text형식으로 붙여넣도록 하겠습니다.
2. 현재 온라인 Redo log 그룹과 데이터베이스에 있는 모든 redo log 파일의 이름을 찾는데 사용하는 V$뷰를 질의하시오.
SQL> SELECT group#, status FROM v$log;
GROUP# STATUS
---------- ----------------
1 INACTIVE
2 INACTIVE
3 CURRENT
3. DB에 있는 모든 컨트롤파일의 이름을 찾는데 사용하는 V$뷰를 질의하십시오.
SQL> SELECT name FROM v$controlfile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/flash_recovery_area/orcl/control02.ctl
4. DB이름을 찾는데 사용하는 V$뷰를 질의하시오
SQL> SELECT name FROM v$database;
NAME
---------
ORCL
5. 디스크에 쓰여지기 전에 메모리에 복구정보를 버퍼링하는 SGA의 메모리영역을 구성하는 초기화 매매개변수는 무엇입니까?
LOG_BUFFER
6. 대용량 풀은 무엇이고 언제 사용되며, 이것을 구성하는 초기화 매개변수는 무엇입니까?
대용량 풀이란 IO 슬레이브가 필요한 경우나 Recovery Manager를 위해 정보를 버퍼링하는데 사용될 수 있는 SGA의 한 영역입니다. 대용량 풀은 RMAN을 사용할 때 백업 및 복원 속도와 효율성을 향상시킵니다.
LARGE_POOL_SIZE 매개변수는 SGA에서 할당되는 바이트수를 지정합니다.
====================================== 3 ======================================
실습을 확인하셨고 V$LOG에 대한 설명을 추가로 해주셨습니다.
SQL> SELECT * FROM v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------------- ------------- --------- ------------ ---------
1 1 4 52428800 512 1 NO
INACTIVE 821270 29-JAN-14 841850 29-JAN-14
2 1 5 52428800 512 1 NO
INACTIVE 841850 29-JAN-14 867857 15-FEB-16
3 1 6 52428800 512 1 NO
CURRENT 867857 15-FEB-16 2.8147E+14
책 21페이지와 함께 보아야 할 것 같습니다. 현재 실습환경을 그림으로 표현해 준 그림이 있으며 그 내용은 위의 SQL을 조회한 내용과 같습니다.
RAC는 instance별로 Redo log 그룹을 관리해야 한다고 설명을 해 주셨습니다. 그것을 Thread를 만들어 관리합니다. 위의 조회 내용에 THREAD#가 1만 있습니다. 그 이유는 RAC와 같지 않기 때문입니다.
Log writer가 redo log파일에 기록을 합니다. 다 기록을 하면 다른 그룹에 자동적으로 기록을 합니다. 이 과정을 Log switch라고 합니다.
SQL> alter system switch logfile;
System altered.
SQL> SELECT * FROM v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------------- ------------- --------- ------------ ---------
1 1 7 52428800 512 1 NO
CURRENT 871704 15-FEB-16 2.8147E+14
2 1 5 52428800 512 1 NO
INACTIVE 841850 29-JAN-14 867857 15-FEB-16
3 1 6 52428800 512 1 NO
ACTIVE 867857 15-FEB-16 871704 15-FEB-16
한 그룹을 쓰고 다음 정보를 쓸 때 Log 그룹이 생기고 위의 작업은 수동으로 Log Switch를 시킨 경우입니다.
크기는 50MB정도 되 보입니다. memeber가 전부 1개씩 있습니다.
FIRST_CHANGE# FIRST_TIM
871704 15-FEB-16
SQL> SELECT current_scn FROM v$database;
CURRENT_SCN
-----------
871900
시간이라는 개념과 SCN(System Change Number)중 SCN이 더 정확합니다. 시간을 정확하게 표현하는 것 보다는 SCN을 정확하게 표현하기 쉽습니다. 이것은 인터넷 쇼핑의 주문시간과 주문번호에 비유하여 생각하시면 더 이해하기 쉬울 것 같습니다. SCN은 DB에서는 시간과 같은 개념입니다. DB의 시간은 OS의 시간을 따라갑니다. 따라서 OS의 시간을 변경하는 경우 DB에 시간이 중복되는 값이 생길 수 있습니다. 하지만 SCN은 중복될 경우가 없기 때문에 시간보다 더 정확하게 각각을 구분할 수 있습니다.
FIRST CHANGE와 NEXTCHANGE를 비교하여 시간의경과를 확인할 수 있습니다.
2장 실습 계속
실습 8.
이중화를 할 때
SQL> alter database add logfile member
2 '/u01/app/oracle/oradata/orcl/redo01b.log' to group 1;
Database altered.
SQL> alter database add logfile member
2 '/u01/app/oracle/oradata/orcl/redo02b.log' to group 2;
Database altered.
SQL> alter database add logfile member
2 '/u01/app/oracle/oradata/orcl/redo03b.log' to group 3;
Database altered.
책에서와 달리 하나하나 적용을 하였습니다. 책과 같이 쉼표로 구분하여 member를 처리할 수 있습니다.
실습 9.
다시 조회를 해 보면 아래와 같습니다
SQL> SELECT member FROM v$logfile;
MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/redo03.log
/u01/app/oracle/oradata/orcl/redo02.log
/u01/app/oracle/oradata/orcl/redo01.log
/u01/app/oracle/oradata/orcl/redo01b.log
/u01/app/oracle/oradata/orcl/redo02b.log
/u01/app/oracle/oradata/orcl/redo03b.log
6 rows selected.
굵게 처리를 한 부분이 이중화를 하여 생성한 것입니다.
SQL> SELECT * FROM v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------------- ------------- --------- ------------ ---------
1 1 7 52428800 512 2 NO
CURRENT 871704 15-FEB-16 2.8147E+14
2 1 5 52428800 512 2 NO
INACTIVE 841850 29-JAN-14 867857 15-FEB-16
3 1 6 52428800 512 2 NO
INACTIVE 867857 15-FEB-16 871704 15-FEB-16
다중화가 된 것을 위의 붉은색 부분을 통해 확인할 수 있습니다.
실습 7번의 내용은 추후에 나오면 설명을 해 준다고 하셨습니다.
----------실습은 이상으로 마치고 계속 이론 내용수업을 진행하셨습니다 ----------
다중화된 Control file을 설명해 주셨습니다.
SQL> SELECT * FROM v$controlfile;
STATUS
-------
NAME
--------------------------------------------------------------------------------
IS_ BLOCK_SIZE FILE_SIZE_BLKS
--- ---------- --------------
/u01/app/oracle/oradata/orcl/control01.ctl
NO 16384 594
/u01/app/oracle/flash_recovery_area/orcl/control02.ctl
NO 16384 594
control file을 조회해보면 위와 같습니다.
다중화는 2개정도가 적당합니다.
실습을 위해 2번째의 control file을 없애고 다시 다중화 해 보겠습니다.
SQL> show parameter control_files
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string /u01/app/oracle/oradata/orcl/c
ontrol01.ctl, /u01/app/oracle/
flash_recovery_area/orcl/contr
ol02.ctl
아래의 SQL은 경로명이 틀리지 않도록 해야합니다.
SQL> ALTER SYSTEM SET
2 control_files='/u01/app/oracle/oradata/orcl/control01.ctl'
3 scope=spfile;
System altered.
그리고 DB를 내립니다.
SQL> shutdown immediate
Database closed.
Database dismounted.
그리고 다시 DB를 올리면
SQL> startup
ORACLE instance started.
Total System Global Area 849530880 bytes
Fixed Size 1339824 bytes
Variable Size 511708752 bytes
Database Buffers 331350016 bytes
Redo Buffers 5132288 bytes
Database mounted.
Database opened.
SQL> show parameter control_files
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string /u01/app/oracle/oradata/orcl/c
ontrol01.ctl
조회해보면 1개로 줄어든 것을 확인할 수 있습니다
다중화는 다른 디스크에 다른 경로면에 해 주는것이 좋습니다. 아래에서는 실습을 편하게 하기 위해서 동일한 경로에 진행을 할 예정입니다.
SQL> ALTER SYSTEM SET
2 control_files='/u01/app/oracle/oradata/orcl/control01.ctl',
3 '/u01/app/oracle/oradata/orcl/control02.ctl'
4 scope=spfile;
System altered.
(실습중 DB를 내리기 전에 위의 문장이 잘못되있을 경우 다시 실행하시면 됩니다.)
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
Control 파일은 자동으로 복사가 되지 않아 OS명령어로 복사를 해 줘야합니다.
exit하여
[oracle@ocpdba ~]$ cd /u01/app/oracle/oradata/orcl/
경로를 옮겨 아래의 명령을 실행하여 복사를 하고
[oracle@ocpdba orcl]$ cp control01.ctl control02.ctl
[oracle@ocpdba orcl]$ ls
control01.ctl redo01b.log redo02.log sysaux01.dbf undotbs01.dbf
control02.ctl redo01.log redo03b.log system01.dbf users01.dbf
example01.dbf redo02b.log redo03.log temp01.dbf
[oracle@ocpdba orcl]$
확인 후 DB를 시작합니다.
SQL> startup
ORACLE instance started.
Total System Global Area 849530880 bytes
Fixed Size 1339824 bytes
Variable Size 511708752 bytes
Database Buffers 331350016 bytes
Redo Buffers 5132288 bytes
Database mounted.
Database opened.
다시 조회를 해 보면 아래의 02번 파일 이 생성된 것을 확인할 수 있습니다.
SQL> SELECT name FROM v$controlfile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/oradata/orcl/control02.ctl
백업과 복구에서 안정하게 유지를 하기 위해 하는 작업 4가지 중 2가지를 오늘 해 보았습니다. 그 2가지는 Redo log의 다중화와 Control file의 다중화를 하였습니다.
scope은 Memory, both, spfile이 있습니다.
Q&A
Q . spfile은 무엇입니까?
A.
Alter system set p_name=values scope=both;
는
Alter system set p_name=values;
와 같습니다.
both는 Memory와 spfile을 같이 바꾸는 것 입니다.
Alter system set p_name=values scope=memory;
위는 동적인 변경이고 Control file은 동적으로 변경을 할 수 없어서 scope을 spfile로 주고 DB를 내렸다가 올려야 합니다.
Alter system set p_name=values scope=spfile;
'강의노트' 카테고리의 다른 글
[DB] DB백업과복구 3일차 (0) | 2016.02.17 |
---|---|
[DB] DB백업과복구 2일차 (0) | 2016.02.16 |
[DB] DB 성능관리와 튜닝 5일차 (0) | 2016.02.05 |
[DB] DB 성능관리와 튜닝 4일차 (0) | 2016.02.04 |
[DB] DB 성능관리와 튜닝 3일차 (0) | 2016.02.03 |