### 솔라리스 - 오라클 8.1.6 설치하기 ###


Intel 이나 Sparc이나 설치에는 아무이상이 없습니다.

* 오라클 설치환경

- OS : 솔라리스 2.8 SPARC 버전
- RDBMS : 오라클 8.1.6 Enterprise
- System : Netra T1
- HDD : 18GB(최소운영용량 3GB)

* 환경설정 ( %,$ : 일반유저 Prompt, # : Root유저 Prompt )

설치환경의 오라클유저에게 설정해야 할 사항
- 관리자툴을 이용하여 사용자(oracle)와 그룹(dba)를 등록한다.
등록된 유저의 기본쉘은 csh로 설정한다.
# admintool
- 오라클 유저의 홈을 만들어서 셀환경을 설정하여 준다.
% mkdir -P /oracle/product/8.1.6
% vi .cshrc
.cshrc안의 내용에는 뒤쪽 참고 1의 내용 그대로를 입력하여 저장하면 된다.
- Root 유저를 이용하여 /oracle 디렉토리의 소유권을 변경한다.
# chown -R oracle:dba /oracle
- /etc/system 의 내용을 참고 4와 동일하게 변경한다.
- 이제까지 변경한 내용이 적용될 수 있도록 시스템을 Reboot한다.
- Reboot된 시스템의 환경을 확인하여 /etc/system의 설정이 적용되었는지 확인한다.
# sysdef
- Root유저를 이용하여 그래픽 모드를 변경하여 준다.
# xhost + cdm-svr(ip)
- oracle유저를 이용하여 화면모드를 설정한다.(cdm-svr은 hostname)
% setenv DISPLAY cdm-svr:0.0
- oracle유저를 이용하여 /cdrom/cdrom0에 있는 오라클을 실행한다
% ./runInstaller


* Oracle Universal Installer
작업의 진행상황은 각 안내문의 타이틀앞의 두개의 원을 확인하면 알 수 있다.
작업의 진행율에 따라 계기일식의 모양이 일어나기 때문에 완료가 되면 두개의 원이
완전히 겹치게 된다.

1. Welcome
오라클의 runInstaller를 실행하면 환영인사말이 나온다.
Next를 선택한다.

2. File Locations
Source는 products파일이 위치한 Full Path이다. 기본으로 설정되어 있으니 그대로 적용하면
된다. Destination은 서버측의 오라클 홈디렉토리의 Full Path를 적용한다.
설치자가 임의대로 사용하고자 하는 위치를 설정해 주면 된다.

예)/oracle/product/8.1.6
Next를 선택한다.

3. UNIX Group Name
유닉스 그룹명을 지정하는 부분이다.이전에 DB그룹명으로 등록된 이름을 적용하면 된다.

예) dba
Next를 선택한다.

4. orainstRoot.sh 실행하기
/tmp/OraInstall/orainstRoot.sh의 스크립트를 실행한다.
이때 root 유저를 사용하여 다른 터미널창에서 실행하기 바란다.

예) ./tmp/OraInstall/orainstRoot.sh
실행후 Retry를 선택한다.

5. Availcable Products
- Oracle8i 8.1.6.0.0
오라클 8.1.6 DB 서버설치
- Oracle8i Client 8.1.6.0.0
오라클 8.1.6 DB 클라이언트 설치
- Oracle8i Management Infrastructure 8.1.6.0.0
오라클 8.1.6 기본 클라이언트와 서버관리툴 설치
Oracle8i 8.1.6.0.0을 클릭한 후 Next를 선택한다.

6. Installation Types
인스톨 유형을 선택하는 부분이다.
- Typical(966MB)
가장 일반적인 인스톨 형태로 필요한 모든 툴을 설치한다.
- Minimal(798MB)
최소한의 기본적인 툴만을 인스톨한다.
- Custom
사용자가 직접 필요한 툴을 선택하여 인스톨을 결정한다.
우리는 여기서 Custom을 선택한다.
이유는 DB에서 한글을 사용하기 위해서이다. 위의 Typical과 minimal은 컴퓨터가 기본으로
선택되어 있는 양식을 그대로 설치하기 때문에 언어선택부분이 기본 영문으로 설정되어 있기
때문에 닥스오픈에서 한글내용을 검색하면 ????로 출력이 된다.
Custom을 선택하여 Korean을 추가선택 할 것이다.
Custom을 클릭한 후 Next를 선택한다.

7. Available Product Components
Oracle8i의 패키지를 추가하거나 제외시킬 수가 있다.
여기서 우리는 먼저 Product Languages..을 선택하여 Language Selection의 작업창에서 Available Languages에서 Korean을 찾아서 더블클릭을 하면 Selected Language부분에 추가가
될 것이다. OK를 선택한다.
그리고 나서 오라클 패키지에 대한 설치를 추가할 것과 제외할 것을 선정하여 선택한 다음
Next를 선택한다. 추가/제외를 모를경우 Next를 선택해도 무방하다.

