ORACLE/ADMIN2008. 11. 26. 11:33
반응형
(V7.X ~ V9.X) Modifying a database to run under a new ORACLE_SID
================================================================

1. Shutdown instance

2. Backup all control, redo and data files.

3. Go thru the .profile, .cshrc, .login, oratab, tnsnames.ora(for net v2)
, and redefine the environment variable ORACLE_SID to a new value.
ie search thru disks and do a grep ORACLE_SID *

4. cd $ORACLE_HOME/dbs and rename the following files:

o init<sid>.ora (or use pfile to point to the init file.)
o control file(s) This is optional if you don't rename any of
the controlfiles, and the control_files parameter is used.
control_files would be set in the initSID.ora file or in a file
it references with the ifile parameter. Make sure control_files
doesn't point to any old file names, if you renamed them.

o crdb<sid>.sql & crdb2<sid>.sql This is optional. These are
only used at database creation.

5. cd $ORACLE_HOME/rdbms/admin and rename the file:
o startup<sid>.sql This is optional.
(On some platforms, this file may be in $ORACLE_HOME/rdbms/install.)
Make sure the contents of this file do not reference old initSID.ora
files that have been renamed. This file simplifies the process to
"startup exclusive" your database.

6. To rename the database files and redo log files, you would follow
the instructions in the bulletin: 98863.723.

7. Change the ORACLE_SID environment variable to the new value.

8. start up database and verify it works. Once you have done this,
shutdown the database and take a final backup of all control, redo
and data files.

9. When the instance is started, the control file gets updated with
the current ORACLE_SID.


Changing the dbname for a database
----------------------------------

1. sqldba

2. connect internal

3. alter database backup controlfile to trace;
This will write in a trace file, the CREATE CONTROLFILE command that
would recreate the controlfile as it currently exists.

4. Exit and go to the directory where your trace files are located.
They are usually in the $ORACLE_HOME/rdbms/log directory.
If user_dump_dest is set in the initSID.ora, then go to the directory
listed in the user_dump_dest variable.
The trace file will have the form "ora_NNNN.trc with NNNN being a
number.

5. Get the CREATE CONTROLFILE command from the trace file and put it in
a new file called something like ccf.sql.

6. Edit the ccf.sql file and modify the CREATE CONTROLFILE command.
Just change the word "REUSE" to "SET",and "NORESETLOGS" to
"RESETLOGS", and modify the dbname.
Old line:
CREATE CONTROLFILE REUSE DATABASE "olddbname" NORESETLOGS ...
New line:
CREATE CONTROLFILE set DATABASE "newdbname" RESETLOGS ...
Then save the ccf.sql file.

7. Rename the old control files for backup purposes and so they are not
in the way of creating the new ones.

8. Edit initSID.ora so that db_name="newdbname".

9. sqldba

10. connect internal

11. startup nomount

12. @ccf

13. alter database open resetlogs;

14. Make sure the database is working. Shutdown and backup the database.


Reference Documents
-------------------
<Note:15390.1>

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

# UNIX 환경
# 단순 SID 변경은 .profile 변경 및 dbs 의 init<원한는SID> 로만 변경 하면 된다.
# 결과적으로 단순 SID 변경은 Process 만 변경 된다.
# 간만에 SID 변경할 일이 있어서 테스트 한번 해봤음 ㅇ_ㅇ;
# 늘 그렇지만 엄청 새롭다.

TESTTG ==> TESTTGB 로 변경한다고 가정
1. vi .profile 에서 ORACLE_SID 를 원하는 SID 로 변경
   export ORACLE_SID=TESTTGB
2. dbs 에서 init<SID>.ora 을 init<원하는SID>.ora 로 copy 한다.
    cd /app/oracle/product/10.2.0/dbs
    cp initTESTTG.ora initTESTTGB.ora
# 작업 하시 편하게 pfile 환경에서 한다. pfile 생성은
   SQL> create pfile from spfile ;

3.  2번에서 생성한, initTESTTGB.ora 에서 db_name 을 수정한다.
     *.db_name='TESTTGB'

     주의 사항 :

     1.Control File Path 에 주의 하자  ( 원래 DB 가 떠 있는 동일 Machine 에서 하면 Overwrite 된다 ㅇ_ㅇ;)

         #*.control_files='/an01/TEST/TESTTG/control01.ctl'              -- 원본
         *.control_files='/an01/TEST/TESTTG/TESTTGB_control01.ctl' -- 테스트

     2. SGA , PGA 를 적당히 Edit 하자

     3. 필요하다면 필요한 Tablespace 의 Datafile 만 선택 하자 Control file 을 생성하자.

     4. Archive Dest 를 Edit 하자 ( Mount 이후에 alter system 으로 변경 가능하다 )

4. controlfile 재생성 ( 아래와 같이 )
화일 생성을 아래와 같이 TRACE 떨군 후에 Editing
SQL> alter database backup controlfile to trace  ;
Database altered.
STARTUP NOMOUNT
CREATE CONTROLFILE SET DATABASE "TESTTGB" RESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/an01/TEST/TESTTG/redo01.log'  SIZE 10M,
  GROUP 2 '/an01/TEST/TESTTG/redo02.log'  SIZE 10M,
  GROUP 3 '/an01/TEST/TESTTG/redo03.log'  SIZE 10M
-- STANDBY LOGFILE
DATAFILE
  '/an01/TEST/TESTTG/system01.dbf',
  '/an01/TEST/TESTTG/undotbs01.dbf',
  '/an01/TEST/TESTTG/sysaux01.dbf',
  '/an01/TEST/TESTTG/users01.dbf'
CHARACTER SET UTF8
;

5. controlfile 재성성 후 Recover Database 진행
(  새로 생성한 control file 을 통한 복구이기 때문에 using backup control 사용

   테스트용이라 until cancel 로 하고 바로 cancel 적용

   SID 변경 후 recovery 도 되고, recovery 후 SID 변경이 가능하다.

   개인적으로, 작업 하기 쉬운건 Recovery 후 SID 변경 을 더 편하다

   아주 가끔 백업 본이 이상하던지, archive file 이상해서, 복구가 안되는 케이스가 발생한다. )
SQL> RECOVER DATABASE using backup controlfile until cancel ;
ORA-00279: change 9151408584711 generated at 11/19/2009 23:56:21 needed for
thread 1
ORA-00289: suggestion : /app/oracle/product/10.2.0/dbs/arch1_12_703375834.dbf
ORA-00280: change 9151408584711 for thread 1 is in sequence #12
 
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
Cancel
Media recovery cancelled.

6. RESETLOGS 로 OPEN 한다.
SQL> alter database open resetlogs ;

Database altered.

7. DB NAME 변경된것을 확인 한다.
SQL>  select dbid,name, to_char(created,'YYYY/MM/DD HH24:MI:SS') from v$database ;

      DBID NAME      TO_CHAR(CREATED,'YY
---------- --------- -------------------
3876231960 TESTTGB   2009/11/20 00:26:00

8. Local Listenr 변경 및 Remote tnsnames.ora 에서 TESTTG ==> TESTTGB 로 변경

EM 은 SID 변경에 따라서 당근 재생성 해야 한다.

단순 SID 만 변경해도, EM CONFIG정보는 HOSTNAME_SID 라는 디렉토리에 저장된다.

반응형
Posted by [PineTree]
ORACLE/ADMIN2008. 11. 21. 13:20
반응형

 
배경
 
1. 하드웨어 장애로 인해 신규 시스템 구입
2. DB가 저장되어 있는 하드디스크는 건재
3. 10.2.0.1은 Windows XP버젼 10.2.0.3은 Windows Vista 버젼
 
물리설계의 변경
 
1. 이전버젼은 오라클 프로덕트, 백업영역이 데이타파일과 동일한 디스크에 저장
2. 신규버젼은 오라클 프로덕트, 백업영역을 데이타파일과 다른 디스크에 저장
 
순서
 
1. 오라클 인스톨
    인스톨 드라이브 : C 드라이브
 
2. 환경변수 설정
 ORACLE_BASE=C:\Oracle
 ORACLE_HOME=C:\oracle\product\10.2.0\db_1\
 ORA_NLS=C:\oracle\product\10.2.0\db_1\/nls
 TNS_ADMIN=C:\oracle\product\10.2.0\db_1\\network\admin
 ORACLE_SID=OSITDB99
 NLS_DATE_FORMAT=YYYY/MM/DD HH24:MI:SS
 NLS_LANG=JAPANESE_JAPAN.JA16SJIS
 
3. 화일카피 (이전시스템의 디스크에서 신규시스템의 디스크로)
F:\u01\oradata\OSITDB99
F:\u02\oradata\OSITDB99
C:\oracle\admin
C:\oracle\flash_recover_area
4. init.ora화일 편집
F:\oracle\admin\OSITDB99\adump → C:\oracle\admin\OSITDB99\adump
F:\oracle\admin\OSITDB99\bdump → C:\oracle\admin\OSITDB99\bdump
F:\oracle\admin\OSITDB99\cdump → C:\oracle\admin\OSITDB99\cdump
F:\oracle\admin\OSITDB99\udump → C:\oracle\admin\OSITDB99\udump
 
5. 서비스 등록
OracleServiceOSITDB99
6. DB리커버리
불완전리커버리실시 (완전리커버리용 백업파일이 존재하지 않았기 때문)
7. alter database open upgrade
버젼이 upgrade되었기 때문에 alter database open으로는 DB오픈 실패
8. catupgrd.sql
$ORACLE_HOME/rdbms/admin 에 있는 catupgrd.sql실행
 
주의점
1. 버젼이 다르기 때문에 데이타파일을 그대로 카피해도 데이타베이스 기동이 안됨
   (OS에 의한 백업과 동일한 결과였지만 버젼이 문제)
2. cataupgrd.sql을 실행시키지 않으면 정상적인 DB조작이 안됨
반응형

'ORACLE > ADMIN' 카테고리의 다른 글

oracle유저 이외의 유저가 sqlplus등을 사용하는 방법  (0) 2008.11.27
DBNAME, SID 변경하기.  (0) 2008.11.26
[Oracle] Datafile Size 변경하기  (0) 2008.11.19
sqlplus 사용법 (ORACLE)  (0) 2008.11.04
Oracle Data Dictionary Views  (0) 2008.09.12
Posted by [PineTree]
ORACLE/ADMIN2008. 11. 19. 14:12
반응형
1. 기존의 datafile을 resize하여 늘리는 경우.

datafile size를 증가하는 경우는 disk에 free space만 있다면 다음과 같이 간단합니다.
다음과 같이 늘리면 되나 줄일 경우는 계산을 하여 줄여야 합니다.

SQL>alter database datafile   '/oracle/dbs/toolsORA.dbf' resize 100M;

2. 기존의 datafile을 줄이는 경우.

만일 지정한 size만큼 data가 있다면 error가 발생되고 resize되지 않습니다.
SQL> alter database datafile   '/oracle/dbs/toolsORA.dbf' resize 100M;
alter database datafile   '/oracle/dbs/toolsORA.dbf' resize 100M'
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value

[방법 1]
1) 줄이고자하는 file id를 확인합니다.
SVRMGR> select file_id, file_name from dba_data_files;

