Author Archives: zzori

신우편번호(5자리, 도로명주소) 를 오라클(Oracle) DB 에 넣기

1. 우체국 사이트에서 제공하는 신우편번호(도로명주소) 데이터를 다운로드 받습니다.
다운로드 : https://www.epost.go.kr/search/zipcode/areacdAddressDown.jsp

2. 각 시도별로 나누어져 있는 파일중에 우선 세종특별자치시.txt 파일을 Excel 로 파일을 오픈합니다. 아래의 화면이 나오면 다음을 선택합니다.

3. 구분기호에 기타 항목을 체크하고 “|” 를 넣고 데이터 미리보기에 잘 보이는지 확인합니다. 그리고 다음을 누릅니다.

4. 데이터 미리보기에서 우편번호 위의 일반부터 끝까지 선택하여 데이터 서식을 모두 텍스트로 변경하고 마침을 누릅니다.

5. 그럼 엑셀에서 대략 아래와 같이 확인하실 수 있습니다.

6. Excel 메뉴중 파일 – 다른 이름으로 저장 – 파일 형식을 CSV UTF-8(쉼표로 분리)(*.csv) 로 선택하여 저장합니다.

7. 저장된 csv 파일을 Oracle DB 서버에 업로드 합니다.

8. Oracle DB 에 아래의 SQL 문을 사용하여 우편번호데이터를 넣을 NEWPOST 테이블을 생성합니다.

create table NEWPOST
(
	NEW_POST_CODE	NUMBER(30),
	SIDO_KOR		VARCHAR2(200),
	SIDO_ENG		VARCHAR2(30),
	SIGUNGU_KOR		VARCHAR2(30),
	SIGUNGU_ENG		VARCHAR2(30),
	UPMYON_KOR		VARCHAR2(30),
	UPMYON_ENG		VARCHAR2(200),
	DORO_NUMBER		NUMBER(30),
	DORO_KOR		VARCHAR2(100),
	DORO_ENG		VARCHAR2(200),
	UNDOR_FLAG		NUMBER(30),
	BUILDING_ORIGIN_NUMBER	NUMBER(30),
	BUILDING_REFER_NUMBER	NUMBER(30),
	BUILDING_MANAGE_NUMBER	NUMBER(30),
	MULTI_DELIVER_NAME		VARCHAR2(30),
	SIGUNGU_BUILDING_NAME	VARCHAR2(200),
	LAW_DONG_NUMBER	NUMBER(30),
	LAW_DONG_NAME	VARCHAR2(38),
	RI_NAME			VARCHAR2(30),
	ADMIN_DONG_NAME	VARCHAR2(38),
	SAN_FLAG		NUMBER(30),
	JIBEON_BONBEON	NUMBER(30),
	UPMYONDONG_SEQ	NUMBER(30),
	JIBEON_BUBEON	NUMBER(30),
	OLD_POST_CODE	VARCHAR2(30),
	POST_CODE_SEQ	VARCHAR2(30)
)

9. 서버에서 db.ctl 파일로 아래와 같은 내용으로 만들어서 데이터를 넣을 준비를 한다. infile 라인에서 csv 파일 경로를 지정해주면 됩니다.

load data
infile './세종특별자치시.csv'
append
into table NEWPOST
fields terminated by ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(NEW_POST_CODE, SIDO_KOR, SIDO_ENG, SIGUNGU_KOR, SIGUNGU_ENG, UPMYON_KOR, UPMYON_ENG, DORO_NUMBER, DORO_KOR, DORO_ENG, UNDOR_FLAG, BUILDING_ORIGIN_NUMBER, BUILDING_REFER_NUMBER, BUILDING_MANAGE_NUMBER, MULTI_DELIVER_NAME, SIGUNGU_BUILDING_NAME, LAW_DONG_NUMBER, LAW_DONG_NAME, RI_NAME, ADMIN_DONG_NAME, SAN_FLAG, JIBEON_BONBEON, UPMYONDONG_SEQ, JIBEON_BUBEON, OLD_POST_CODE, POST_CODE_SEQ)

10. sqlldr 을 실행하여 우편번호 데이터를 Oracle DB 서버에 insert 합니다.

root@orainstall:/# sqlldr DB유저명/패스워드 control=db.ctl
Commit point reached - logical record count 25433
Commit point reached - logical record count 25471
Commit point reached - logical record count 25509
Commit point reached - logical record count 25547
Commit point reached - logical record count 25585
Commit point reached - logical record count 25623
Commit point reached - logical record count 25661
Commit point reached - logical record count 25699
Commit point reached - logical record count 25737
Commit point reached - logical record count 25775
Commit point reached - logical record count 25813
Commit point reached - logical record count 25851
Commit point reached - logical record count 25889
Commit point reached - logical record count 25927
Commit point reached - logical record count 25965
Commit point reached - logical record count 26003
Commit point reached - logical record count 26012
root@orainstall:/# 