8. Component Location
선택할 수 있는 Component인 Java Runtime Environment 1.1.8.10을 선택하여 설치할 수 있다.
그러나 그냥 Next를 선택한다.

9. Privileged Operating System Groups
데이터베이스의 관리자 그룹명과 운영그룹을 설정하는 부분이다.
이전작업에서 우리는 dba를 선택한적이 있다.
이곳에서도 역시 두 곳 모두 dba를 입력하여 준다.

10. Create Database
데이터베이스 생성에 대한 질문이다.
Yes를 클릭한 후 Next를 선택한다.

11. Database Identification
Global Database Name과 SID를 입력하는 부분이다.
작업환경에 맞게 입력하길 바란다. 본 문서에서는 ORA8로 입력하였다.
입력후 Next를 선택한다.

12. Database File Location
Directory for Database Files의 저장위치를 설정한다.
여기에서는 /oracle/data로 설정하였다.
입력후 Next를 선택한다.

13. Summary
이제까지 수행한 작업에 대한 확인절차이다.
꼭 필히 확인해야할 부분은 Product Language를 확인하여 English와 Korean이 있는지 확인을
하기 바란다.
확인이 끝났다면 Install을 선택한다.

14. Install
이제부터 선택된 패키지와 설정된 내용으로 설치가 시작된다.

15. Setup Privileges
Step8에서 /oracle/product/8.1.6/root.sh을 root 유저가 실행한다.
실행한 다음질문에 Yes 또는 default로 설정된 내용은 엔터를 입력하면서 수행한다.
완료가 되었다면 실행명령형 대화상자의 OK를 선택한다.

16. Net8 Configuration Assistant
Perform typical configuration을 클릭한 후 Next를 선택한다.

17. Oracle Database Configuration Assistant
데이터베이스에 사용될 응용프로그램의 주요 유형 선택이다.
- OLTP(온라인 트랜잭션 프로세싱)
- 데이터 웨어하우징
- 다목적
여기서 우리는 다목적을 클릭하고 다음을 선택한다.

18. 동시 접속 사용자
동시에 접속할 수 있는 사용자(Process)의 대략적인 수를 입력한다.
입력후 다음을 선택한다.

19. 데이터베이스가 기본으로 실행될 모드
- 전용서버모드(dedicate)
- 공유서버모드
전용서버모드를 클릭한 후 다음을 선택한다.

20. 데이터베이스용으로 구성할 옵션
SQL Plus Help를 선택하여 도움말을 설치한다. 다음을 선택한다.

21. 데이터베이스 정보변경
검토후 적절한 정보로 변경한다.
꼭 문자집합변경(charecterset)은 KO16KSC5601로 문자집합과 국가별 문자집합이
변경되었는지 확인하여야 한다.
초기화 파일명을 변경하고자 하면 관리가 가능한 적절한 디렉토리명으로 변경한다.
변경이 완료되었다면 다음을 선택한다.

22. 제어파일 매개변수 변경
제어파일에 대한 변경이다.
관리가 용이한 적절한 디렉토리명과 기타사항을 변경/수정한 후 다음을 선택한다.
그대로 진행하여도 무관하지만 디렉토리명이 길어지면 관리하기에 불편하다.

23. 시스템/도구/사용자/롤백/인덱스/임시
시스템 Size 200
도구 Size 8
사용자 Size 8
롤백 Size 256 Minimum 256 Initial 256 Net 256
인덱스 Size 54
임시 Size 128
정보를 확인후 적절하게 변경한다.
변경이 완료되었다면 다음을 선택한다.

24. Redo 로그 파일 매개변수
리두 로그파일 매개변수정보 변경사항이다.
변경후 다음을 선택한다.

25. 로그 매개변수
정보를 검토후 적절하게 변경한다. 아카이브로그사용은 사용하지 않는다.
변경후 다음을 선택한다.

26. SGA 매개변수
정보를 검토후 적절하게 변경한다. 변경후 다음을 선택한다.

27. 추적 파일 디렉토리
추적파일디렉토리에 대한 경로를 검토후 적절히 변경한다.
변경후 다음을 선택한다.

28. 데이터베이스 생성
- 지금 데이터베이스 생성
- 쉘 스크립트에 정보 저장
지금 데이터베이스생성을 클릭후 완료를 선택한다.

29. 데이터베이스 생성 작업 진행
다음의 작업이 순서대로 진행된다.
- Oracle 인스턴스 생성과 시작
- 데이터베이스 파일 생성
- 데이터 딕셔너리 뷰 생성
- PL/SQL 지원 추가
- 데이터베이스 생성 완료