2) 얼마를 사용했는지 확인합니다.
SVRMGR> select block_id, blocks from dba_extents
     2> where file_id='FILE_ID' order by block_id;
     FILE_ID 대신에 줄이려는 file id를 기술합니다.

3)현재 사용중인 db block size를 확인합니다.
SVRMGR> show parameter db_block_size

만일 2048일 경우 다음과 같이 계산합니다.

2)에서 조회된 마지막의 block_id, blocks 값을 가지고 계산합니다.
block_id * 2048 + blocks * 2048 의 결과에 한 block더한 값만큼만 줄이는
것이 가능합니다.
만일 마지막으로 조회된 값이 block_id가 578261, blocks가 515일 경우
578261*2048 + 515*2048 =1185333248로 최소한 1.2GB이상은 써야 합니다.

4) 실제 datafile을 줄입니다.
svrmgr>alter database datafile   '/oracle/dbs/toolsORA.dbf' resize
1200M;

[방법 2]
1) 기존의 data export
exp username/password file=filename owner=username log=username.log

2) tablespace drop
svrmgr>drop tablespace tbs including contents;
rm datafile

tbs대신에 작게 만드시려는 tablespace name을 기술합니다.
datafile대신에 tablespace와 연계된 모든 datafile을 remove합니다.

3) tablespace재생성
svrmgr>create tablespace tbs
             datafile '...' size 100M;
원하시는 size로 줄입니다.

4) data import
imp username/password file=filename fromuser=username touser=username
commit=y log=imp.log


[자료출처 :
www.oracle.co.kr]

반응형
Posted by [PineTree]
ORACLE/ADMIN2008. 11. 4. 14:15
반응형
1. DB를 사용하기위해 ORACLE로 LOGIN 방법
가. SQLPLUS [Enter]
User ID : xxxxxx
password : xxxxxxxx
나. SQLPLUS user_id [Enter]
password : xxxxxxxx
다. SQLPLUS user_id/password [Enter]
※ 다. 와 같은 방법으로 Login 하게 되면 사용자명과 암호가 노출된다
그러므로 가장좋은 방법은 가, 그리고 나. 이다

2. SQLPLUS 상에서는 Auto Commit이 안된다. 그러므로 중간 중간 " COMMIT "를
수행한다.

3. SQL 문장의 Terminate 는 ==> “ ; ”

4. 한 화면씩 보여주는 기능
==> set pause on; (설정)
set pause off; (해제)
※ 설정을 하고나서 SQL 명령을 수행하면 커서가 그 다음 LINE에서 대기하고
있으므로 [Enter] Key를 친다. 그 다음부터는 Enter키로 한화면씩 보면 됨

5. SQL 명령어를 모를 경우 ?
==> help [명령어]

6. Unix 명령어를 사용하기 위해서는 ?
==> “ ! ” 를 붙여 사용한다.

7. 바로전에 실행한 SQL문을 FILE로 저장하려면 ?
==> “ save ”

8. 파일의 내용을 메모리로 불러오려면 ?
==> “ get ” 를 붙여 사용한다.

9. 메모리로 불러온 SQL문이나 메모리에 있는 명령을 실행 하려면 ?
==> “ / ” 를 붙여 사용한다.

10. 바로 전에 수행한 명령어를 편집하려면 ?
==> “ ed ” 를 붙여 사용한다.

11. 바로 전에 수행한 명령어 보려면 ?
==> “ l ” 를 붙여 사용한다.

12. SQL문이 있는 FIle을 바로 실행하려면 ?
==> “ @ ” 또는 " Start " 를 붙여 사용한다.

13. set heading off / on
==> Columns 명을 나타내지 않는다.

14. set arraysize line_number(숫자);
==> 한번에 DATA를 가져오는 단위

15. set timing on / off
==> sql문을 수행하는데 소요되는 시간을 나타내어 준다.
=======================================================================================================================
=======================================================================================================================
-. DB에 접속                     : CONN
 -. 파일 편집 및 실행          : EDIT, START
 -. 환경 설정                      : SET
 -. 표시 형식                      : COLUMN
 -. 변수 사용                      : &, ACCEPT
 -. 기타                              : DESC, HELP
 
*버퍼에 있는 명령어 편집
A : 라인끝에 텍스트를 추가함
C/old/new : old 를 new로 바꿈
I text : 다음 line 에 text를 추가함
L : 전체 문자을 보여줌
n text : n라인 전체를 text로 바꿈
R : buffer에 있는 문장 실행
edit : buffer에 있는 문장을 file로 부름
 
*SQL문장을 파일로 저장, 저장된 명령어를 실행할수 있는 sqlplus명령어
save a : 버퍼에있는 문장을 a.sql 파일에 저장
get a : a.sql 파일에 있는 문장을 버퍼로 불러옴
start a : a를 실행
host shell : 호스트 쉘로 나감
!vi a.sql : unix인경우에 a.sql.을 vi 로 편집
 
*set (환경설정)
colsep (text) : 칼럼이 표시될때 칼럼의 구별문자 기본값 공백
feedback (off | on) : 선택된 행이 몇 행인지 표시함 기본값은 6행이상일때 on
heading (off | on) : 컬럼에 대한 heading을 표시함 기본값은 on
linesize (n) : 한줄에 표시될 텍스트숫자 기본값80
pages (n) : 한페이지당 표시되는 라인수 기본값 24
paues (on | off | text) : 엔터키를 누를때마다 화면이 지나감 기본값은 off
timing (on | off) : sql문장이 처리되는 시간을 표시 기본값은 off
verify (on | off) : & 변수로 값을 받을 경우 화면에 확인하기 위해 old,new를 표시할 것인지 기본값은  on
show all : 환경이 어떻게 설정 되었는가 확인
* 항상 로그인시 같은 환경을 유지하고 싶을경우 glogin.sql파일에 set 으로 설정
desc 테이블 구조
help topic 도움말
라인의 가로사이즈는 linesize를 늘려서 조정하시면 되고
 
조회된 로우수가 20행정도인데... 10개정도씩 컬럼명이 반복된다면
 
pagesize를 늘려주시면 됩니다. Default값을 알고 계시다면
 
-- linesize도 record 길이만큼 지정하여 아래로 구분되지 않도록 합니다.
SQL>SET LINESIZE 300

-- 명령이 display되지 않도록 합니다.
SQL>SET ECHO OFF

-- 조회 결과가 화면에 나오지 않도록 합니다.
SQL>SET TERM OFF

-- data가 들어가는 화일 이름을 지정 합니다.
SQL>SPOOL C:\test.txt

-- 스크립트 파일을 실행 시킵니다.
SQL>@C:\SpoolSelect.sql

SQL>SPOOL Off

test.txt file이 생성 되었는지 확인 합니다.


2. 필드 값 구분하기.

1-1.select empno||' '||ename from emp; <== Tab으로 구분

1-2.select empno||','||ename from emp; <== 콤마로 구분

2-1.select empno||'"'||ename from emp; <== 필드 값에 큰따옴표 붙이는 방법
(작은 따옴표는 예약어 이기 때문에 에러 남)


SQL> set linesize 180
 
SQL> set pagesize 30
sql > column 컬럼명 format a10
이렇게 하면 표시되는 컬럼에 대한 사이즈를 조절 할 수 있습니다.
현재 TITEMID의 내용은 짧은데 자리를 많이 차지하고 있죠?
이럴경우
sql> column TITEMID format a10
이렇게 하면 10자리만큼만 차지하게 됩니다.
varchar type이면 col 컬럼명 format a20 --> 20으로 열너비조정
number라면 col 컬럼명 format 999,999 --> 9하나가 한자리
set heading off -> 컬럼의 heading..그러니깐 name, value..이런게 계속 나오지 않게..하려면 이걸 쓰죠..
spool on 또는 spool path+파일명
->이렇게 하면 쿼리 결과를 파일로 저장할 수 있죠.
SQL> spool on
SQL> select * from product_component_version;
NLSRTL                         3.4.1.0.0       Production
Oracle8i Enterprise Edition    8.1.7.4.0       Production
PL/SQL                         8.1.7.4.0       Production
TNS for HPUX:                  8.1.7.4.0       Production
SQL> spool off
SQL> !ls
LOCK          TOOL          app           jre           nohup.out     oui           tempwork
STC           admin         doc           led.sh        on.lst        script        test.sql
Script        afiedt.buf    hiraScript    led_test.sql  oraInventory  temp.sql
SQL> !vi on.lst
"on.lst" 8 lines, 387 characters
SQL> select * from product_component_version;
NLSRTL                         3.4.1.0.0       Production
Oracle8i Enterprise Edition    8.1.7.4.0       Production
PL/SQL                         8.1.7.4.0       Production
TNS for HPUX:                  8.1.7.4.0       Production
SQL> spool off

set pause on 하면 한 페이지씩 볼 수 있죠.
 
SQL> help index
 ACCEPT        DBA          PAUSE            /
 APPEND        DEFINE       PRINT            SPOOL
 @             DEL          PROMPT           SQLPLUS
 @@            DESCRIBE     QUIT             START
 ARCHIVE LOG   DISCONNECT   RECOVER          STARTUP
 ATTRIBUTE     EDIT         REMARK           STORE
 BREAK         EXECUTE      REPFOOTER        TIMING
 BTITLE        EXIT         REPHEADER        TTITLE
 CHANGE        GET          RESERVED WORDS   UNDEFINE
 CLEAR         HELP         RUN              VARIABLE
 COLUMN        HOST         SAVE             WHENEVER OSERROR
 COMPUTE       INPUT        SET              WHENEVER SQLERROR
 CONNECT       LIST         SHOW
 COPY          PASSWORD     SHUTDOWN