11. 세종특별자치시.bad 내용을 확인하고 sql 문을 사용하거나 sqldeveloper 등을 사용하여 데이터가 제대로 입력이 되었는지 확인합니다.

Oracle Database Express Edition(XE) 11g R2 설치하기 (Ubuntu 18.04)

최근에 오라클을 공부하려고 인터넷을 서핑하다 본 설치가이드들을 보면서 실제로 VPS 서버(저사양)에 설치해본 경험들을 정리합니다.

거의 최소사양급인 Vultr 의 1core, 1GB 램의 시스템에 Oracle Database Express Edition 11g Release 2 for Linux 64 버젼을 설치하기로 합니다.

리눅스에서 GUI 환경을 구성하지 않고도 설치할 수 있어서 반가운 버젼이네요. 11g 이후의 버젼은 추가로 다른글에서 뵙기로 하겠습니다.

사전 준비사항으로는 VM이나 Dedi 서버 관계없이 Ubuntu 18.04 가 설치된 시스템에 ssh 로 접근이 가능하면 됩니다.

1. 먼저 Oracle 홈페이지에서 Oracle Database Express Edition 11g Release 2 for Linux 64 을 다운로드를 합니다.

다운로드 URL : https://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/xe-prior-releases-5172097.html

아래의 페이지에서 라이선스에 동의를 선택하고 Oracle Database 11gR2 Express Edition for Linux x64 를 Download 받으시면 됩니다. 다운로드시 oracle 계정이 필요합니다. 만약 계정이 없다면 가입하시면 됩니다.

2. 설치할 시스템에 다운로드 받은 “oracle-xe-11.2.0-1.0.x86_64.rpm.zip” 파일을 적당한 경로(ex : /opt) 에 업로드 합니다. 경로는 크게 중요하지 않습니다.

3. ubuntu 18.04 시스템에 오라클 설치에 필요한 몇가지 패키지들을 설치합니다. (alien 은 RPM 패키지를 Debian 패키지로 변환해주는 툴입니다.)

# apt install -y alien libaio1 unixodbc bc unzip

4. 위에서 /opt 에 저장해둔 “oracle-xe-11.2.0-1.0.x86_64.rpm.zip” 파일의 압축을 해제합니다.

# unzip -x oracle-xe-11.2.0-1.0.x86_64.rpm.zip

Disk1 경로 에서 아래의 명령어를 실행하여 rpm 패키지를 deb 패키지로 변환합니다. 1core 시스템이라 변환하는데 약 5분 이상이 소요될 수도 있습니다.

# alien --scripts -d oracle-xe-11.2.0-1.0.x86_64.rpm

기다린 끝에 “oracle-xe_11.2.0-2_amd64.deb generated” 메시지와 함께 아래와 같이 deb 파일이 생성이 완료되었습니다.

5. REDHAT 리눅스 환경과 유사하게 /sbin/chkconfig 파일을 생성하고 아래의 내용을 복사해서 넣어주세요.

# vi /sbin/chkconfig
#!/bin/bash
# Oracle 11gR2 XE installer chkconfig hack for Ubuntu
file=/etc/init.d/oracle-xe  
if [[ ! `tail -n1 $file | grep INIT` ]]; then  
echo >> $file  
echo '### BEGIN INIT INFO' >> $file  
echo '# Provides: OracleXE' >> $file  
echo '# Required-Start: $remote_fs $syslog' >> $file  
echo '# Required-Stop: $remote_fs $syslog' >> $file  
echo '# Default-Start: 2 3 4 5' >> $file  
echo '# Default-Stop: 0 1 6' >> $file  
echo '# Short-Description: Oracle 11g Express Edition' >> $file  
echo '### END INIT INFO' >> $file  
fi  
update-rc.d oracle-xe defaults 80 01  
#EOF

그리고 /sbin/chkconfig 파일에 실행할 수 있도록 권한을 부여합니다.

# chmod 755 /sbin/chkconfig

추가적으로 아래의 명령어를 실행합니다.

ln -s /usr/bin/awk /bin/awk
touch /var/lock/subsys/listner

6. 커널 파라미터에 아래의 내용을 추가하여 줍니다. 이미 설정값이 아래의 값보다 높게 설정이 되어 있다면 그냥 통과하셔도 됩니다.

# vi /etc/sysctl.conf
fs.file-max=6815744
net.ipv4.ip_local_port_range=9000 65000

그리고 설정한 값을 시스템에 적용합니다.

# sysctl -p

7. Oracle 관련 환경변수 파일을 미리 생성합니다. 전체 유저에 적용하기 위해 편리하게 /etc/profile 파일에 하단에 아래 내용을 추가합니다. NLS_LANG 부분은 필요한 characterset 에따라서 알맞게 변경하시기 바랍니다.

# vi /etc/profile
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
export ORACLE_SID=XE
export NLS_LANG=KOREAN_KOREA.AL32UTF8
export ORACLE_BASE=/u01/app/oracle
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH

변경한 profile 을 적용하기 위해 아래의 명령어를 실행합니다.

# source /etc/profile

