블로그 이미지
BJcomm
bjcomm

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
04-20 00:07

centos 6.2 oracle 10g 설치

2014. 11. 25. 17:55 | Posted by bjcomm

1) 각종 환경변수 값 설정 ( 꼭 오라클 설치를 위해서만 필요한 것이 아닌 기본적 설정들 )

< 한글 manpages 설치 >
yum -y install man-pages-ko.noarch

< /etc/hosts >
127.0.0.1 mycent localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.3 mycent

< /etc/sysconfig/network >
NETWORKING=yes
HOSTNAME=mycent

< /etc/sysconfig/i18n >
LANG="ko_KR.UTF-8"
SYSFonT="en_US.UTF-8:en_US:en:ko_KR.eucKR:ko_KR:ko"

< /etc/redhat-release >
[root@mycent ]# cp /etc/redhat-release /etc/redhat-release.backup
[root@mycent ]# vi /etc/redhat-release
"CentOS release 6.2 (Final)" -> "redhat-4"로 변경

< /etc/sysctl.conf >
[root@mycent ]# cp /etc/sysctl.conf /etc/sysctl.conf.backup
[root@mycent ]# vi /etc/sysctl.conf
있는 항목은 값 수정
kernel.shmall = 2097152
kernel.shmmax = 536870912
없는 항목은 값 추가
kernel.shmmni = 4096
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
커널 매개변수 적용
[root@mycent ]# /sbin/sysctl -p

< /etc/security/limits.conf >
[root@mycent ]# cp /etc/security/limits.conf /etc/security/limits.conf.backup
[root@mycent ]# vi /etc/security/limits.conf
아래내용 추가
#@student - maxlogins 4
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
# End of file

< /etc/selinux/config >
[root@mycent ]# cp /etc/selinux/config /etc/selinux/config.backup
[root@mycent ]# vi /etc/selinux/config
"SELINUX=enforcing" -> "SELINUX=disabled"로 변경

< /etc/pam.d/login >
[root@mycent ]# cp /etc/pam.d/login /etc/pam.d/login.backup
[root@mycent ]# vi /etc/pam.d/login
아래내용 추가
session required pam_limits.so


2) 필수 패키지 설치

[root@mycent ]# yum install binutils-2* compat-libstdc++-33* elfutils-libelf* gcc-4.* gcc-c++-4.* glibc-2.* glibc-common-2.* glibc-devel-2.* glibc-headers-2.* ksh* libaio-0.* libaio-devel-0.* libgomp-4.* libgcc-4.* libstdc++-4.* libstdc++-devel-4.* make-3.* sysstat-7.* unixODBC-2.* unixODBC-devel-2.* pdksh* libXp


3) 오라클 계정 및 그룹 생성

[root@mycent ]# groupadd oinstall
[root@mycent ]# groupadd dba
[root@mycent ]# useradd -g oinstall -G dba oracle
[root@mycent ]# passwd oracle
[root@mycent ]# mkdir -p /opt/oracle/product/10.2.0/db_1 (설치대상경로)
[root@mycent ]# chown -R oracle:oinstall /opt/oracle
[root@mycent ]# chmod -R 775 /opt/oracle


4) 오라클 계정 환경변수 설정

[root@mycent ]# su - oracle
[oracle@mycent ]$ vi .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs
export PATH=$PATH:$HOME/bin

export TMP=/tmp;
export TMPDIR=$TMP;
export ORACLE_HOSTNAME=mycent;
export ORACLE_BASE=/opt/oracle;
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1;
export ORACLE_SID=orcl;
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export ORACLE_TERM=xterm;
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:.:$PATH;
export SHLIB_PATH=$ORACLE_HOME/lib:/usr/lib:/lib:/usr/local/lib;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/lib:/usr/local/lib;

if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi


5) 오라클 설치 프로그램 구동