SQL> help column
 COLUMN
 ------
 Specifies display attributes for a given column, such as:
     -   text for the column heading
     -   alignment of the column heading
     -   format for NUMBER data
     -   wrapping of column data
 Also lists the current display attributes for a single column
 or all columns.
 COL[UMN] [{column | expr} [option...] ]
 where option represents one of the following clauses:
     ALI[AS] alias
     CLE[AR]
     FOLD_A[FTER]
     FOLD_B[EFORE]
     FOR[MAT] format
     HEA[DING] text
     JUS[TIFY] {L[EFT] | C[ENTER] | C[ENTRE] | R[IGHT]}
     LIKE {expr | alias}
     NEWL[INE]
     NEW_V[ALUE] variable
     NOPRI[NT] | PRI[NT]
     NUL[L] text
     OLD_V[ALUE] variable
     ON|OFF
     WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]
 For detailed information on this command, see the SQL*Plus User's
 Guide and Reference.

SQL> show all
appinfo is ON and set to "SQL*Plus"
arraysize 15
반응형
Posted by [PineTree]
ORACLE/ADMIN2008. 9. 12. 02:57
반응형

All_all_tables : user가 access할수있는 모든 Table
All_catalog : user가 access할수있는 모든 Table, Views, synonyms, sequence
All_clusters : user가 access할수있는 모든 clusters
All_col_comments : user가 access할수있는 모든 Table,Views에 대한 칼럼comments

 
All_col_privs : user에게 또는 Public에게 허용된 모든 칼럼에 대한 권한.
All_col_privs_made : user가 부여한 칼럼에 대한 권한.
All_col_privs_recd : user에게 또는 Public에게 허용된 모든 칼럼에 대한 권한.
All_coll_types : user가 access 할수 있는 모든 collection type
All_cons_columns : 제약조건에 관련된 칼럼, access할수 있는 대한 정보
All_constraints : access할수 있는 테이블에 대한 제약조건.
All_db_links : user가 access 할수 있는 데이터베이스 link
All_def_audit_opts : 오브젝트가 생성될때 적용될수있는 default오브젝트감사내용.
All_dependencies : user가 access할수있는 오브젝트간의 dependencies(참조,link)
All_directories : user가 access할 수 있는 모든 directories (owner 는 항상 sys)
All_errors : user가 access할수있는 모든 objects(view,procedure,package, function,
packagebody) 에 대한 에러.
All_ind_columns : user가 access할수있는 테이블에 대한 인덱스의 칼럼.
All_ind_partitions : user가 access할수있는 인덱스partition, partition에 대한
storage매개변수, Analyze명령에 의해 결정된 partition통계.
All_indexes : user가 access할수있는 테이블의 인덱스.
이 view의 통계를 수집하기위해, Analyze명령을 사용한다.
병렬partition인텍스탐색을 지원한다.
All_labels : system labels 에 대한 Oracle server view.
All_libraries : user가 access할 수 있는 모든 libraries.
All_lobs : user가 access할 수 있는 모든테이블에 포함된 LOBs.
All_method_params : user가 access할 수 있는 method와 그method의 parameter.
All_method_results :
All_nested_tables : user가 access할수있는테이블내의 Nested Table
All_object_tables : user가 access할수있는테이블의모든정보.
All_objects : user가 access할수있는objects(index partition,table partition,package,
package body, trigger)
All_part_col_statistics : user가 access할 수 있는 테이블partition에 대한 칼럼통계와
막대그래프화된 정보.
All_part_histograms : user가 access할수있는 테이블partition의 histograms에 대한
histogram정보.
All_part_indexes : user가 access할수있는 모든partition된 index의 partition정보.
All_part_key_columns :user가 access할수있는 partition된 objects의 partition key
칼럼에 대한정보
All_part_tables : user가 access할수있는partition된 Table에 대한 partition정보.
All_refresh : user가 access할수있는모든 refresh groups.
All_refresh_children : user가 access할 수 있는 refresh groups 안의 모든objects
All_refs : user가 access할 수 있는 칼럼중 REF칼럼과, REF속성.
All_registered_snapshots : 모든 등록된 snapshots.
All_sequences : user가 access할수있는 sequences.
All_snapshot_logs : 모든 snapshot logs.
All_snapshot_refresh_times : 모든 snapshot refresh times.
All_snapshots : user가 acces할수있는 모든 snapshots.
All_source : user가 access할수있는 모든 stored objects의 text source.
All_synonyms : user가 access할수있는 모든 synonyms.
All_tab_col_statistics : 'User_tab_columns' view안의 정보에대한 칼럼통계와 그래프정보
All_tab_columns : user가 access할수있는모든 table, views, clusters에 대한 칼럼.
이view를 활용하기위해서는 Analyze명령어를 사용한다.
All_tab_comments : user가 access할 수 있는 모든 table, views에 대한 comments.
All_tab_histograms : user가 access할수있는table, views에 대한 histograms.
All_tab_partitions : user가 access할수 있는 각각의 테이블partition에 대한
partition정보, storage parameter, Analyze명령에 의한 통계정보등을 서술한다.
All_tab_privs : user혹은 PUBLIC가 부여받은 오브젝트권한.
All_tab_privs_made : user가 부여한 user권한과 오브젝트권한.
All_tab_privs_recd : user 또는 PUBLIC이 부여받은 오브젝트권한.
All_tables : user가 access할 수 있는 모든 테이블.
Analyze명령으로 이 view의 통계를 얻을 수 있다.
All_triggers : user소유의 trigger, user소유테이블의 trigger, 또는 user가
CREATE ANY TRIGGER 권한을 갖고있다면, 모든 트리거에 대한 정보.
All_trigger_cols : user소유의 trigger, user소유테이블의 trigger, 또는 user가
CREATE ANY TRIGGER 권한을 갖고있다면, 모든 트리거에 대한 칼럼정보.
All_type_attrs : user가 access할 수 있는 type의 attributes.
All_type_methods : user가 access할수있는type의 methods.
All_types : user가 access할 수 있는 type.
All_updatable_columns : join view에서 update가능한 칼럼에 대한 정보.
All_users : 데이터베이스의 모든 user에 대한 정보.
All_views : user가 access할수있는view의 텍스트.
Audit_actions : 감사추적type코드 정보.
catalog : Oracle 5.0 version과의 호환정보를 포함한다.
이 view의 사용은 추천할만하지 못하다.
cat : user_catalog 에 대한 synonym.
chained_rows : ANALYZE LIST CHAINED ROWS 명령에 대한 default table.
clu : user_clusters 테이블의 synonym.
code_pieces : dba_object_size 와 user_object_size view를 create 시에 사용됨.
code_size : dba_object_size 와 user_object_size view를 create 시에 사용됨.
col : Oracle 5.0version 호환정보를 포함하고 있다.
cols : user_tab_columns view 의 synonym.
column_privileges : user가 부여한권한,부여받은권한, owner인권한,
또는 PUBLIC에게 부여받은 권한에 대한 칼럼정보.
Dba_2pc_neighbors : 진행중인 트랜잭션에 대한 연결 및 종료에 대한 정보.
Dba_2pc_pending : recovery를 기다리는 분산된트랜잭션에 대한 정보.
Dba_all_tables : 데이터베이스내의 모든테이블(object table, relational table).
Dba_audit_exists : "AUDIT NOT EXISTS" and "AUDIT EXISTS"에 의해 생성된 감사추적요소.
Dba_audit_object : 시스템내의 모든 object에 대한 감사추적기록.
Dba_audit_session : 세션연결과 종료에 관련된 모든 감사 추적기록.
Dba_audit_statement : GRANT, REVOKE, AUDIT, NOAUDIT, ALTER SYSTEM 관련된 감사추적기록.
Dba_audit_trail : 모든 감사추적요소.
Dba_blockers : 누군가가 스스로 걸지않은 lock이 해제되기를 기다리는 session정보.
Dba_catalog : 모든 데이터베이스 table, views, synonyms 과 sequence에 대한 정보.
Dba_clu_columns : cluster칼럼과 table칼럼의 mapping정보.
Dba_clusters : 데이터베이스내에 있는 모든 cluster.
Dba_col_comments : 데이터베이스내의 모든 table, views의 칼럼에대한 comments.
Dba_col_privs : 데이터베이스내의 칼럼에 대한 모든권한.
Dba_coll_types : 데이터베이스내의 모든 collection type, VARRAYs, nested tables,
object tables 등에 대한 정보.
Dba_constraints : 모든테이블에 대한 constraint(primary, check, unique,
referential integrity, with check option on a view, with read only on a view) 정보.
Dba_cons_columns : constraint 정의안에 있는 access가능한 칼럼에 대한 정보.
Dba_data_files : 데이터베이스파일에 관한 정보.
Dba_db_links : 데이터베이스내의 모든 Link.
Dba_Ddl_locks : 데이터베이스내의 모든 DDL lock과 DDL lock이 현저하게 요구되는 사항에 관한정보.
Dba_dependencies : object 에 대한 Dependence.(REF, HARD)
Dba_directories : 데이터베이스내의 모든 directory objects.
Dba_Dml_locks : 데이터베이스내에 구성된모든 DML lock과 DML lock이 현저하게 요구되는사항에 관한정보.
Dba_errors : 데이터베이스내의 저장된 object에 대해 가장최근에 발생된 error.
Dba_exp_files : export파일에 대한 정보.
Dba_exp_objects : 점진적으로 export 되고있는 object에 대한 정보.
Dba_exp_version : 가장최근에 export된 session에 대한 version 정보.
Dba_extents : 데이터베이스내의 모든 세그먼트를 이루는 extents에 대한 정보.
Dba_free_space : 모든 테이블스페이스내의 free extents의 정보.
Dba_free_space_coalesced : 테이블스페이스내의 합쳐진 공간에 대한 통계정보.
Dba_indexes : 데이터베이스내의 모든 index. 통계정보를 얻기위해 Analyze를 사용.
Dba_ind_columns : 모든테이블과 클러스터에서 인덱스를 구성하는 칼럼에 대한정보.
Dba_ind_partitions : 각각의 index파티션에 대해서, 파티션정보, 파티션에대한
storage 매개변수, Analyze에 결정된 파티션통계자료.
Dba_jobs : 데이터베이스에 있는 모든 Jobs.
Dba_jobs_running : 데이터베이스내에 현재 실행중인 모든 Jobs.
Dba_libraries : 데이터베이스내의 모든 libraries.
Dba_lobs : 모든 테이블에 포함된 LOBs.
Dba_locks : 데이터베이스내에 생성된 모든 lock, latch과 lock,latch가
현저하게 요구되는 사항에 대한 정보.
Dba_method_params : 데이터베이스내에 type에 대한 method 매개변수.
Dba_method_results : 데이터베이스내에 type에 대한 method results.
Dba_nested_tables : 모든테이블내에 포함된 nested table에 대한 정보.
Dba_object_size : PL/SQL object에 대한 size, bytes.
Dba_object_tables : 데이터베이스내에 모든 object tables.
Dba_objects : 데이터베이스내에 모든 objects.(index partition, table partition,
package,package_body,trigger)
Dba_obj_audit_opts : 모든 table, view에 대한 감사 option.
Dba_part_col_statistics : 모든 table 파티션에 대한 칼럼통계와 그래프정보.
Dba_part_histograms : 모든 table 파티션의 histogram에 대한 데이터(endpoint).
Dba_part_indexes : 모든 partition index에 대한 정보.
Dba_part_key_columns : 모든 partition된 object에 대한 분할키칼럼정보.
Dba_part_tables : 모든 partition된 table에 대한 정보.
Dba_priv_audit_opts : 시스템과 user에 의해 감사를 받고있는 시스템 privileges.
Dba_profiles : 모든 profiles과 해당 profile의 limit을 나타냄.
Dba_queue_schedules : 메시지를 전달하는 schedule.
Dba_queue_tables : 데이터베이스내에 생성된 모든 queue테이블의
queue type의 name과 type.
Dba_Queus : 데이터베이스내의 모든 queue에 대한 동작특성.
Dba_rchild : refresh group 안의 모든 children object.
Dba_refresh : 모든 refresh group 에 대한 정보.
Dba_refresh_children : refresh group 안의 모든 object에 대한 정보.
Dba_refs : 데이터베이스내의 모든 테이블의 REF칼럼과, REF 속성을 가진 칼럼.
Dba_refistered_snapshot_groups : 모든 snapshot 사본 그룹.
Dba_registered_snapshots : 지역테이블의 원격snapshot 에 대한 정보.
Dba_rgroup : 모든 refresh group.
Dba_roles : 모든 데이터베이스내에 존재하는 roles.
Dba_role_privs : user와 role에 부여된 role에 대한 정보.
Dba_rollback_segs : rollback segments 에 대한 정보.
Dba_segments : 모든 데이터베이스 segment에 대한 할당된 storage에 대한 정보.
Dba_sequences : 모든 데이터베이스내의 sequences 에 대한 정보.
Dba_snapshot_logs : 모든 데이터베이스내의 snapshot_logs.
Dba_snapshot_refresh_times : snapshot refresh 한 시간.
Dba_snapshots : 모든 데이터베이스내의 snapshots.
Dba_source : 모든 데이터베이스내의 저장object 의 source를포함.
Dba_stmt_audit_opts : system, user에 의한 현재의 감사option에 대한 정보.
Dba_synonyms : 데이터베이스내의 모든 synonyms
Dba_sys_privs : user에게 부여된 system privilege와 role.
Dba_tab_col_statistics : Dba_tab_columns view에 있는정보에 대한 칼럼통계와 그래프정보
Dba_tab_columns : 모든 table, view, cluster에 대한 칼럼정보. Analyze명령어사용.
Dba_tab_comments : 데이터베이스내의 모든 table, view에 대한 주석.
Dba_tab_histograms : 모든 table의 칼럼에 대한 histogram.
Dba_tab_partitions : 각각의 table partition에 대해서, partition level의 partition정보와,
partition의 storage매개변수 ,Analyze 에의해 결정된 여러 partition통계정보.
Dba_tab_privs : 모든 데이터베이스내의 object에 부여된 권한.
Dba_tables : 모든 데이터베이스내의 관계형테이블에 관한정보.Analyze로 통계정보를 얻을수 있다.
Dba_tablespaces : 모든 테이블스페이스에 관한정보.
Dba_triggers : 모든 데이터베이스내의 trigger 정보.
Dba_trigger_cols : 모든 trigger에서 사용된 칼럼정보.
Dba_ts_quotas : 모든 user에게 할당된 tablespace.
Dba_type_attrs : 데이터베이스내의 type에 대한 속성.
Dba_type_methods : 데이터베이스내의 모든 type에 대한 methods.
Dba_types : 데이터베이스내의 모든 추상적데이터type.
Dba_updatable_columns : join view에서 데이터베이스관리자가
update할수있는칼럼정보.
Dba_users : 데이터베이스내의 모든 user정보.
Dba_views : 모든 데이터베이스내의 view의 text.
Dbms_alert_info : 등록된 alert정보.
Dbms_lock_allocated : 사용자에게 할당된 lock정보.
Deptree : utldtree.sql 에의해 생성되며, object의 dependency tree정보를 포함함.
'Sys' user인 경우. 이 object에 관련된 공유커서를 나타내고,
다른 user인 경우공유커서이외의 object를 나타낸다.
다른 user는 공유커서정보를 얻기위해, Sys.deptree를 access할수있다.