8. 오라클을 설치하기 위한  환경구성이 완료되었습니다. 이제 실제로 ORACLE XE deb 패키지를 설치합니다.

# apt install ./oracle-xe_11.2.0-2_amd64.deb
위의 이미지와 유사하게 설치가 완료될 것입니다.

9. “/etc/init.d/oracle-xe configure” 를 실행하여 Oracle 환경 구성을 완료한다.

root@orainstall:/opt/Disk1# /etc/init.d/oracle-xe configure

Oracle Database 11g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 11g Express
Edition.  The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts.  Press <Enter> to accept the defaults.
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]: 기본포트 선택

Specify a port that will be used for the database listener [1521]: 기본포트 선택

Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of
different passwords for each database account.  This can be done after
initial configuration: system 계정의 패스워드 설정
Confirm the password:

Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]: 시스템 부팅시에 자동으로 시작되게 할것인지

그럼 아래와 같은 내용으로 진행이 되면서 Oracle Database 설치가 완료됩니다.

Starting Oracle Net Listener...Done
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.
root@orainstall:/opt/Disk1#

10. 오라클이 정상적으로 구동되고 있는지 리스너 상태를 아래의 명령어를 사용해서 확인합니다.

root@orainstall:/opt/Disk1# lsnrctl status

LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 06-2월 -2019 08:44:39

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.2.0 - Production
Start Date                06-2월 -2019 08:41:43
Uptime                    0 days 0 hr. 2 min. 56 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Default Service           XE
Listener Parameter File   /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/orainstall/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=orainstall)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=orainstall)(PORT=8080))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "XE" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
The command completed successfully
root@orainstall:/opt/Disk1#

11. 마지막으로 system 계정으로 로그인이 정상적으로 되는지 아래와 같이 확인합니다.

root@orainstall:/opt/Disk1# sqlplus system

SQL*Plus: Release 11.2.0.2.0 Production on 수 2월 6 08:47:33 2019

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

Enter password: 패스워드 입력

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL>

마지막으로 시스템이 한번 재기동 된 이후에 /etc/init.d/oracle-xe stop or start 가 가능합니다.

Oracle 11G 이후 버젼에서 계정 대소문자 구분

Oracle 11G 이후 버젼에서는 기본적으로 계정의 대소문자를 구분한다.

시스템 계정으로 아래와 같이 “show parameter sec_case” 로 확인할수 있습니다. sec_case_sensitive_logon 값이 TRUE 일 경우 대소문자를 구분하는 경우입니다.

SQL> show parameter sec_case

NAME      TYPE  VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon      boolean  TRUE
SQL>

만약 구버젼의 오라클처럼 대소문자 구분을 없애고 싶다면 아래의 SQL 문을 실행하면 됩니다.

SQL> alter system set sec_case_sensitive_logon = false;

System altered.

SQL> show parameter sec_case

NAME      TYPE  VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon      boolean  FALSE
SQL>

Ubuntu 에서 sar 활성화 하기 (sysstat)

우분투에는 기본적으로 sar (sysstat) 패키지가 설치되어 있지 않습니다. 그래서 먼저 설치를 해야 합니다.

– sar(sysstat) 패키지 설치

apt install sysstat

– 기본으로 disable 되어 있는 sar 를 활성화하기 위해 /etc/default/sysstat 파일을 수정 파일 내용의  ENABLED=”false” 을 ENABLED=”true” 로 수정하여 준다.

– sar 데이터가 보관되는 날짜를 HISTORY 값을 수정해서 7일(default) 에서 30일이나 90일 등으로 변경 (option)

HISTORY=7  기본 7일로 설정되어 있으나 30, 90 등 원하는 기간까지 보관할수 있도록 조정이 가능합니다. 28일보다 큰 날짜로 설정하게 될 경우에 sar 파일이 기본적으로 sarDD 형태로 저장되므로 1달이 지날 경우 기존달의 파일을 덮어쓰게 되는데 SADC_OPTIONS 에 "-D" 옵션을 설정하여 주면 sarYYYYMMDD 형태로 저장하여 이 문제를 해결할 수 있다.

SADC_OPTIONS="-S DISK" 에 -D 를 추가하여

SADC_OPTIONS="-S DISK -D" 로 변경하여 준다.

(option) COMPRESSAFER=10 에서는 10일 이상이 지난날짜의 파일들은 아래 ZIP 옵션에서 설정한 압축프로그램으로 압축하게 해주는 옵션입니다.
# vi /etc/sysstat/sysstat

– sar 실행이 기본값으로 10분간격으로 데이터를 기록하는데 1분 간격으로 변경

# vi /etc/cron.d/sysstat
“5-55/10” 이 부분을 “*” 으로 변경하여 준다.

– sysstat 서비스를 재시작

# service sysstat restart

– 약 3분 이상이 지난 후에 sar 데이터가 “saYYYYMMDD” 형태로 잘 저장이 되는지 확인하고 sar 또한 확인해본다.

# ls -al /var/log/sysstat
# sar