oralce 계정으로 X-window 로긴
- 터미널 열고 export LANG=c 수행 (안그러면 설치 프로그램 글자가 다 깨짐)
- 오라클 설치 프로그램 경로에서 ./runInstaller 실행
- "Installation Method"에서 "Advanced Installation" 선택
- "Inventory directory and credentials"에서 "Operating System group name"에 oinstall 선택
- "Installation Type"에서 "Product Language"에서 Korean 추가 (영어는 기본선택)
- "Installation Type"에서 "Standard Edition" 선택
- "Home Details"에서 경로 확인
- "Prerequisite Checks"에서 모두 Succeeded인지 확인
- "Configuration Option"에서 "Create a database" 선택
- "Database Configuration"에서 "General Purpose" 선택
- "Database Configuration Options"에서 "Character set"에서 UTF-8 AL32UTF8 선택
- "Database Configuration Options"에서 "Create database with sample schemas" 선택
- "Database Storage Option"에서 "File System" 선택 및 DB 저장소 경로 확인
- "Backup and Recovery Options"에서 "Do not enable Automated backups" 선택
- "Database Schema Passwords"에서 "Use the same password for all the accounts" 선택
- "Summary"에서 출력 내용 전체 확인
- 설치 마무리 단계에서 아래 두개의 쉘 스크립트를 root권한으로 수동 실행(화면에 안내 나옴)
/opt/oracle/oraInventory/orainstRoot.sh
/opt/oracle/product/10.2.0/db_1/root.sh
- X-window 상에서의 설치과정 완료


6) 오라클 자동 시작/종료 설정

oracle 계정으로 수정
< /etc/oratab >
orcl:/opt/oracle/product/10.2.0/db_1:Y

root 계정으로 수정
< /etc/rc.d/rc.local >
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
su - oracle -c /opt/oracle/product/10.2.0/db_1/bin/dbstart
su - oracle -c /opt/oracle/product/10.2.0/db_1/bin/"lsnrctl start"


7) 오라클 사용 일반 사용자 계정 환경설정

[userid@mycent ]$ vi .bash_profile
# ORACLE 10g Env
export TMP=/tmp;
export TMPDIR=$TMP;
export ORACLE_HOSTNAME=mycent;
export ORACLE_BASE=/opt/oracle;
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1;
export ORACLE_SID=orcl;
export ORACLE_OWNER=oracle
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export ORACLE_TERM=xterm;
export NLS_LANG=KOREAN_KOREA.AL32UTF8
export PATH=$HOME/bin:$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:.:$PATH;
export SHLIB_PATH=$ORACLE_HOME/lib:/usr/lib:/lib:/usr/local/lib;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/lib:/usr/local/lib;


8) 오라클 기동

oracle 계정을 이용하여 실행
< 오라클 리스너 구동 >
[oracle@mycent ~]$ lsnrctl start

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 27-JAN-2012 12:27:46

Copyright (c) 1991, 2005, Oracle. All rights reserved.

Starting /opt/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /opt/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /opt/oracle/product/10.2.0/db_1/network/log/listener.log
Listening on: (DEscRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Listening on: (DEscRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=mycent)(PORT=1521)))

Connecting to (DEscRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 27-JAN-2012 12:27:48
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File /opt/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
(DEscRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DEscRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=mycent)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

< 오라클 DBMS 구동 및 종료 >
[root@mycent ]# sqlplus /nolog
SQL> connect orcl as sysdba
SQL> startup ( 오라클 구동 )
SQL> shutdown immediate ( 오라클 종료 )

* 일반계정에서 sqlplus 실행 안되는 현상 발생시 권한 설정

< 에러 메시지 >
[userid@mycent ]$ sqlplus /nolog
sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory

< 해결책 >
root 권한을 이용하여 수행
[root@mycent ]# chmod -R a+rX /opt/oracle/product/10.2.0/db_1

9) 클라이언트의 tnsnames.ora 내용 추가

ORCL =
(DEscRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 오라클 서버 IP주소)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)


10) 오라클 서버 접속 후 기본동작 확인

 

< scott 계정으로 접속 후 샘플 테이블 확인 >
select * from all_tab_columns
where owner not in ('XDB')
and owner not like '%SYS%'
;
=> BONUS, DEPT, EMP, SALGRADE 테이블이 보이는지 확인

< 한글 입출력 테스트 >
create table test_table (
num number
, id varchar2(20)
, name varchar2(50)
, address varchar2(100)
);
insert into test_table values(1, 'userid1', '홍길동', '서울');
insert into test_table values(2, 'userid2', '심형래', '부산');
insert into test_table values(3, 'userid3', '콩쥐', '대전');
insert into test_table values(4, 'userid4', '흥부', '광주');
commit;
select * from test_table;

 

 


* 한글 입출력을 위한 조치

 