Dictionary : data dictionary table, view에 대한 정보.
Dict_columns : data dictionary table, view에 대한 칼럼.
Error_size : Dba_obejct_size 와 user_obejct_size view를 create 할때 사용된다.
Exceptions : 무결성제약조건에 위배되는 정보를 포함. utlexcpt.sql 로 생성.
File_lock : 병렬서버view. 초기화파라미터 GC_FILE_TO_LOCKS 에 명시된,
데이터파일에 PCM lock의 mapping정보.
File_ping : 병렬서버view.각데이타파일에 할당된 block의 수.
GC_FILES_TO_LOCKS 최적값을 구하기 위해 현존하는 데이터파일의
access방법을 결정하는데 이 정보를사용할 수 있다.
FILEXT$ : DBA_DATA_FILES 와 동일. (DBA_DATA_FILES의 사용을 추천)
GLOBAL_NAME : 현제 데이터베이스의 유일한 이름.
HS_ALL_CAPS : 모든 비 Oracle Data store (FDS) 와 관련된 특성에 관한정보.
HS_ALL_DD : 모든 비 Oracle Data store(FDS)에 대한 Data dictionary.
HS_ALL_INITS : 비 Oracle Data store(FDS)에 대한 초기화 매개변수.
HS_BASE_CAPS : 비 Oracle Data store(FDS)에 대한 기본특성에 관한정보.
HS_BASE_DD : 비 Oracle Data store(FDS)에 대한 Data dictionary.
HS_CLASS_CAPS : 비 Oracle Data store(FDS)에 포함된 class-specific 특성정보.
HS_CLASS_DD : 비 Oracle Data store(FDS) class_specific data dictionary.
HS_CLASS_INIT : 비 Oracle Data store(FDS) class-specific 초기화 매개변수.
HS_EXTERNAL_OBJECT_PRIVILEGES : user에게 부여된 object권한.
HS_EXTERNAL_OBJECTS : oracle server에서 access가능한 external obejct.
HS_EXTERNAL_USER_PRIVILEGES : 어느 특정object에 국한되지않은 모든 부여된권한
HS_FDS_CLASS : 비 oracle (FDS) class 에 관한 정보.
HS_FDS_INST : 비 oracle (FDS) instance에 관한정보.
HS_INST_CAPS : instance-specific 특성정보.
HS_INST_DD : 비 oracle (FDS) instance-specific data dictionary 변경정보.
HS_INST_INIT : 비 oracle (FDS) instance-specific 초기화 매개변수정보.
IDEPTREE : UTLDTREE.sql 로 생성하고, 관련tree를 나타냄.

Deptree의 자동정렬버젼.
INDEX_HISTOGRAM : Analyze index...validate structure 명령에 대한정보.
INDEX_STATS : 마지막 Analyze index..validate structure 명령에 대한정보.
NLS_DATABASE_PARAMETERS : 데이터베이스의 NLS 매개변수.
NLS_INSTANCE_PARAMETERS : instance의 NLS 매개변수.
NLS_SESSION_PARAMETERS : user session의 NLS 매개변수.

OBJ : user_objects 의 synonym.
PARSED_PIECES : Dba_object_size, User_object_size view를 생성시에 필요.
PARSED_SIZE : Dba_obejct_size, User_object_size view를 생성시에 필요.
Plan_table : explain plan의 결과에 대한 table. utlxplan.sql로 생성.
Product_component_version : Oracle 제품군의 버전과 상태설명.


Pstubtbl : Pstub utility에 의해 생성된 stub에 관한정보.
Publicsyn : public synonym 에 관한 정보.
Public_dependency : object와 관련된 dependencies.(parent object)
Resource_cost : 각각의 resource에 대한 cost.
Resource_map : 각각의 resource에 대한 정보.(resource name, resource number)
Role_role_privs : 다른 role에 부여된 role정보.(user가 access가능한 role에 한해)
Role_sys_privs : 다른 role에 부여된 system role정보(user가 access가능한role에 한해)
Role_tab_privs : 다른 role에 부여된 table privileges정보.
(user가 access가능한role에 한해)