30. End of Installation
오라클 8i의 설치가 완료되었습니다.
Exit를 선택하여 설치화면을 빠져 나오면 설치작업은 종료가 된다.


--- 참고사항 ----

* 솔라리스 Hostname IP 변경후 오라클 재설정
$Oracle_Home/network/admin/Listener.ora 파일내용에 HostName를 변경하면 된다.
$Oracle_Home : .cshrc에 설정된 오라클 홈디렉토리를 말한다.

* 오라클 DataBase 올리기
오라클 유저를 이용하여 작업을 수행한다.
% svrmgrl 오라클 서버매니저 실행
svrmgrl> connect internal 일반적인 접속방법(권장)
connect system/manager system 관리자로 접속하는 방법
connect scott/tiger scott 일반유저로 접속하는 방법(아이디/비밀번호)
svrmgrl> startup 오라클 Database 시작
svrmgrl> exit 오라클 서버매니저 나오기
% lsnrctl start 리스너 시작하기(오라클 연결 데몬)

* 오라클 DataBase 내리기
svrmgrl> connect internal
svrmgrl> shutdown 모든 시스템 사항을 무시하고 Database가 내려짐
shutdown immediate Process가 모두 내려진 다음에 Database가 내려짐
(권장)
shutdown abort Process는 남겨두고 Database가 내려짐
ctrl + D 모든 시스템 사항을 무시하고 Database가 내려짐
svrmgrl> exit 오라클 서버매니저 나오기
% lsnrctl stop 리스너 종료하기(오라클 연결 데몬)



참고 1. $ORACLE_HOME/.cshrc

#@(#)cshrc 1.11 89/11/29 SMI
umask 022
set path=(/bin /usr/oracle/product/8.1.6/bin /usr/bin /usr/ucb /usr/css/bin /opt/SUNWspro/bin /etc .)

setenv TERM vt100
setenv ORACLE_TERM vt100
setenv ORACLE_HOME /usr/oracle/product/8.1.6
setenv ORACLE_SID TTT
setenv ORACLE_OWNER oracle
setenv LANG ko
setenv NLS_LANG KOREAN_KOREA.KO16KSC5601
setenv EDITOR vi
setenv LD_LIBRARY_PATH $ORACLE_HOME/lib:/opt/SUNWspro/lib:/usr/lib:/opt/SUNWspro/SC5.0/lib:/usr/ccs/lib
set path=(/sbin /usr/bin /openwin/bin /opt/SUNWspro/SC5.0/bin $ORACLE_HOME/bin /usr/ccs/bin .)


* 변경된 쉘 정보 반영하기
# source .cshrc
# env 현재 적용된 환경정보 확인

참고 2. /etc/passwd

oracle:x:1001:11::/oracle/product/8.1.6:/bin/csh

참고 3. /etc/group

root::0:root,oracle
dba::11:root,adm,daemon,oracle

참고 4. /etc/system

forceload:sys/shmsys
forceload:sys/semsys
forceload:sys/msgsys

// 오라클 Shared memory 설정
set shmsys:shminfo_shmmax=251658240
set shmsys:shminfo_shmmin=50
set shmsys:shminfo_shmmni=256
set shmsys:shminfo_shmseg=256

// 오라클 세마포어 설정
set semsys:seminfo_semume=128
set semsys:seminfo_semmap=128
set semsys:seminfo_semopm=64
set semsys:seminfo_semmni=2048
set semsys:seminfo_semmni=2048
set semsys:seminfo_semmns=2048
set semsys:seminfo_semmnu=2048
set semsys:seminfo_semmsl=400 // 세마포어 실수량(Process 수)

// for/background 작업용 프로토콜 Msg 매개변수 설정 (IPC)
set msgsys:msginfo_msgmap=512
set msgsys:msginfo_msgmax=8192
set msgsys:msginfo_msgmnb=65536
set msgsys:msginfo_msgmni=256
set msgsys:msginfo_msgssz=8
set msgsys:msginfo_msgtql=512
set msgsys:msginfo_msgseg=8192

set maxusers=1000 // 최대유저수 정의
set max_nprocs=10000 // ps -ef 명령시 프로세스 출력수
set rlim_fd_max=1500 // 한 개의 프로세스가 관장하는 파일수
set rlim_fd_cur=128
set pt_cnt = 128 // /dev/ptXXXXX 가상터미널 수(Telnet)

감사합니다.
2005/07/05 15:15 2005/07/05 15:15
mysql을 설치하여 사용하다보면, 서버부하가 없음에도 불구하고 "Warning...too many connections...."라는 메시지와 함께 MySQL 이 죽는 경우가 있습니다.

