반응형

기존에 존재하는 서버램이 8GB 였는데 이번에는 서버에 8GB 를 추가로 달면서 16GB 램으로 변경 되었습니다.

하지만 오라클은 8GB 때 깔아놓은 것이라 기본적으로 50% 인 4GB램 으로 세팅 해놓은 상황이라 이번에는 8GB로 할당 하려 합니다.

SGA 설정을 통해 기존에 4GB로 할당해놧던 램을 8GB로 변경하는 명령어 입니다. (오라클 11G는 자동할당 메모리를 사용하기에 SGA_MAX_TARGET, SGA_TARGET 등을 수정할 필요 없이 alter system set memory_max_target=메모리양 scope=spfile; 명령어를 통해 간편하게 수정 하도록 하겠습니다.

 

 


sqlplus "/as sysdba"

 

SQL> show parameter memory;

 

NAME                                 TYPE        VALUE

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

hi_shared_memory_address             integer     0

memory_max_target                    big integer 3872M

memory_target                        big integer 3872M

shared_memory_address                integer     0

 

위와같이 show parameter memory; 를 통해 조회시 3872MB 메모리가 잡혀있는것을 확인 하실수 있습니다.

 

이것을 8192MB 로 바꿔보겠습니다. (8GB)

 

SQL> alter system set memory_max_target=8192M scope=spfile;

 

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

 

 

SQL> shutdown immediate;

 

ALTER SYSTEM 명령어 뒤에 scope에 대하여

memory : 변경이 현재 상태에만 영향영향을 미침(1회성) db가 restartup 되면, 이전 값으로 돌아감 

spfile : 변경 내용을 spfile에만 저장하고 현재 상태에는 영향을 미치지 않게 합니다. Static Parameter의 경우는 이 scope만 지정 가능 합니다.             Restart없이 반영하는 것은 불가능

both : 변경 내용을 현재 상태에도 바로 반영하고, spfile에도 반영시켜, 이후 rebooting 시에도 영향을 미치도록 합니다.

 

 

shutdown immediate; 입력 후 시작 -> 검색 -> service 를 입력 합니다.

 

 

 

서비스 클릭 후 OracleService 로 시작하는 서비스 오른쪽 클릭 후 중지

 

 

중지가 완료 되면 시작 을 눌러 다시 실행중 으로 변경 합니다.

 

SQL> show PARAMETERs memory ;

 

NAME                                 TYPE        VALUE

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

hi_shared_memory_address             integer     0

memory_max_target                    big integer 8G

memory_target                        big integer 3872M

shared_memory_address                integer     0

 

SQL> show sga ;

 

Total System Global Area 8551575552 bytes

Fixed Size                  2192864 bytes

Variable Size            7063210528 bytes

Database Buffers         1476395008 bytes

Redo Buffers                9777152 bytes

 

두개 명령어로 조회를 해보면 최대 메모리가 8GB 로 할당 된것을 볼수 있습니다.

반응형
반응형

이번에 고객사에서 연락이 왔다. " 서버 상태가 좋지 않으니 서버를 새로 구성해야 겠습니다. "

나는 그리하여 기존에 납품나간 서버를 분석(?) 하고 있었다.

데이터를 최종적으로 백업 받으려고 EXPORT를 진행 한 순간 로그에 에러가 쌓이면서 백업이 Export 가 되지 않아 에러 내용을 보는순간 캐릭터 셋 문제인것을 확인 했습니다.


당시 Export시 화면

Connected to: Oracle Database 11g Release 11.2.0.1.0 - 64bit Production

Export done in US7ASCII character set and AL16UTF16 NCHAR character set


About to export the entire database ...

. exporting tablespace definitions

. exporting profiles

. exporting user definitions

. exporting roles

. exporting resource costs

. exporting rollback segment definitions

. exporting database links

. exporting sequence numbers

. exporting directory aliases

. exporting context namespaces

. exporting foreign function library names

. exporting PUBLIC type synonyms

EXP-00008: ORACLE error 6552 encountered

ORA-06552: PL/SQL: Compilation unit analysis terminated

ORA-06553: PLS-553: character set name is not recognized

EXP-00000: Export terminated unsuccessfully


EXP-00008: ORACLE error 6552 encountered

ORA-06552: PL/SQL: Compilation unit analysis terminated

ORA-06553: PLS-553: character set name is not recognized

EXP-00000: Export terminated unsuccessfully


원인 : 캐릭터셋(문자셋) 중복 으로 인해  발생한 문제


 SELECT DISTINCT(NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET,


        DECODE(TYPE#, 1, DECODE(CHARSETFORM, 1, 'VARCHAR2', 2, 'NVARCHAR2','UNKOWN'),


                      9, DECODE(CHARSETFORM, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'),


                      96, DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),


                      112, DECODE(CHARSETFORM, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN


 FROM SYS.COL$ WHERE CHARSETFORM IN (1,2) AND TYPE# IN (1, 9, 96, 112);


조회결과


CHARACTERSET                             TYPES_USED_IN

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

KO16MSWIN949                             CLOB         

US7ASCII                                 CLOB         

AL16UTF16                                NCLOB        

AL16UTF16                                NVARCHAR2    

KO16MSWIN949                             CHAR         

US7ASCII                                 VARCHAR2     

KO16MSWIN949                             VARCHAR2     

AL16UTF16                                NCHAR        

US7ASCII                                 CHAR         


9 rows selected.


이 서버의 경우는 KO16MSWIN949 , US7ASCII 두 캐릭터셋이 중복되어 발생한 문제였습니다.

TYPES_USED_IN 이 두가지 이상 중복된경우 문제가 발생합니다.


KO16MSWIN949                             CLOB         

US7ASCII                                 CLOB  

KO16MSWIN949                             CHAR   

US7ASCII                                 CHAR

KO16MSWIN949                             VARCHAR2

US7ASCII                                 VARCHAR2 


KO16MSWIN949 , US7ASCII 이두가지 에서 문제가 발생한것 입니다.


해결방법

로그인>sqlplus "/as sysdba"


SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 17 23:39:12 2019


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



Connected to:

Oracle Database 11g Release 11.2.0.1.0 - 64bit Production


SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.


SQL> STARTUP MOUNT;

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.


Total System Global Area 6831239168 bytes

Fixed Size                  2188728 bytes

Variable Size            3976202824 bytes

Database Buffers         2835349504 bytes

Redo Buffers               17498112 bytes

Database mounted.

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;


System altered.


SQL> ALTER SYSTEM SET AQ_TM_PROCESSES = 0;


System altered.


SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;


System altered.


SQL> ALTER DATABASE OPEN;


Database altered.


SQL> col value new_value charset

SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';


VALUE

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

US7ASCII


SQL> col value new_value ncharset

SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_NCHAR_CHARACTERSET';


VALUE

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

AL16UTF16


SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE & CHARSET;

old   1: ALTER DATABASE CHARACTER SET INTERNAL_USE & CHARSET

new   1: ALTER DATABASE CHARACTER SET INTERNAL_USE US7ASCII


Database altered.


SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE & NCHARSET;

old   1: ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE & NCHARSET

new   1: ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16


Database altered.


SQL> SHUTDOWN IMMEDIATE;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> STARTUP;

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.


Total System Global Area 6831239168 bytes

Fixed Size                  2188728 bytes

Variable Size            3976202824 bytes

Database Buffers         2835349504 bytes

Redo Buffers               17498112 bytes

Database mounted.

Database opened.

SQL> SHUTDOWN IMMEDIATE;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> STARTUP;

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.


Total System Global Area 6831239168 bytes

Fixed Size                  2188728 bytes

Variable Size            3976202824 bytes

Database Buffers         2835349504 bytes

Redo Buffers               17498112 bytes

Database mounted.

Database opened.


완료시 정상 캐릭터셋


CHARACTERSET                             TYPES_USED_IN

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

US7ASCII                                 CLOB         

AL16UTF16                                NCLOB        

US7ASCII                                 VARCHAR2     

AL16UTF16                                NVARCHAR2    

US7ASCII                                 CHAR         

AL16UTF16                                NCHAR        


6 rows selected.



저는 문제없이 해결이 완료 되었으나 이 작업을 시도중 에러가 생기실수 있습니다.

에러에 대해서는 차후에 포스팅 하겠습니다.

반응형
반응형

오랜만에  글을 쓰게 되었습니다.. (그동안 바쁘기도 하고 서버가 터지는 일이 많이 줄어서..)

앞선 글에 ORA-01653 오류 대처에 대한 정보만 남겼는데 더 간단하고 쉽게 설명하기 위해서 글을 다시 씁니다.

(사실 최근에 이 문제로 한번 더 터졌습니다 서버가..)

 

 

고객사에서 기능들이 작동하지 않는다고 차장님에게 전화가 왔습니다.

 

차장님이 확인 후 혹시 이 문제에 대한 해결방법을 알고있냐고 물었고 발생한 에러를 보니

 

ORA-00604 : error occurred at recursive SQL level 1

 

ORA-01653 : unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM

 

ORA-02002 : error while writing to audit trail

 

ORA-00604 : error occurred at recursive SQL level 1

 

ORA-01653 : unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM

 

에러가 뿜어져 나오고 있었습니다.. 

 

이 에러에 원인을 알고 있던 저는 바로 자리에서 원격을 접속하여 (윈도우버전)


 

 

sqlplus /nolog     - sqlplus 로 패스워드없이 접속

 

conn /as sysdba     - sysdba 계정권한으로 로그인

 

truncate table SYS.AUD$;     -테이블 잘라내기

 

commit;    -저장

 

 

명령어를 입력 후 서버데몬을 시작하니

 

정상 작동 되었습니다.

 

 

이 문제가 리눅스 버전에서도 발생 할수 있기 때문에 리눅스에서 발생시 해결 방법을 알려드립니다.

 

리눅스 터미널에 접속하여 (리눅스버전)

 

 

su - oracle 

 

sqlplus /nolog

 

connect /as sysdba 

 

truncate table SYS.AUD$;

 

commit;

 

 

명령어를 입력하면 정상적으로 오라클 이용이 가능 합니다.

 

 

추가로 윈도우 에서는 이렇게 지속적으로 명령어 치기가 힘든경우 윈도우 배치파일 과 작업 스케줄러 를 이용하면 더욱 쉽게 사용 가능 합니다.

 

추가적인 방법은 차후에 또 다른 글로 설명 드리겠습니다.

 

 

반응형

+ Recent posts