SEQ : user_sequences 의 synonym.
Session_privs : 현재 user에게 사용가능한 권한.
Session_roles : 현재 user에게 사용가능한 roles.
Source_size : Dba_object_size, User_object_size view를 생성시 필요.
Stmt_audit_option_map : 감사 option type code정보.
Syn : user_synonyms 에 대한 synonym.
Synonyms : Oracle ver 5.와 호환성을 포함. not recommend
Syscatalog : Oracle ver 5.와 호환성을 포함. not recommend
Sysfiles : Oracle ver 5.와 호환성을 포함. not recommend
Syssegobj : Oracle ver 5.와 호환성을 포함. not recommend
System_privilege_map : system privilege code에 대한 정보.
Sys_objects : object ID와 object type 그리고 segment data block주소를 매핑하는정보.
Tab : Oracle ver 5.와 호환성을 포함. not recommend
Table_privileges : user가 부여한, 부여받은, 소유한, 그리고 PUBLIC으로
부여된 object 권한정보. Oracle ver 6.과 호환성을 포함. not recommend.
Table_privilege_map : access 가능한 권한code/권한명칭 정보.
Tabs : User_tables 의 synonym.
Tabquotas : Oracle ver 5.와 호환성을 포함. not recommend
Trusted_servers : 분산환경에서 서버가 신뢰할만한지를 나타냄.
Tp_pitr_check : catpitr.sql 에 의해 생성. 테이블스페이스의 point-in-time복구를
방해할지도 모르는 dependencies혹은 restriction에 관한 정보제공.
Ts_pitr_objects_to_be_dropped : 테이블스페이스의 point-in-time복구수행의 결과
손실된 object에 대한 정보. (point-in-time recovery의 경우만 해당).
User_all_tables : user가 사용가능한 테이블(object table, relational table)정보.
User_arguments : user가 access가능한 object의 매개변수정보.
User_Audit_object : cataudit.sql로 생성. object에 관련된 감사추적기록.
User_Audit_session : cataudit.sql로 생성. user의 연결/종료에 관련된 감사추적기록.
User_Audit_statement : cataudit.sql로 생성. user에 의해 실행된 GRANT,REVOKE,
AUDIT, NOAUDIT, ALTER SYSTEM 명령에 대한 감사추적기록.


User_Audit_trail : user와 관련된 전반적인 사항의 감사추적기록.
User_catalog : user 소유의 table, views, synonyms, sequences 의 이름과 type.
User_clusters : user소유의 cluster.
User_clu_columns : user table 의 칼럼과 cluster칼럼과의 매핑테이블.
User_col_comments : user 의 table, view의 칼럼에 대한 주석.
User_col_privs : user 가 소유한, 부여한, 부여받은 칼럼에 대한 권한.
User_col_privs_made : user 소유 object의 칼럼에 대한 권한.
User_col_privs_recd : user가 부여받은 칼럼에 대한 권한.
User_coll_types : user가 명명한 collection type정보.
User_constraints : user소유 테이블의 제약조건정의.
User_cons_columns : user소유 제약조건에 정의된 칼럼에 대한정보.
User_db_links : user소유 데이터베이스링크에 대한정보.
User_dependencies : user소유 object에 대한 dependencies.
User_errors : user소유 저장 object에 대한 현재의 에러.
User_extents : user소유 object에 속하는 세그먼트의 extent 정보.
User_free_space : user가 access가능한 테이블스페이스내의 free extent 정보.
User_indexes : user 소유의 indexes. Analyze명령을 사용해야함. 병렬서버를 지원.
User_ind_columns : user소유 index 또는 user소유 table 의 칼럼정보.
User_ind_partitions : user소유의 index partition각각에 대한설명과, partition정보,
partition의 storage 매개변수, Analyze명령으로 결정된 여러partition통계
User_jobs : user소유의 모든 job.(export/import, execution)
User_libraries : user소유의 모든 libraries .
User_lobs : user소유의 table에포함된 LOBs정보.
internal LOBs( BLOBs, NCLOBs) 만해당, external LOBs(i.e, BFILES)은 아님.
User_method_params : user type의 method 매개변수.
User_method_results : user type의 method 의 results.
User_nested_tables : user소유 테이블에 포함된 nested tables.
User_object_tables : user가 사용가능한 object table.
User_objects : user소유의 object.(index partition, table partition, package,
packagebody, trigger)
User_object_size : user소유의 PL/SQL object.
User_obj_audit_opts : cataudit.sql로 생성. user소유의 table,view에 대한 감사option
User_part_col_statistics : user소유의 tablepartition정보에 대한 칼럼통계와 그래프정보.
User_part_histograms : user가 access할수있는 table partition의 histogram에 대한
그래프데이터(end-pointer).
User_part_key_columns : user소유의 partition object의 partition key칼럼에 대한정보.
User_part_indexes : 모든 user소유의 partition index의 partition정보.
User_part_tables : user소유의 partition table에 대한 object 레벨의 partition정보.

User_password_limits : user에게 적용된 password profile parameter.
User_queue_tables : user소유 스키마에 생성된 queue table내부의 queues정보.
User_Queues : user스키마의 모든 queue에 대한 동작 특성을 나타냄.
User_refresh : 모든 refresh group.
User_refresh_children : user가 소유한 refresh group 내부의 object에 관한정보.
User_refs : user소유테이블의 object type칼럼중 REF칼럼, REF속성.
User_resource_limits : 현재 user의 resource 한계.
User_role_privs : user에게 부여된 roles.
User_segments : user오브젝트에 포함된 데이터베이스 segments의 storage할당정보.
User_sequences : user 소유의 sequences.
User_snapshots : user 가 볼수있는 snapshots.
User_snapshot_logs : user 소유의 모든 snapshot logs.
User_source : user소유 저장 objects 의 모든 text source.
User_snapshot_refresh_times : snapshot refresh time.
User_synonyms : user소유의 synonym.
User_sys_privs : user에게 부여된 system 권한.
User_tab_col_statistics : user_tab_columns view에 대한 칼럼통계와
그래프정보를 나타냄.
User_tab_columns : user소유의 table, view, cluster의 칼럼정보.(Analyze명령사용)
User_tab_comments : user소유의 table, view에 대한 주석.
User_tab_histograms : user소유 table의 칼럼에 대한 histogram.
User_tab_partitions : user소유 table partition에 대한, partition 레벨의 분할정보와,
partition의 storage매개변수, Analyze에 의해 집계된 여러통계정보.
User_tab_privs : user가 소유한, 부여한, 부여받은 object에 대한 권한 정보.
User_tab_privs_made : user가 소유한 object에 관한 모든 권한.
User_tab_privs_recd : user가 부여받은 object 권한정보.
User_tables : user소유의 relational table에 대한 정보. (Analyze명령사용)
User_tablespaces : user가 access 가능한 tablespaces에 대한 설명.
User_triggers : user가 소유한 triggers 정보.
User_trigger_cols : user가 소유한 또는 user테이블에 있는 trigger안의 column 정보.
User_ts_quotas : user에게 할당된 tablespace quotas 정보.
User_types : 테이블안의 user소유의 type.
User_type_attrs : user type의 속성을 나타냄.
User_type_methods : user type의 methods를 나타냄.
User_updatable_columns : join view에서 사용자에게 update가 허용된 칼럼정보.
User_users : 현재 user에 관한 정보.
User_views : user 소유의 view에 대한 text.

반응형
Posted by [PineTree]
ORACLE/ADMIN2008. 8. 12. 02:19
반응형

(Oracle 10g) MMAN 백그라운드 프로세스를 통한 자동 공유 메모리 관리
========================================

PURPOSE
--------

이 문서에서는 Oracle database 10g의 Self Managing 기능 중의 하나인
자동 공유 메모리 관리 기능에 대하여 알아보고 SGA_TARGET 이라는
새로운 파라미터와 MMAN이라는 새로운 백그라운드 프로세스에 대하여
소개하기로 한다.


Explanation
-----------
1. 개요

SGA_TARGET 파라미터를 이용한 자동 SGA 튜닝이 어떻게 이루어지는지
그 원리를 알아보도록 한다.
자동 SGA 튜닝은 Oracle database 10g의 ADDM을 가능하게 하는 요소인
메모리 advisor가 그 기능을 수행한다.

자동 공유 메모리 관리 기능이 갖는 장점은 다음과 같은 몇 가지가 있다.
첫째, workload가 변함에 따라 자동으로 공유 메모리가 적용이 된다.
둘째, 메모리의 활용률을 극대화한다.
세째, out-of-memory라는 메모리 부족 발생으로 인한 에러를 예방할 수 있다.

즉, 오라클의 공유 메모리 영역 중 Shared pool size, Buffer cache size,
Large pool size, Java pool size를 매뉴얼하게 셋팅할 필요가 없다.
가용한 메모리의 사용을 보다 효과적으로 해주는 것 뿐만 아니라,
메모리 자원을 얻는 데 필요한 비용을 줄여줄 수 있다.
무엇보다 dynamic하고 flexible한 메모리 관리 구조를 통하여
오라클 데이타베이스 관리를 단순화시켜 준다.


2. MMAN 백그라운드 프로세스

공유 메모리의 자동 튜닝을 위하여 MMAN이라는 백그라운드 프로세스가
새로이 등장하였다.
MMAN이라는 백그라운드 프로세스가 5분 마다 주기적으로 수집한
작업 부하(Workload) 정보를 바탕으로 동적으로 구성이 된다.
메모리는 가장 필요한 곳으로 동적으로 할당이 된다.

SPFILE을 사용하면 MMAN이 변경한 파라미터들의 정보가 자동으로
SPFILE에 저장이 된다.
그러므로, 가능한 Oracle 9i 이상부터는 SPFILE 의 사용을 권장한다.
왜냐 하면 다음과 같은 세 가지 장점이 있기 때문이다.

첫째, 각 부분 크기의 권장안을 인스턴스 종료 후에도 보관할 수 있다.
둘째, 저장되어진 각 파라미터들의 사이즈는 데이타베이스 기동 시 할당이 된다.
세째, 각 파라미터들의 최적의 값을 찾는 데 드는 비용을 줄일 수 있다.

이렇게 MMAN 이라는 프로세스에 의해서 자동 공유 메모리 관리 기능이
구현이 되는 것이다.


3. SGA_TARGET 파라미터를 통한 자동 공유 메모리 관리

자동 공유 메모리 관리 기능을 사용하게 되면 오라클 SGA 관련 네 가지
파라미터들을 DBA가 일일이 셋팅할 필요가 없다.
오라클의 공유 메모리 크기는 SGA_TARGET 이라는 파라미터 하나로 다 조절이 된다.
SHARED_POOL_SIZE, DB_CACHE_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE 라는
파라미터들을 구성하는 데 관여하지 않아도 된다는 뜻이다.
과거에는 이러한 파라미터들을 너무 낮게 잡게 되면 성능도 저하될 뿐만 아니라
out-of-memory error인 ORA-4031 ERROR를 자주 만나게 되었고 메모리 낭비도 있었다.

