2010년 7월 29일 목요일

[10g] Oracle RAC Management

srvctl

  1. Syntax : srvctl command object [options]

srvctl command

commandDescription
srvctl addnode applications, database, database instance, ASM instance, or service 추가
srvctl removenode applications, database, database instance, ASM instance, or service 삭제
srvctl confignode applications, database, ASM instance, or service에 대한 구성 목록
srvctl enableEnables the database, database instance, ASM instance, or service
srvctl disableDisables the database, database instance, ASM instance, or service.
srvctl startnode applications, database, database instance, ASM instance, or service 시작
srvctl stopnode applications, database, database instance, ASM instance, or service 중단
srvctl modifynode applications, database, database instance, or service configuration 변경
srvctl relocate하나의 instance에서 다른 하나의 instance로 서비스 재배치
srvctl statusnode applications, database, database instance, ASM instance, or service 상태 확인
srvctl getenvnode applications, database, database instance, or service 구성에서 환경변수 보여줌
srvctl setenv and unsetenvnode applications, database, database instance, or service 구성에서 환경변수 설정ᆞ해제

SRVCTL Objects

Object Noun NameAbbreviationPurpose
asmasmASM instances에서 add, configure, enable, start, obtain the status of, stop, disable, and remove명령어 사용
databasedbdatabases에서 add, configure, modify, manage environment variables for, enable, start, obtain the status of, stop, disable, and remove 명령어 사용
instanceinstdatabase instances에서 add, configure, modify, manage environment variables for, enable, start, obtain the status of, stop, and remove 명령어 사용
nodeappsno abbreviationnode applications에서 add, configure, modify, manage environment variables for, start, obtain the status of, stop, and remove 명령어 사용
serviceservcluster database에서 서비스를 add, configure, modify, manage environment variables for, enable, start, obtain the status of, relocate, disable, stop, and remove 할 수 있는 명령어 사용

SRVCTL Option

  1. Option은 10g manual 참고(10g manual Server Control Utility Reference)
OptionDescription
-d db_unique_namedatabase의 유일한 이름
-i inst_nameinstance 이름
-a추가적인 attributes
-tDisplay sample TNS entries
-s service_nameservice 이릌
-n node_nameNode 이름
-aVIP 구성
-gGSD 구성
-sONS 구성
-lListener구성
-o start_optionsstartup할 때 “open, mount, or nomount” 같은 추가 적인 명령어
-c connect_str접속할 때 권한 지정(default: / as sysdba)
-qPrompt for user credentials connect string from standard input(database) 
Query connect string from standard input(instance)
-h도움말을 보여줌
-f force서비스를 강제로 중단; 
모든 세션이 transactionally하게 SRVCTL과 연결이 끊겨서 
다른 인스턴스로 서비스가 재연결되어 세션의 서비스가 제공됨
-f비활성화된 applications 포함
-vVerbose output

SRVCTL Example

  1. RAC 전체를 기동한다.
    # srvctl start database -d SOAF
    
  2. 클러스터 종료(ASM사용 시)
    # export ORACLE_SID=soaf1
    # emctl stop dbconsole
    # srvctl stop instance -d soaf -i soaf1
    # srvctl stop asm -n rac1
    # srvctl stop nodeapps -n rac1
    
  3. 클러스터 시작(ASM사용 시)
    # export ORACLE_SID=soaf1
    # srvctl start instance -d soaf -i soaf1
    # srvctl start asm -n rac1
    # srvctl start nodeapps -n rac1
    
  4. 클러스터 및 ASM,DB 상태확인(ASM사용 시)
    # export ORACLE_SID=soaf1
    # crs_stat -t
       혹은 
    # crs_stat
    # srvctl status instance -d soaf -i soaf1
    # srvctl status asm -n rac1
    # srvctl status nodeapps -n rac1
    
  5. 클러스터 및 ASM,DB 설정확인(ASM사용 시)
    # export ORACLE_SID=soaf1
    # srvctl config instance -d soaf -i soaf1
        혹은 
    # srvctl config database -d soaf
    # srvctl config asm -n rac1
    # srvctl config nodeapps -n rac1 -a -g -s -l
    # srvctl config nodeapps -n rac1
    