원인은 Mysql의 실행환경변수 설정에 있습니다 .

우선 Mysql설치홈의 bin디렉토리에서 "./mysqladmin -u -p variables"라고 해보시면 다음과 유사한 결과를 얻으실수 있습니다.


max_connections | 1000

wait_timeout | 300



와 같은 것을 볼수 있습니다 .



max_connections는 mysql에 connect할수 있는 최대 갯수를 지정해 둔것입니다.

"too many connections"라는 메시지는 이 갯수를 초과해서 connect하려고 할때 발생하는 메시지입니다.



결론부터 말씀드리자면 이 갯수를 적절히 조절해야한다고 말씀드릴수 있습니다.

하지만, max_connections 아래에 있는 wait_timeout이란 variable은 connect된 후에 몇초간 지속적으로 연결을 유지할 것인가를 지정해 둔 것입니다.



이를 설명하기 위해서는 mysql_connect()와 mysql_pconnect의 차이점 그리고, mysql_close()함수에 대한 정확한 이해가 필요한데.



간단히 설명해 보자면, mysql_connect()함수로 DB connect를 했다면 해당스크립트가 종료됨과 동시에 mysql_close()함수를 호출하지않아도 자동으로 연결이 종료됩니다.



하지만, mysql_pconnect()함수는 해당스크립트가 종료된후 mysql_close()함수가 호출되었더라도 연결이 끊어지지않은채로 계속 연결을 유지하고 있습니다.



따라서, 얼핏보기에는 "too many connections"라는 에러메시지는 mysql_pconnect()라는 함수의 사용때문에 발생하는 것 같지만, 그런 이유도 있을수 있지만, 직접적인 이유는 그것이 아니라 MySQL의 메뉴얼을 보면 mysql_connect()함수를 사용하면 해당스크립트의 종료와 함께 연결이 종료된다고 되어있지만

./mysqladmin -u -p processlist"라는 명령어를 통해서 살펴보면 그대로 살아 있음을 알수 있습니다.

맨위에서 살펴보았던 "mysqladmin -u -p variables"의 결과로서 볼수 있는 여러가지 시작옵션들중 "wait_timeout"의 값만큼 서버에 그대로 연결을 유지한채로 남아 있는 것입니다.

따라서, 이것이 "too many connections"의 직접적인 이유인 것입니다.

그렇다면 문제의 해결은 간단하게

실행옵션을 주어서 이들 값들을 자기가 운용하고 있는 서버의 성능과 용도에 알맞게 수정해 주면 됩니다.

MySQL실행시에 주는 실행옵션값은 다음과 같습니다.

./safe_mysqld -O max_connections=1000 -O table_cache=256 -O wait_timeout=300 &


일반적으로 실행시킬때에는 기본옵션을 그대로 사용하는 "./safe_mysqld"라는 옵션을 사용하면.

이렇게 실행하면 36개의 MySQL시작옵션중에서 위의 3가지 옵션들만 값들을 임의로 지정하여 실행시킨 것입니다.

이렇게 실행시킨후에 다시 "mysqladmin -u -p variables"로 옵션들값을 확인해 보면 변경되어 있음을 알수 있을 것이다.



그리고, 참고로 리눅스 실행시에 mysql을 자동으로 시작하도록 설정해둔 /etc/rc.d/rc.local파일에도

위와 같이 옵션을 함께 주어서 실행하도록 설정하는 것을 잊지말기 바랍니다.
2005/07/05 14:56 2005/07/05 14:56
[root@op bin]# ./mysql -h localhost -u isseo -p isseo
Enter password:
ERROR 1203: User myunggoni@localhost has already more than 'max_user_connections' active connections

max_user_connections 는 서버에 허용되는 클라이언트 최대 수를 나타냅니다.
max_user_connections 가 100 으로 설정되어 있을때 100을 초과하는 클라이언트의
접속은 허용되지 않습니다.
웹으로 접속하도록 한 프로세스건, 쉘에서 mysql 클라이언트로 접속하건 물론
마찬가지입니다.
동시 사용자수가 현재의 설정값보다 많지 않은지 또는 프로그램에서 DB 커넥션을
제대로 릴리즈 하지 않는지를 점검할 필요가 있습니다.

/etc/my.cnf 에서 max_user_connections 파라메터 값을 변경하실 수 있습니다.
또한, mysqladmin 유틸리티 또한 하나의 커넥션을 맺어야 하므로 이 에러 상황에서는
mysqladmin 유틸리티의 실행 또한 동일한 에러를 발생할 것입니다.

DB 를 셧다운 한 후 파라메터 값을 변경할 것을 권장합니다.
2005/07/05 14:52 2005/07/05 14:52