그러나, Oracle database 10g의 New Feature는 SGA_TARGET이라는 새로운
파라미터만 셋팅하여도 되게 설계되었다.
SGA_TARGET이라는 파라미터는 해당 인스턴스에 필요한 SGA의 최대 크기를 나타낸다.
이 파라미터는 SGA 내의 모든 메모리들을 포함한다.
즉, Automatic하게 사이즈가 결정되는 파라미터, 매뉴얼하게 결정되는 파라미터,
startup 시에 할당되는 internal metadata 할당을 다 포함한다.
10g 이전 버젼처럼 SGA의 TOTAL 크기를 정확히 컨트롤하는 것이 어렵지가 않다는 뜻이다.

SGA_TARGET 파라미터를 셋팅할 때에는 다음을 염두에 두어야 한다.

1) SGA 영역 중 자동 구성으로 조절되지 않는 영역이 있는데
Redo Log buffer 와 Fixed SGA 영역, BUFFER KEEP, RECYCLE과 관련된 파라미터,
STREAMS POOL 관련 파라미터들이다.

2) SGA_TARGET 파라미터가 0으로 셋팅되면 자동 공유 메모리 기능은 DISABLE된다.
SGA_TARGET 파라미터의 DEFAULT 값은 0이다.
SGA_TARGET 파라미터가 0이 아닌 어떤 값으로 셋팅이 되어 있어도
SHARED_POOL_SIZE 또는 DB_BLOCK_BUFFERS 와 같은 파라미터들은 여전히
셋팅할 수는 있다.

3) SGA_TARGET 파라미터가 설정되어 있지 않거나 0 으로 셋팅되어 있을 경우,
자동 튜닝 파라미터들은 10g 이전 버젼에서와 같이 관리된다.
단, 예외는 있다. SHARED_POOL_SIZE가 그 경우인데, 내부적인 STARTUP 시
소모되는 오버헤드는 포함이 된다. 이 부분이 SHARED_POOL_SIZE에 포함이 된다.
Oracle 10g 이전 버젼에서는 이 부분이 SHARED_POOL_SIZE에 포함되지 않았으나
10g부터는 포함되게 되어 SHARED_POOL_SIZE를 좀 더 크게 잡아야 한다.
구체적으로 10g에서는 SHARED_POOL_SIZE를 32m 정도 더 크게 잡아야 한다.
예를 들어, Oracle 9i에서 SHARED_POOL_SIZE를 256M를 사용했었다면,
Oracle 10g에서는 같은 효과를 얻으려면 288M 정도로 잡아야 한다.

4) SGA_TARGET 파라미터가 0이 아닌 값으로 셋팅이 되어 있는 경우
자동으로 튜닝되는 SGA 파라미터들은 모두 기본적으로 0으로 셋팅이 된다.
이러한 파라미터들은 자동 공유 메모리 관리 알고리즘에 의하여 자동으로
사이즈가 결정이 된다.
그러나, 만약 이러한 자동 튜닝 파라미터들이 0이 아닌 어떤 값으로
셋팅이 되어 있다면 명시한 값은 자동 튜닝 알고리즘에 의해 최저값을
나타낸다.
예를 들어, SGA_TARGET 파라미터가 8G로 셋팅되어 있고, SHARED_POOL_SIZE가
1G로 셋팅되어 있다면 SHARED_POOL_SIZE는 절대 1G 아래로 떨어지지
않음을 뜻한다.

V$SGA_Dynamic_components 뷰를 조회하면 자동 튜닝 component들의
실제 사이즈를 확인할 수 있다.

SELECT component, current_size/1024/1024
FROM v$sga_dynamic_components;


4. 수동으로 튜닝되는 SGA 파라미터 설정

SGA의 몇몇 구성 파라미터들은 자동으로 튜닝되지 않아서 매뉴얼하게 튜닝을 해야 한다.
다음은 수동으로 튜닝되는 SGA 파라미터들이다.

- KEEP 및 RECYCLE 버퍼 캐시
- 멀티 블록 사이즈 캐시(DB_nK_cache_size)
- 로그 버퍼
- 스트림즈 POOL

수동으로 튜닝되는 파라미터들은 반드시 사용자에 의해 명시되어져야 한다.
이런 파라미터들은 10g 이전 버젼에서와 같이 정밀하게 크기가 제어되어야 한다.
매뉴얼하게 튜닝되는 이러한 파라미터들은 SGA_TARGET에는 포함되지만,
자동으로 튜닝되지는 않는다.
예를 들어, SGA_TARGET 이 8G이면 MANUAL하게 수동으로 조절되는 파라미터들의
사이즈의 합을 1G로 잡으면 7G는 자동으로 오라클이 알아서 설정한다.


5. SGA_TARGET 파라미터의 설정 변경

SGA_TARGET 파라미터의 RESIZING이란 SGA_TARGET 파라미터의
설정 변경을 의미한다.
SGA_TARGET 초기화 파라미터의 특징은 다음과 같다.

첫째, 운영 중에 동적으로 변경이 가능하다.
둘째, SGA_MAX_SIZE 내에서 크기를 증가시킬 수 있다.
세째, 모든 구성 요소의 최저값의 합까지 크기를 감소시키는 것이 가능하다.
또한, SGA_TARGET 파라미터의 설정은 오직 자동으로 튜닝할 수 있는
파라미터들에만 영향을 준다.

예를 들어, SGA_MAX_SIZE가 10G이고, SGA_TARGET이 8G로 가정을 한다.
만약, DB_KEEP_CACHE_SIZE가 1G로 셋팅이 된다고 하면 SGA_TARGET 을
최대 9G까지 늘릴 수 있다.
추가적인 1G는 SGA_TARGET에 의해 조절되는 자동 튜닝 파라미터들에게 분배가 된다.
DB_KEEP_CACHE_SIZE 는 영향을 받지 않는다는 뜻이다.
이것은 SGA_TARGET 파라미터를 줄일 때에도 해당된다.


6. 자동 공유 메모리 관리 비활성화

이 기능을 비활성화하려면 SGA_TARGET 파라미터를 0으로 설정하면 된다.
이렇게 SGA_TARGET 파라미터를 0으로 설정하게 되면 자동 튜닝 파라미터들은
그 당시의 값으로 설정된다.
그리고, 전체 SGA 크기에는 영향을 미치지 않는다.

예) 변경 전 값
SGA_TARGET=8G
SHARED_POOL_SIZE=1G

변경 후 값
SGA_TARGET=0
SHARED_POOL_SIZE=2G
DB_CACHE_SIZE=4G
LARGE_POOL_SIZE=512M
JAVA_POOL_SIZE=512M


SGA_TARGET이 8G로 셋팅되어 있고, SHARED_POOL_SIZE 파라미터가 1G로
설정되어 있다가 SGA_TARGET을 0으로 변경하면 자동 튜닝 파라미터들은
그 당시의 값으로 셋팅되고 전체 SGA 크기는 이전 SGA 크기를 초과하지 않는다.
SHARED_POOL_SIZE가 2G로 셋팅이 된 것은 내부적으로 측정하여 결정된 수치이다.


7. 동적 SGA 파라미터의 수동 변경

자동 튜닝되는 파라미터를 수동으로 변경할 경우 다음과 같은 영향을 가진다.

1) 만약 파라미터의 새로이 반영되는 값이 현재의 값보다 클 경우에는 즉시 반영이 된다.
그러나, 새로이 반영되는 값이 현재의 값보다 작을 경우에는 현재의 값에는
즉시 변화가 없고 최저값으로 셋팅이 된다.

2) 자동으로 튜닝되는 파라미터들을 수동으로 변경하였을 경우에는
SGA의 자동 튜닝 부분에 영향을 준다.
RESIZE 수행 시에 사용되는 메모리는 자동 튜닝 파라미터들로부터
더해지거나 감해질 뿐 매뉴얼하게 조절되는 파라미터들에는 영향을 주지 않는다.


Example
--------
다음은 자동 튜닝 파라미터 설정 시 V$PARAMETER 조회 결과 예이다.

SGA_TARGET=8G
DB_CACHE_SIZE=0
JAVA_POOL_SIZE=0
LARGE_POOL_SIZE=0
SHARED_POOL_SIZE=0

SELECT name, value, isdefault
FROM V$PARAMETER
WHERE name LIKE '%size%';

만약 SGA_TARGET 파라미터가 0이 아닌 값으로 셋팅이 되어 있는 경우
자동 튜닝되는 파라미터들은 값을 명시하지 말라는 뜻이다.
V$PARAMETER 뷰를 조회하였을 때 자동으로 튜닝되는 이러한 SGA 파라미터들의
값은 모두 0이다.
이것이 정상이고, isdefault 컬럼 값은 TRUE 이다.

즉, 자동 공유 메모리 관리 기능을 구현할 때에는 이 파라미터들은
매뉴얼하게 설정을 하지 않으면 된다.


Reference Documents
-------------------
Oracle Database 10g New Features

반응형

'ORACLE > ADMIN' 카테고리의 다른 글

sqlplus 사용법 (ORACLE)  (0) 2008.11.04
Oracle Data Dictionary Views  (0) 2008.09.12
Archive log mode 설정방법.  (0) 2008.06.19
다국어 지원을 위한 데이터베이스 구축 방안  (0) 2008.04.26
오라클에서 유니코드의 사용  (0) 2008.04.26
Posted by [PineTree]
ORACLE/ADMIN2008. 6. 19. 05:14
반응형

$ sqlplus "/ as sysdba" -- 접속한다.
 
-- archive log mode 인지 아닌지 상태 확인
 
SQL> archive log list
 
-- spfile 로 startup 되는지 pfile(init_SID.ora)로 startup 되는지 확인한다.
 
SQL> show parameter spfile
NAME                                               TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                                                string
 