crsctl

  1. 동시에 여러 개의 cluster components 상태를 확인 가능하며, cluster 진단 시에 유용
  2. root계정에서 실행
  3. 아래 명령을 trace할 때 : crsctl trace check css
  4. 자세한 내용은 10g manual참고(Using CRSCTL to Diagnose Cluster Issues)

crsctl command

CommandDescription
crsctl check crsCRS stack의 실행 여부 확인
crsctl check cssdCSS의 실행 여부 확인
crsctl check crsdCRS의 실행 여부 확인
crsctl check evmdEVM의 실행 여부 확인
crsctl set css parameter 설정 재정의(override)
crsctl get css gets the value of a CSS parameter
crsctl unset css CSS parameter값을 default값으로 설정
crsctl query css votediskCSS가 사용하는 voting disks의 목록 보여줌
crsctl add css votedisk voting disk에 추가
crsctl delete css votedisk voting disk에서 삭제
crsctl enable crsstartup할 때 모든 CRS daemons 활성화
crsctl disable crsstartup할 때 모든 CRS daemons 비활성화
crsctl start crs모든 CRS daemons 시작
crsctl stop crs모든 CRS daemons 중단. cluster에서는 CRS resources이 중단됨
crsctl start resourcesCRS resources 시작
crsctl stop resourcesCRS resources 중단
crsctl debug statedump evmdumps state info for evm objects
crsctl debug statedump crsdumps state info for crs objects
crsctl debug statedump cssdumps state info for css objects
crsctl debug log css [module:level]{,module:level} …CSS debugging 작동
crsctl debug trace cssdumps CSS in-memory tracing cache
crsctl debug log crs [module:level]{,module:level} …CRS debugging 작동
crsctl debug trace crsdumps CRS in-memory tracing cache
crsctl debug log evm [module:level]{,module:level} …EVM debugging 작동
crsctl debug trace evmdumps EVM in-memory tracing cache
crsctl debug log res resources debugging 작동
crsctl query crs softwareversion []설치된 CRS software 버전을 보여줌
crsctl query crs activeversionCRS software 운영 버전을 보여줌
crsctl lsmodules cssdebugging 가능한 CSS modules의 목록을 보여줌
crsctl lsmodules crsdebugging 가능한 CRS modules의 목록을 보여줌
crsctl lsmodules evmdebugging 가능한 EVM modules의 목록을 보여줌

ASM

  1. ASM디스크 확인
    SELECT d.name, a.path, a.state 
    FROM v$asm_disk a, v$asm_diskgroup d 
    WHERE a.group_number=d.group_number;
출처 :http://www.adminschool.net/dbwiki/doku.php?do=show&id=dbms:oracle:admin:oracleracmanage

2010년 7월 21일 수요일

[11g] background processes

2010년 7월 9일 금요일

datafile 개수 제한 설정 변경에 따른 고정 관념

datafile 개수 제한 설정 변경에 따른 고정 관념
데이터베이스의 data file의 개수가 설정 값보다 개수가 많아지면 이후에 데이터 파일의 추가 시 다음과 같은 에러메세지를 받게 된다.

ORA-00059: maximum number of DB_FILES exceeded

현재 실무에서 위의 문제를 해결하기 위해 많은 사람이 초기화 파라미터의 db_files의 값과 컨트롤파일의 설정 중 maxdatafiles의 값에 대해 변경을 해 줘야 한다고 생각을 한다. 그래서 작업 절차에 컨트롤 파일에 대한 재생성 과정을 고려한다. 하지만 오라클 버전 8 이상부터는 컨트롤 파일의 maxdatafiles의 값은 더 이상 특별하게 고려할 필요가 없다. 버전 8 이상부터 오라클이 maxdatafiles의 값을 동적으로 변경해 준다.

이에 대한 테스트를 아래에서 수행해 보도록 하겠다.
Test
현재 DB의 설정 사항을 파악
SQL> SELECT COUNT( * ) FROM V$DATAFILE;

  COUNT(*)
----------
         4