[oracle@mycent ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jan 27 15:09:21 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn orcl as sysdba
Enter password:
Connected.
SQL> select userenv('LANGUAGE') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.WE8ISO8859P1

SQL> update props$ set value$='KO16KSC5601' where name='NLS_CHARACTERSET';
1 row updated.

SQL> commit;
Commit complete.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.
Total System Global Area 360710144 bytes
Fixed Size 1219424 bytes
Variable Size 113247392 bytes
Database Buffers 243269632 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.

SQL> select userenv('LANGUAGE') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.KO16KSC5601

 


* 오라클 클라이언트 프로그램에서 캐릭터셋 불일치 에러 발생시 조치

 

< 오라클 클라이언트 프로그램(토드 or GoldenView) 의 에러 메시지 >
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: character set name is not recognized

< 문제 확인 >
아래 쿼리 조회시 동일 타입에 대하여 2개 이상의 캐릭터셋이 조회되는지 확인

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
----------------- -------------
WE8ISO8859P1 VARCHAR2
KO16KSC5601 VARCHAR2
KO16KSC5601 CHAR
WE8ISO8859P1 CHAR
AL16UTF16 NCLOB
KO16KSC5601 CLOB
AL16UTF16 NVARCHAR2
KO16KSC5601 NVARCHAR2
WE8ISO8859P1 CLOB
AL16UTF16 NCHAR

< 문제 조치 >
- Make sure the parallel_server parameter in INIT.ORA is set to false or it is not set at all.
parallel_server 값이 false이거나 또는 해당 파라메터가 아예 설정되어 있지 않아야 함.

SQL> show parameter parallel_server;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
parallel_server boolean FALSE

- Run the next script in SQLPLUS connected "as sysdba"
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> COL VALUE NEW_VALUE CHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS
WHERE PARAMETER='NLS_CHARACTERSET';

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

SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;

SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;
-----------------------------------------------------------------------------------------
( 만약 여기서 ORA-12714: invalid national character set specified 에러가 발생한다면 아래 작업 수행, 해당 에러가 발생하는 이유는 오라클 9i이후에는 NATIONAL CHARACTER SET 은 UTF8과 AL16UTF16 만 제공하기 때문 )

아래 쿼리 조회시 이런식으로 지원되지 않는 값이 조회되면

SELECT PARAMETER, VALUE FROM NLS_DATABASE_PARAMETERS
WHERE PARAMETER in ('NLS_NCHAR_CHARACTERSET','NLS_CHARACTERSET');

PARAMETER VALUE
---------------------------------- ---------------
NLS_CHARACTERSET KO16KSC5601
NLS_NCHAR_CHARACTERSET KO16KSC5601

UPDATE sys.props$ SET VALUE$='AL16UTF16' WHERE NAME='NLS_NCHAR_CHARACTERSET';
이후 다시 실행하면 정상적으로 될 것이다.
-----------------------------------------------------------------------------------------

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
-- yes, 2 times startup/shutdown . This is not a typo
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;

다시 아래 쿼리를 조회했을 때 중첩되는 캐릭터셋이 조회되지 않으면 정상

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
----------------- -------------
KO16KSC5601 VARCHAR2
KO16KSC5601 CHAR
KO16KSC5601 CLOB
AL16UTF16 NCLOB
AL16UTF16 NVARCHAR2
AL16UTF16 NCHAR

만약 parallel_server 파라메터를 수정했다면 다시 원복시킨다.
위에서 수행한 스크립트들은 이미 저장되어 있는 데이터들을 바꾸는 것은 아니고, 단지 DB의 캐릭터셋을 저장된 모든 장소에서 강제적으로 다시 세팅하는 것이다.


12) VMware 네트워크 설정

VMware의 게스트 OS에 리눅스&오라클 설치 후 NAT 사용시
네트워크 NAT 설정에서 포트 포워딩 설정
sshd : 22 번
tnslsnr : 1521 번

 


* 오라클 설치 후 기타정보

Server Parameter Filename :
/opt/oracle/product/10.2.0/db_1/dbs/spfileorcl.ora

DB Control URL :
http://mycent:1158/em

The following J2EE Applications have been deployed and are accessible at the URLs listed below.
iSQL*Plus URL:
http://mycent:5560/isqlplus

iSQL*Plus DBA URL:
http://mycent:5560/isqlplus/dba

Enterprise Manager 10g Database Control URL:

 

출처 http://openness.tistory.com/119