-- spfile 로 startup 하지 않는 걸로 확인되었으므로, pfile(init_SID.ora)로 startup 되는 것으로 확인 됨. 모든 parameter 수정은 pfile(init_SID.ora)에서 하면 됨.
 
 
1. parameter 수정
initSID.ora 에서 아래 부분을 주석(#)을 제거하고 적절한 값으로 설정 후 저장합니다.
 
log_archive_start = true
log_archive_dest_1 = "location=/oracle/oradata/ORCL/archive reopen=60"   (아카이브파일의 경로)
log_archive_format = SID_%s.arc
 
# *.log_archive_start = true -- oracle10g에서는 주석처리
*.log_archive_dest_1 = "location=/oracle/oradata/ORCL/archive reopen=60"   (아카이브파일의 경로)
*.log_archive_format = SID_arch_%t_%s_%r.arc -- oracle10g에서는 file 형식을 다음과 같이 설정
 
* 문제 : ORA-32004: obsolete and/or deprecated parameter(s) specified
* 해결 : Remove the log_archive_start parameter.
* 설명 : As of 10g the log_archive_start parameter has been deprecated. When placing the database into archive log mode the starting of the ARCH process is implictly set to auto. It is no longer possible to have a database in archive log mode but not have automatic archiving enabled.
 
2. DB shutdown
SQL> shutdown immediate
 
3. startup mount
SQL> startup mount
 
4. archive log mode 변경
SQL> alter database archivelog;
 
5. DB open
SQL> alter database open;
 
6. DB shutdown
SQL> shutdown immediate
가능하다면 이 시점에서 DB를 Shutdown 한 뒤  cold backup 을 받고 사용하세요.
 
-- DB startup 후 archive file 이 정상적으로 쌓이는지 확인
 SQL> ALTER SYSTEM SWITCH LOGFILE;
 
-- 설정한 경로에 아카이브 파일이 생성되었는지 확인한다.
SQL> !

# ls /oracle/oradata/ORCL/archive/*

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

만약, spfile 로 DB start 시...

-- DB open 상태에서

SQL> alter system set log_archive_start=true scope=spfile;
SQL> alter system set log_archive_dest='/oradata/SUN3' scope=spfile;
SQL> alter system set log_archive_format='ORA10g_%s.arc' scope=spfile;

SQL> alter system set log_archive_dest='/oradata/SUN3' scope=spfile; -- oracle10 일 때
SQL> alter system set log_archive_format='ORA10_%t_%s_%r.arc' scope=spfile; -- oracle10 일 때

SQL> shutdown immediate;

SQL> startup mount;

SQL> archive log list

SQL> alter database archivelog;

SQL> archive log list

SQL> alter database open ;

반응형
Posted by [PineTree]
ORACLE/ADMIN2008. 4. 26. 06:24
반응형
다국어 지원을 위한 데이터베이스 구축 방안
지금까지 유니코드와 오라클에서 지원하는 유니코드에 대해서 살펴보았다. 다국어를 지원 데이터베이스를 생성하기 위해서 오라클에서 지원하는 유니코드를 어떻게 사용해야 할까?
두 가지 방법이 있는데
하나는 유니코드를 데이터베이스 character set으로 지정해서 유니코드 데이터베이스를 구축하는 방법이고,
다른 하나는 데이터베이스 character set에 관계없이 NCHAR (National Character) 데이터타입을 이용하는 방법이다.
오라클 9i부터 NCHAR 데이터타입에 유니코드 character set을 지정할 수 있게 되었으므로 두 번째 방법은 9i부터 고려할 수 있는 방법이다.
 
방법 자체를 놓고 보면 아주 간단하다고 할 수 있다.
데이터베이스 생성시 데이터베이스 character set에 유니코드를 지정해서 char나 varchar2에 다국어를 저장하거나 데이터 베이스의 character set을 변경하지 않고 다국어를 저장할 컬럼을 NCHAR (National Character) 데이터타입으로 설정해서 다국어를 저장하면 된다.
그렇지만 방법을 결정함에 있어서 프로그래밍 환경, 마이그레이션의 용이성, 성능, 데이터 타입, 어플리케이션의 타입 등 많은 요소들을 고려해야 하기 때문에 결코 쉬운 일은 아니다.
 
이제부터 두 방법을 사용할 때 어떤 character set을 지정하는 것이 유리한가를 살펴보자.
유니코드 데이터베이스 구축하면서 지정 가능한 character set은 UTF8, AL32UTF8, UTFE이다.
UTF8과 AL32UTF8은 유니코드에서 지정한 UTF-8과 거의 동일 특성을 가지고 있는데 UTF8의 경우는 보충(supplementary) character가 6byte를 차지한다는 점이 다르다. UTFE는 EBDIC platform을 위한 것이므로 일단 논외로 하겠다.
남은 UTF8과 AL32UTF8 중에서 UTF-8과 동일한 특성을 지닌 AL32UTF8을 사용할 것을 권장한다.
AL32UTF8은 보충(supplementary) character가 4byte를 차지하므로 UTF8에 비해서 공간을 덜 차지하고 유니코드에서 정한 UTF-8과도 동일하기 - 유니코드3.1기준에 맞기 - 때문에 보충(supplementary) character를 처리하면서 data conversion의 부하가 발생하지 않기 때문이다.
 
NCHAR 데이터타입의 character set은 데이터베이스 생성시 NATIONAL CHARACTER SET에 지정된 값에 따르며 UTF8과 AL16UTF16을 지정할 수 있다.
UTF8은 가변 길이기 때문에 스토리지를 절약할 수 있지만 처리시 스페이스를 붙이는 부하가 생기며, AL16UTF16은 고정 길이이기 때문에 처리시 스페이스를 붙이는 부하는 없지만 스토리지의 낭비를 초래할 수도 있다.
따라서 저장한 언어가 주로 어느 나라 언어인지 성능과 스토리지 절약 중 어떤 것에 중점을 둘 것인가를 고려해서 결정해야 한다.
 
여러 고려 요소들을 떠나서 가장 이상적인 방법은
AL32UTF8을 database character set으로 정하고 UTF8을 지원하는 언어로 프로그램을 개발해서 character set conversion이 없이 데이터가 오가는 것이다.
---코리아인터넷 닷컴 --
반응형
Posted by [PineTree]
ORACLE/ADMIN2008. 4. 26. 06:22
반응형
오라클에서 유니코드의 사용

1. 컬럼의 데이터타입에 nchar, nvarchar2를 사용
기존 DB캐릭터셋 변경 없음
캐릭터셋 변환으로 인한 부하 발생

2, DB캐릭터셋을 유니코드로 변경(AL32UTF8)
캐릭터셋 변환으로 인한 부하 없음



OTN Forum > Translated Oracle Product >
http://otn.oracle.co.kr/forum/forum_open_list.jsp?forum_cate=tran


[TIP] characterset 선정시 주의 사항

한글을 지원하는 characterset 에는 아래의 것들이 있습니다.

KO16KSC5601
- 완성형
- 한글 2350자 지원

KO16MSWIN949
- 일명 확장완성형(MS에서 windows 에 만들어 놓은 codepage)
- 한글 11172자 지원
- 한글 순서가 뒤죽박죽(2350자의 KSC5601 에서 지원하는 글자는 가나다 순이지만 그 외 글자는 남는 코드 여기저기에 들어가 있음)
- 8.0.6 이상에서만 사용가능 (8.0.5 이하 버전과의 db link나 client 가 8.0.5 등인 경우는 문제가 발생)

UTF8
- Unicode의 CES 중 하나(구현방법중 하나라고 생각하면 될 듯)
- ascii는 1byte, 그 외 유럽쪽은 2byte, 아시아는 3byte(CJK)
- 한글 11172자 지원(고어도 지원) 및 가나다 순 정렬
=> '가'와 '나'의 차이와 '나'와 '다'의 차이가 같음. 제대로 된 전화번호부를 만들 수 있을 듯...

AL32UTF8
- Unicode의 CES중 하나(9i부터 나온 것으로 알고 있음)
- Length semantics로 하면 4 byte( varchar2(3 char) 로 하면 12byte, UTF8에서는 9byte로 알고 있음)
- UTF8과 한글지원 부분은 똑같은 것으로 알고 있음.
- 8i는 미지원이므로 db link나 8i client 사용시 정상적 처리 불가

* AL16UTF16 (논외)
- Unicode의 CES중 하나
- national characterset 에서만 선택가능
- 모든 글자를 2byte or 4byte로 표현

고로

용량을 줄이면서 한글표현 다하고 싶고 8.0.5는 없다면 ko16mswin949를,
한글 표현 제대로 하면서 가나다 순으로 제대로 정렬될 필요가 있으면서 8i와 전혀 연동할 계획이 없다면 AL32UTF8,
위와 같지만 8i가 껴있다면 UTF8로 하시는 것이 좋을 듯 합니다.



UTF8과 AL32UTF8의 차이점

Supplement Character(UTF8에서 4바이트 이상을 차지하는)를 사용하는 것이 아
니라, 일반적인 다국어라면 UTF8와 AL32UTF8의 차이점은 거의 없다고 보시면 됩
니다.

Oracle 캐릭터셋으로서의:
UTF8은 UNICODE 3.0만을 지원하며, 앞으로도 계속 그렇게 유지됩니다.

하지만, UNICODE라는 캐릭터셋 자체도 www.unicode.org에서 보시면 알겠지만,
계속 진화하고 있습니다. 그래서 오라클에서도 새로운 데이타베이스 버전이 나
올 수록 그 순간의 최신 버전의 유니코드를 AL32UTF8을 통해 지원하게 되는 것
입니다.

AL32UTF8은 따라서,
9.0.x : Unicode 3.0
9.2.x : 3.1
10.1.x : 3.2
10.2.x : 4.0

입니다.

AL32UTF8은 9i 이상에서만 식별이 되므로, 8i와 데이타베이스 링크를 사용해야
한다고 할 때에는 UTF8을 사용하는 것이 좋습니다. 아니면 적어도 NLS_LANG을
UTF8로 해 주어야 할 것입니다. 핵심은 구버전과의 호환에 주의해야 한다는 것
입니다. 그리고, National Character Set으로도 설정할 수 없습니다.

성능에서 서로 차이가 있다고는 볼 수 없습니다.





1. 일반적으로 UTF8이 AL16UTF16보다 느리다는 것은 맞습니다. 아무래도
Variable width charset이 Fixed-width charset보다 느릴 수 밖에요. 하지만 얼
마나 느린가에 대해서는 정확히 말씀드릴 수는 없습니다. 하지만 순수하게 한
글 데이타만 저장할 것이 아니라면 AL16UTF16의 경우 영문 데이타 처리에 공간
적 비용이 매우 큽니다. 그래서 일반적으로는 AL32UTF8 charset을 유니코드
charset으로 사용합니다.

2. Web page processing을 UTF8로 하신다는 것은 다국어 지원 클라이언트를 원
하시는 것으로 받아들여집니다. 당연히 데이타베이스는 유니코드 기반의 데이타
베이스를 사용하셔야 합니다. 한글만 처리할 경우에는 Web Client 자체가 유니
코드 기반일 필요는 없겠지요. 그렇다고 안 되는 것은 아닙니다.

3. 그것은 KO16KSC5601 charset이 순수 한글만 포함된 것이 아니라 한자 4880
자, Hiragana 83자, katakana 86자를 포함하고 있기 때문입니다.

nvarchar2컬럼에 데이터입력
4. TO_NCHAR 또는 N''data''를 이용하시면 되겠습니다.
INSERT INTO ... VALUES(TO_NCHAR(''Data''), N''Data'',..);



UTF8과 KO16KSC5601은 성능 이외의 중요한 차이점이 있습니다.

KO16KSC5601은 한글 완성형(KSC5601)을 지원하는 캐릭터셋으로 한글 2350자, 한
자 4880자, 히라카나와 카타카나 53자를 포함한 캐릭터셋입니다. 2바이트를 원
하신다면 차라리 KO16MSWIN949를 선택하셔야 합니다. 운영체제는 전혀 상관없습
니다. 유닉스에서도 KO16MSWIN949를 문제없이 사용할 수 있습니다.

UTF8을 사용하면 공간 활용도가 줄어들 것입니다. 하지만 한글을 정렬해야 할
작업이 많은 경우 오히려 높은 성능을 보여줄 수 있습니다.

KO16MSWIN949는 상대적으로 공간을 절약할 수 있습니다. 하지만 한글 정렬시
UNICODE_BINARY로 정렬해야 하며 정렬의 성능이 좋지 않을 수 있습니다.

실제 트랜잭션들이 과도하게 몰려 바쁘지 않은 이상 한 트랜잭션에서 느낄 수
있는 성능의 차이는 크지 않습니다.

데이타에서 한글과 영문의 빈도, 사용자 수를 조사하시어 시뮬레이션 해 보신
후 결정하시는 것이 좋을 것 같습니다.




혹 유사한 고민을 하시는 분들이다 멀티랭귀지/멀티캐릭터셑 프로젝트를 하시는
분들께 도움이 될까 하여 결과를 올립니다.

-
1. 우선 멀티 랭귀지/캐릭터 셑을 지원하기 위해 캐릭터셑들의 슈퍼셑인 유니코
드를 DB charset으로 설정하셔야 합니다.

2. 사용자와의 인터페이스 부분 (웹서버든 WAS이든) 에 default charset을 설정
하실 수 있으니 UTF-8등의 유니코드로 설정 하십시오.
이때 http header에 setContentType등을 활용하십시오.

3. jdbc connection은 thin dirver이면 그냥, OCI driver라면 NLS_LANG=.UTF-8
설정하십시오.

위 과정으로도 어떠한 변환 없이 다국어/다캐릭터셑 입출력이 가능합니다.


이제 사용자와의 인터페이스가 유니코드를 지원하지 않는 경우에 대해 이야기
해 보면,

1. 사용자의 캐릭터 셋 정보로 default charset을 설정합니다. (이 방법은 런타
임시에는 변경하기 힘드므로 권장되지 않음)

2. http header의 charset 부분을 사용자 캐릭터 셑으로 변경 하십시오.

3. 일부 웹서버의 경우 input tx를 위해 request에 setCharactersetEncoding으
로 사용자 캐릭터셋을 설정하십시오. (default charset을 설정하는 웹서버의 경
우 header의 contenttype내 charset보다 default charset을 우선합니다. 이런 경
우 set해주세요)

위 과정으로도 다국어/다캐릭터 처리를 해줄 수 있습니다.
원본 : 오라클에서 유니코드 사용
반응형
Posted by [PineTree]
ORACLE/ADMIN2008. 4. 2. 20:00
반응형

Writed by soya98 -- 2005.10.03 월 (soya98@naver.com)

(긁어가지 마시고 " 이 포스트를 내 블로그 담기"로 가져가세요!!

힘들게 정리한것입니다.)

 

OS       : CentOs

OACLE : 9.2.0.4

STATUS: 디비에 자료가 없는 거의 초기 상태에서 실행했다.

 

CentOs 에 설치한 오라클(9.2.0.4)이 한글이 깨지고 말썽이다.

인터넷을 돌며 찾아온 매뉴얼대로 했건만 그것도 믿지 못할 것이였으니..

(사실 믿지 못할 것들이다... 문서화된 책이 가장 신뢰감이 있지만 쩝.. 아쉬운대로..)

일단은 다 만든거 다시 깔기도 구찮고 해서 여러가지로 찾아본 결과 다음이 가장

정확한 답이였음을 알수 있었다. 

일단 중요한 데이타는 거의 없고 프로시져가 2개정도 생성되어 있었으면 테이블명 및

데이타 등은 숫자나 영문이였기에 과감히 실행을 했다.

 

==> 즉 데이타 보전은 확실히 못한다는 무시무시한 경고가 있었다.

 

(하지만 그렇게 많은 데이타들이 축적되기 전에 이런 문제가 벌써 발생 하지 않았을까 싶다.

이미 한글로 디비를 생성해서 보려고 한다면 한글은 다 깨졌을 것이고 이것은 데이타가 많이

쌓이기전에 즉, 오라클 데이터베이스를 생성한뒤 초기 설정에 해당되는 내용인것 이라고 추측 된다.)

 

==>바꾸고 보니 프로시저나 펑션에서 주석으로 깨진 한글 그나마 보이긴 하더라.

여전히 "옜옜옜" 과 같은 이해할수 없는 단어 들이였으나 ....

프로시져나 펑션들은 이미 만들어 놓은 것을 갖다가 올리는 것이므로 그다지 크게 문제될 것은 없었다. 또한 테이블의 데이타는 영문,숫자였으므로 그다지 변화가 없었다.)

 