SQL> SELECT TYPE
  2        ,RECORD_SIZE
  3        ,RECORDS_TOTAL
  4        ,RECORDS_USED
  5  FROM   V$CONTROLFILE_RECORD_SECTION
  6  WHERE  TYPE = 'DATAFILE';

TYPE                                        RECORD_SIZE RECORDS_TOTAL RECORDS_USED
------------------------------------------- ----------- ------------- ------------
DATAFILE                                            428            10            4

SQL> COL NAME FOR A20
SQL> COL VALUE FOR A10
SQL> COL DISPLAY_VALUE FOR A10
SQL> COL DESCRIPTION FOR A50
SQL> SELECT NAME
  2        ,VALUE
  3        ,DISPLAY_VALUE
  4        ,DESCRIPTION
  5  FROM   V$PARAMETER
  6  WHERE  NAME = 'db_files';

NAME                 VALUE      DISPLAY_VA DESCRIPTION
-------------------- ---------- ---------- ----------------------------
db_files             10         10         max allowable # db files

SQL>
현재 datafile의 개수는 4이고 파라미터의 db_files 설정 값은 10으로 되어 있으며 컨트롤 파일에 설정되어 있는 maxdatafiles 값은 10이며 4개의 entry가 사용중이란 결과를 보게된다.
데이터 파일의 개수를 증가시키면서 테스트를 진행해 보자.
SQL> CREATE TABLESPACE NO_FILE_TEST
  2  DATAFILE 'D:\9.DATABASE\ORADORI\NO_FILE_TEST01.DBF' SIZE 1M,
  3           'D:\9.DATABASE\ORADORI\NO_FILE_TEST02.DBF' SIZE 1M,
  4           'D:\9.DATABASE\ORADORI\NO_FILE_TEST03.DBF' SIZE 1M,
  5           'D:\9.DATABASE\ORADORI\NO_FILE_TEST04.DBF' SIZE 1M,
  6           'D:\9.DATABASE\ORADORI\NO_FILE_TEST05.DBF' SIZE 1M;

테이블스페이스가 생성되었습니다.

SQL>
현재 datafile 9개가 되도록 작업을 수행했으며 다시 설정을 확인하고 10개까지 만드는 작업을 진행해 보자
SQL> SELECT COUNT( * ) FROM V$DATAFILE;

  COUNT(*)
----------
         9

SQL> COL NAME FOR A20
SQL> COL VALUE FOR A10
SQL> COL DISPLAY_VALUE FOR A10
SQL> COL DESCRIPTION FOR A50
SQL> SELECT NAME
  2        ,VALUE
  3        ,DISPLAY_VALUE
  4        ,DESCRIPTION
  5  FROM   V$PARAMETER
  6  WHERE  NAME = 'db_files';

NAME                 VALUE      DISPLAY_VA DESCRIPTION
-------------------- ---------- ---------- ----------------------------
db_files             10         10         max allowable # db files

SQL> SELECT TYPE
  2        ,RECORD_SIZE
  3        ,RECORDS_TOTAL
  4        ,RECORDS_USED
  5  FROM   V$CONTROLFILE_RECORD_SECTION
  6  WHERE  TYPE = 'DATAFILE';

TYPE                                  RECORD_SIZE RECORDS_TOTAL RECORDS_USED
------------------------------------- ----------- ------------- ------------
DATAFILE                                      428            10            9

SQL> ALTER TABLESPACE NO_FILE_TEST
  2  ADD DATAFILE 'D:\9.DATABASE\ORADORI\NO_FILE_TEST06.DBF' SIZE 1M;

테이블스페이스가 변경되었습니다.

SQL>
datafile의 개수가 10개로 제한 값에 도달하였다. 이후 datafile 추가시 에러가 나오는지 확인
SQL> ALTER TABLESPACE NO_FILE_TEST
  2  ADD DATAFILE 'D:\9.DATABASE\ORADORI\NO_FILE_TEST07.DBF' SIZE 1M;
ALTER TABLESPACE NO_FILE_TEST
*
1행에 오류:
ORA-00059: maximum number of DB_FILES exceeded


SQL>
11번째 datafile 추가 시 위와 같은 에러를 받게 된다. 이제 테스트 환경이 구축된 것이다. 이제 우리가 확인하고자 하는 maxdatafiles의 값이 동적으로 변경되는 것을 확인해 보자