다음은 서머리 내용!!

 

단.. 문제는 펑션이나 프로시져에 한글로된 주석이 있으면 한글표현은 되나 깨져서 보인다.

즉, 다시 올리고 나서 컴파일일 해줄것!!

( 위의 내용으로 추측가능한 것은 만약 테이블명이나 컬럼명 혹은 속에 있는 데이타가

한글이라면 아래의 내용을 실행하기 전에 반드시 해당데이타 등을 백업을 해주자. )

 

 

1. 오라클에서 한글이

??? 혹은 ¿¿ 식으로 깨지고 있었다.

 

예를 들면

 

SQL> select * from scott.emp;
select * from scott.emp
                    *
1행에 오류:
ORA-00942: ¿¿¿ ¿¿ ¿¿ ¿¿¿¿ ¿¿¿¿

 

2. 해당 메세지에 대해 찾아본 결과

Oracle 데이터베이스 생성시에 Character Set를 기본값으로 설정하게 되면 WE8DEC 로 설정

된다고 한다.!! 이런.. 메뉴얼에선 그냥 선택 하라고 했던게 화근이다.

 

토드 같은 툴로

desc props$ 를 입력한뒤 data 를 조회해 보자(보기가 깔끔해서 추천!!)

(혹은  sqlplus 나 ssh 같은 툴로

SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';

=>system ,sysdba 계정으로 조회가 가능하다.

혹은

select * from props$ where name='NLS_CHARACTERSET';

=>sysdba 계정으로만 조회가 가능하다.)

 

조회를 해보면 (그중 고쳐야 할 부분만 추려낸것이다.)

NAME                        VALUE$          COMMENT$

NLS_CHARACTERSET WE8ISO8859P1 Character set

와 같이 설정되어 있다.

제대로된 설정이라면(내가 원하는 제대로된 설정은 한글과 영문이

말그래도 "제대로" 보여지는 것이다.)

즉, VALUE$ 컬럼에 있는 값이 KO16KSC5601 혹은 KO16MSWIN949 이였어야 한다.

(보통은 KO16MSWIN949 을 많이 추천함

@_@ 참고 good!! KO16MSWIN949에 대해 설명이 쉽게 잘되있삼

http://cafe.naver.com/ramiyan.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=268

)

 

3. 이제는 바꾸어 보자!  WE8ISO8859P1 --> KO16KSC5601

(어짜피 한글사용을 하더라도 정확한 어법에 맞는것만 사용할것이기 때문에 

KO16KSC5601 를 선택했다.)

 

일단은  SSH 툴로 리눅스(CentOs) 에 원격 접속했다.(집에서 하느라 ㅡㅡ;;)

 

sqlplus "/as sysdba"

 

로 접속한다. 일단 디비를 셧다운 시킨뒤 마운트 상태에서 필요한 셋팅을 해주고

다시 디비를 구동한 다음에 캐릭셋을 변경하고 다시 셧다운 시킨뒤 스타트업으로 완전히

실행하는 방식이다. 아래와 같이 실행해 주자.

 

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> alter database character set internal_use KO16KSC5601;
SQL> SHUTDOWN IMMEDIATE; -- or NORMAL
SQL> STARTUP;

 

한글 캐릭셋

KO16MSWIN949
KO16KSC5601

 

유럽문자 지원 캐릭셋

WE8ISO8859P1

다른 자료들을 찾아보면

alter database character set internal_use KO16KSC5601;

부분이
ALTER DATABASE CHARACTER SET KO16KSC5601;

와 같이 되어 있다.

아래와 같은 방식으로는 절대 바꿀수가 없다.

 

ERROR at line 1:
ORA-12712: new character set must be a superset of old character set

와 같은 메세지가 뜬다. 이것은

"새로운 캐릭터셋은 반드시 기존 캐릭터셋의 Superset이어야만 한다"

는 의미로 해석이 된다.아래 블로그에서 유용한 자료를 찾았다.

 이렇게 하지 않으면 데이타가 보존이 되지 않는다고 한다.

(http://cafe.naver.com/mudong.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=548

의 캐릭터셋 변경의 실제 부분참고)

4. 자 이제 제대로 됬나 확인해보자

다음과 같이 아무렇게나 에러메세지를 발생해보자

(우리의 주특기 아닌가??)

 

SQL> select * from scott.emp;
select * from scott.emp
                    *
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다

 

desc props$ 도 다시 해보자. 2번의 sql을 다시 해보자~

 

반응형

'ORACLE > ADMIN' 카테고리의 다른 글

다국어 지원을 위한 데이터베이스 구축 방안  (0) 2008.04.26
오라클에서 유니코드의 사용  (0) 2008.04.26
오라클 파라미터 관련 사이트 링크  (0) 2007.12.13
DATABASE LINK 사용법  (0) 2007.12.07
oracle lock  (0) 2007.08.14
Posted by [PineTree]