파라미터의 db_files의 값을 변경해 보자
SQL> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL>

초기화 파라미터 변경

*.sessions=1105
*.sga_target=612368384
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='C:\oracle\product\10.2.0\admin\ORADORI\udump'
*.db_files=15  # 위 환경에서 10으로 10개 제한했으나 15로 늘려본다.

설정 변경 후 DB restart 후 설정을 확인하고 11번째 datafile을 추가하여 상태 체크를 수행한다.
SQL> startup
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             255855492 bytes
Database Buffers          348127232 bytes
Redo Buffers                7135232 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
SQL>

SQL> SELECT COUNT( * ) FROM V$DATAFILE;

  COUNT(*)
----------
        10

SQL> COL NAME FOR A20
SQL> COL VALUE FOR A10
SQL> COL DISPLAY_VALUE FOR A10
SQL> COL DESCRIPTION FOR A50
SQL> SELECT NAME
  2        ,VALUE
  3        ,DISPLAY_VALUE
  4        ,DESCRIPTION
  5  FROM   V$PARAMETER
  6  WHERE  NAME = 'db_files';

NAME                 VALUE      DISPLAY_VA DESCRIPTION
-------------------- ---------- ---------- --------------------------
db_files             15         15         max allowable # db files 

SQL> SELECT TYPE
  2        ,RECORD_SIZE
  3        ,RECORDS_TOTAL
  4        ,RECORDS_USED
  5  FROM   V$CONTROLFILE_RECORD_SECTION
  6  WHERE  TYPE = 'DATAFILE';

TYPE                           RECORD_SIZE RECORDS_TOTAL RECORDS_USED
------------------------------ ----------- ------------- ------------
DATAFILE                               428            10           10

SQL> ALTER TABLESPACE NO_FILE_TEST
  2  ADD DATAFILE 'D:\9.DATABASE\ORADORI\NO_FILE_TEST07.DBF' SIZE 1M;

테이블스페이스가 변경되었습니다.

SQL> SELECT COUNT( * ) FROM V$DATAFILE;

  COUNT(*)
----------
        11

SQL> SELECT NAME
  2        ,VALUE
  3        ,DISPLAY_VALUE
  4        ,DESCRIPTION
  5  FROM   V$PARAMETER
  6  WHERE  NAME = 'db_files';

NAME                 VALUE      DISPLAY_VA DESCRIPTION
-------------------- ---------- ---------- --------------------------
db_files             15         15         max allowable # db files

SQL> SELECT TYPE
  2        ,RECORD_SIZE
  3        ,RECORDS_TOTAL
  4        ,RECORDS_USED
  5  FROM   V$CONTROLFILE_RECORD_SECTION
  6  WHERE  TYPE = 'DATAFILE';

TYPE                          RECORD_SIZE RECORDS_TOTAL RECORDS_USED
----------------------------- ----------- ------------- ------------
DATAFILE                              428            42           11

SQL>
maxdatafiles에 대한 변경을 하지 않아도 11번째 datafile 추가 전에는 변경이 없지만 추가가 된 후의 maxdatafiles의 설정 값이 42로 늘어난 것을 확인할 수 있다.
결론
현재 실무에서 많은 엔지니어분들이 해당 작업시 maxdatafiles의 설정 값 때문에 컨트롤 파일의 재생성을 권고하고 있다. 하지만 이는 8버전 이전에 필요한 작업이지 이후 버전에는 필요 없는 작업이다. 굳이 한다고 하면 잘못된 방법은 아니다. 하지만 굳이 risk를 안을 만한 작업을 할 필요가 있을까? 또 추가적으로 확인해 볼만한 사항은 records_total 값이 15가 되는 것이 아니라 42이가 된다는 것이다. 오라클 내부적으로 늘어나는 값들이 어떠한 규칙으로 설정되어 있는 듯하다. 이것 또한 트레이스를 통해서 내부적인 동작 방식을 더 깊게 고찰해 볼 필요가 있을 것 같다.
참고
Oracle Metalink ID : 119507.1

팔로어