'DB'에 해당되는 글 17건

  1. 2018.04.26 ojdbc와 jdk 버전
  2. 2017.03.02 windows에서 mysql 압축파일로 설치하기
  3. 2016.08.17 like in 해보자. regexp_like
  4. 2016.07.20 모르는 테이블 조회
  5. 2015.08.29 MySQL, mysql workbench 설치
  6. 2015.08.05 DB에서 컬럼 순서 랜덤하게 가져오기
  7. 2015.06.05 시놀로지 NAS에 MariaDB 설치
  8. 2014.05.21 오라클 포트 설정하기
  9. 2013.07.29 한글 - 알파벳 - 숫자 순으로 정렬
  10. 2013.01.17 D-DAY 계산

ojdbc와 jdk 버전

DB/Oracle 2018.04.26 10:49

 이번에 보안 이슈로 인해 마이그레이션 이슈가 생겨 spring을 3.x에서 4.x로  전환 테스트하다보니 문제가 발생했다. DB쪽에서 계속 오류가 발생하는데 처음에는 관련 라이브러리도 버전을 변경하다보니 발생하는 문제라 생각했는데, mybatis 버전을 아무리 바꿔도 안되고, 연동방식을 아무리 바꾸어도 안되는 것이다...

 안되겠다 싶어 jdbctemplate으로 바꾸었는데도 안된다... 모두 동일한 오류가 발생했다.

20:05:13.240 [http-nio-80-exec-2] DEBUG org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d8269a0] was not registered for synchronization because synchronization is not active

20:05:13.297 [http-nio-80-exec-2] DEBUG o.s.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource

java.lang.NoClassDefFoundError: Could not initialize class core.log.conf.reloadable.ReloadableConfiguration


 검색을 아무리 해봐도 내용을 알수가 없어서... 혹시나하고 jdbctemplate은 그대로 두고 ojdbc6.jar를 ojdbc7.jar로 바꿔보니 에러코드가 바뀌었다. 일단 쿼리까지 읽어내는 것이다. 좀 더 테스트해봐야하지만, 오라클 홈페이지에서 jdk7,jdk8 지원한다는 ojdbc6.jar을 다운받아서 사용했는데, 이게 뭔가 다른 문제인듯 하다.


 지금 테스트 환경은 다음과 같다.

  • Oracle Database 11g Release 11.2.0.3
  • JDK 1.8
  • Spring 4.3.15
  • Tomcat8.0


그래서 검색방법을 바꾸어서 11g에서 사용가능한 ojdbc를 찾아보았다.

참고: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#01_02


위 링크에서 보면 다음과 같이 정리가 되어있다.

Which version of JDBC drivers support which version of Oracle database?

Please refer to the table below for the Oracle database versions supported by JDBC drivers.  Best Practice that we recommend is, JDBC driver version should always be either same as or higher than the Oracle database version being used in order to leverage the latest capabilities of the JDBC driver. 

Interoperability MatrixDatabase 12.2.0.1Database 12.1.0.xDatabase 11.2.0.x
JDBC 12.2.0.1
Yes
Yes
Yes
JDBC 12.1.0.x
Yes
Yes
Yes
JDBC 11.2.0.x
Yes
Yes
Yes



이걸로 보면 jdbc 12.2.0.1도 11.2.0.3에서 사용할 수 있어보인다. jdk 지원 정보를 보면 다음과 같다.

What are the Oracle JDBC releases versus JDK versions? 

The Oracle JDBC driver is always compliant to the latest JDK version in each of the new releases. In some versions, JDBC drivers support multiple JDK versions.  Use the table below  to choose the correct JDBC driver based on your preferred JDK version.   
 
Oracle Database version
JDBC Jar files specific to the release
12.2 or 12cR2ojdbc8.jar with JDK 8
12.1 or 12cR1ojdbc7.jar with JDK 7 and JDK 8
ojdbc6.jar with JDK 6
11.2 or 11gR2ojdbc6.jar with JDK 6, JDK 7, and JDK 8 
(Note: JDK7 and JDK8 are supported in 11.2.0.3 and 11.2.0.4 only)
ojdbc5.jar with JDK 5



What are the Oracle JDBC releases versus JDBC specifications? 

The table lists the Oracle JDBC drivers and the JDBC specification supported in that release. 
 

Oracle Database version
JDBC specification compliance
12.2 or 12cR2JDBC 4.2 in ojdbc8.jar
12.1 or 12cR1JDBC 4.1 in ojdbc7.jar 
JDBC 4.0 in ojdbc6.jar
11.2 or 11gR2JDBC 4.0 in ojdbc6.jar
JDBC 3.0 in ojdbc5.jar


ojdbc6가 jdk8을 지원한다는데 저걸 다운받아 사용해봤는데, 안된다... 검색하다보면 된다는 사람도 있어서 좀 당황스러운데... 된다고 공유하는 패키지도 나는 안되는 걸 보면 뭔가 다른 이유가 있을지도....



'DB > Oracle' 카테고리의 다른 글

ojdbc와 jdk 버전  (0) 2018.04.26
like in 해보자. regexp_like  (0) 2016.08.17
모르는 테이블 조회  (0) 2016.07.20
DB에서 컬럼 순서 랜덤하게 가져오기  (0) 2015.08.05
오라클 포트 설정하기  (0) 2014.05.21
한글 - 알파벳 - 숫자 순으로 정렬  (0) 2013.07.29
Trackbacks 0 : Comments 0

Write a comment


windows에서 mysql 압축파일로 설치하기

DB/mySQL 2017.03.02 17:38

 어쩌다보니 압축파일로 설치하게 되서 설치하다가 삽질을 좀 했다. 결론으로 고생한 부분이 일부 있어서 적어본다.


참고 사이트

http://bombay.tistory.com/3



1. 압축파일을 받자

https://dev.mysql.com/downloads/mysql/


 난 mysql-5.7.16-winx64.zip 파일을 다운 받아서 설치를 진행하였다. 개발설정을 위한 폴더에 넣고 설정을 진행하였다. 원하는 곳에 압축을 풀자.



2. 환경변수 등록

MYSQL_HOME = D:\dev\db\mysql-5.7.16-winx64

Path = .....;%MYSQL_HOME%\bin;


 [윈도우 제어판에서 시스템>고급 시스템 설정>고급>환경 변수>시스템 변수] 에 등록하면 된다. 새로 만들기로 MYSQL_HOME을 등록하고, Path는 편집으로 들어가서 끝에다가 추가하자. path별 구분자가 세미콜론이기 때문에 세미콜론이 없으면 추가해줘야한다.



3. my.ini 파일 생성


 압축푼 경로에 보면 my-default.ini파일이 있다. 이 파일을 복사해서 my.ini파일을 만들자. 이름만 바꿔서 만들어준다. 그리고 내용을 3줄 수정해야하는데 앞에 #은 주석처리니까 다음 3줄만 없애고 경로설정과 포트 설정을 한다.

basedir = D:/dev/db/mysql-5.7.16-winx64

datadir = D:/dev/db/mysql-5.7.16-winx64/data

port = 3306


basedir 은 압축을 푼 경로이고, datadir 은 data 파일이 생성될 경로이다. port는 말 그대로 포트 번호이다.

한가지 주의할 것은 설정을 잘못해서 실패할 경우 data 폴더 안에 실패한 파일이 생성되는데, 삭제해줘야한다. 이 것 때문에 삽질을 했다... 2가지 오류가 발생했는데, 해결해버려서 오류코드가 없다.... 다음 과정에서 에러가 났을 경우 반드시 파일을 지우고 재시도 하자.



4. mysqld --initialize 명령어 실행


 이 명령어를 실행하려면 우선 관리자 권한을 가지는 cmd 창을 열어야한다. [시작>프로그램 및 파일 검색]에 cmd를 치면 검색 결과가 나오는데 그중 cmd에서 마우스 오른쪽 버튼을 누르고 관리자 권한으로 실행하면 된다.

 그리고 위 명령어를 입력하면 되는데, 정상적으로 종료가 되는 경우는 출력되는 메시지가 없이 명령어 입력 상태로 넘어간다. 

 참고로 위 명령어를 사용할 때 data 폴더는 따로 만들지 않아도 된다. 자동으로 만들고 안에 파일까지 생성해준다.




5. mysql 서비스 등록


 mysql을 사용하려면 windows 서비스에 등록을 해야하는데, 다음명령어를 차례로 입력하자.

C:\Windows\system32>mysqld --install

Service successfully installed.


C:\Windows\system32>net start mysql

MySQL 서비스를 시작합니다..

MySQL 서비스가 잘 시작되었습니다.



C:\Windows\system32>


 위와같이 [ mysqld --install > net start mysql ] 순으로 입력하면 결과도 동일하게 나올 것이다.

 서비스 중지 명령어는 [ net stop mysql ]이다.



6. root 비번 설정


 root 설정이 안되어 있어서 처음에는 접속할 수가 없다. 현재 열려있는 cmd창에는 다음 명령어를 입력하고 새로운 cmd창(관리자 권한 필요)을 열자. 그전에 먼저 서비스를 종료해야한다.

net stop mysql

mysqld --skip-grant-tables


 위 명령어를 입력하면 새로운 창에서 root 비번을 바꿀 수가 있다. 다음 명령어로 db에 접근하자.

mysql -u root -p


 그리고 비번 변경을 위해 다음 쿼리를 입력한다.

use mysql;

update user set authentication_string = password('새로운 비밀번호') where user = 'root'; 

flush privileges;


 위 3개의 쿼리를 순서대로 넣으면 원하는 비번으로 바꿀 수 있다.  mysqld를 종료하고 다시 서비스를 시작시킨 후에 수정한 비번으로 접근할 수 있을 것이다. mysqld가 종료가 되지 않은 경우 작업 관리자 프로세스 탭에서 종료시켜주어야한다. 이건 좀 귀찮다.


'DB > mySQL' 카테고리의 다른 글

windows에서 mysql 압축파일로 설치하기  (0) 2017.03.02
MySQL, mysql workbench 설치  (0) 2015.08.29
CentOS6(x86_64)에서 MySQL 설치에서 원격까지  (0) 2011.10.27
mySQL 환경 설정  (0) 2011.08.03
mysql 계정 생성  (0) 2011.08.03
mysql 설치  (0) 2011.08.03
Trackbacks 0 : Comments 0

Write a comment


like in 해보자. regexp_like

DB/Oracle 2016.08.17 11:56

mybatis를 하다가 검색을 만들어야 할 일이 생겨서 like를 쓰는데, 갑자기 여러개를 검색할 수 있게 해달라는 요구가 들어왔다. 거의 다 만들었는데... 그래서 수정을 적게 하기 위해 like를 여러개 쓰다보니 한 번에 검색할 수 있을거 같아서 검색해 보니 나와 동일한 사람이 있었다. 자세히 설명은 달아 주지 않았지만 검색으로 보니 오라클에서 정규식으로 검색하는 방법이 있었다. 사용할 일이 없어서 몰랐...


regexp_like는 정규식으로 검색하는 함수인데, like in 과 같은 검색도 가능하다.

select *

from table

where regexp_like(column, '검색어1|검색어2')


검색어를 계속 추가하면 되겠으나 자료가 많은 테이블을 조회해보지 못해서 조금 아쉽다. row가 180인 테이블에서 해보니 느리지는 않았다. 당연하려나... 


regexp_like는 정규식 검색이기 때문에 다양한 방식의 검색이 가능하다.


 [a-z] 

 소문자 알파벳 포함

 [A-Z]

 대문자 알파벳 포함

 [0-9]

 숫자 포함

 [a-z]{3}

 3글자로 연속된 소문자 알파벳 포함

 [A-Z][0-9]

 대문자, 숫자로 연속된 알파벳 포함

 [A-Z]?[0-9]

 대문자와 숫자 사이에 공백이 있을 수 있음

 [A-Z]*[0-9]

 대문자와 숫자 사이에 공백이 있을 수 있음

 ^[A-Z]

 대문자로 시작되는 문자열

 [A-Z]$

 대문자로 끝나는 문자열


뭐 자바랑 비슷하네...

활용도를 좀 더 생각해봐야겠다.


출처:

http://lee-mandu.tistory.com/48


'DB > Oracle' 카테고리의 다른 글

ojdbc와 jdk 버전  (0) 2018.04.26
like in 해보자. regexp_like  (0) 2016.08.17
모르는 테이블 조회  (0) 2016.07.20
DB에서 컬럼 순서 랜덤하게 가져오기  (0) 2015.08.05
오라클 포트 설정하기  (0) 2014.05.21
한글 - 알파벳 - 숫자 순으로 정렬  (0) 2013.07.29
Trackbacks 0 : Comments 0

Write a comment


모르는 테이블 조회

DB/Oracle 2016.07.20 13:59

필요한 정보가 있는지 찾기 위해 다른 서버의 DB를 들어가서 검색해보니 나오는 정보가 없다.

그래서 조회하는 방법을 적어본다. oracle SQL Developer나 토드같은 툴을 이용할 수 있는 상황이라면 이런 번거로움은 필요없겠지만, 툴을 이용한 접근을 막아버린 곳이 많아서 SQL Plus로 작업 중에 생각한 방법이다.


먼저 table 목록은 다음 쿼리로 알 수 있다.

select table_name from all_tables;


그런데 이런저런 테이블이 많다. 특히 $가 들어간 테이블이 많이 있다. $가 들어간 테이블명은 보통 시스템과 관련된 테이블이어서 정리가 필요하다. 그래서 시스템 테이블같은 테이블을 제외해보자.

select distinct tablespace_name from all_tables;


쿼리를 실행해보면 SYSAUX, SYSTEM이 있고 다른건 잘 모르겠다. 그래서 일딴 두개를 제외해보기로 했다.

select table_name from all_tables where tablespace_name not in('SYSAUX','SYSTEM') order by table_name;


테이블 갯수가 많이 줄어들었다. 그런데 아직도 전혀 짐작할 수 없는 테이블이 있다. 하지만 처음 목적보다는 많이 줄어들었다. 이제 특정 테이블을 조회하고 싶어진다. 그런데 SQL Plus라는 놈은 컬럼이 많으면 조회가 힘들다. 그래서 먼저 컬럼명을 확인해보고 싶으니 다음 쿼리를 이용해보자.

select column_name from all_tab_columns where table_name = 'TABLE';


*를 이용하여 조회하면 다른 정보들도 볼 수 있으니 필요하다면 다른 정보도 확인해보자. 예를들어 컬럼의 data type, nullable, data length 등이 있다. 이건 번거로울 수 있으니 좀 더 간단한 방법을 적어본다.

describe TABLE;


그런데 데이터를 많이 조회하면 SQL Plus 특성상 가독성이 떨어진다. 그래서 화면에 보이는 컬럼의 폭을 정할 수 있다.

column        DATA_TYPE        format a10;


a10이란 부분이 크기이니 저 값을 수정해보면서 가독성이 좋아지게 변경하면서 해보자.


툴에 적응하면서 생각지도 못했는데, 강제로 SQL Plus를 다시 쓰게 되니, 예전에는 어떻게 작업했는지 모르겠다. 분명 전에는 사용했었는데.... 좀 더 편한 방법이 생기면 좋겠다.

'DB > Oracle' 카테고리의 다른 글

ojdbc와 jdk 버전  (0) 2018.04.26
like in 해보자. regexp_like  (0) 2016.08.17
모르는 테이블 조회  (0) 2016.07.20
DB에서 컬럼 순서 랜덤하게 가져오기  (0) 2015.08.05
오라클 포트 설정하기  (0) 2014.05.21
한글 - 알파벳 - 숫자 순으로 정렬  (0) 2013.07.29
Trackbacks 0 : Comments 0

Write a comment


MySQL, mysql workbench 설치

DB/mySQL 2015.08.29 16:18
사용상의 편의를 위해 압축 파일을 다운받아 설치한다. 

  • MySQL 설치

아래 사이트에서 본인 시스템에 맞는 32bit 또는 64bit 파일을 다운 받자.

http://dev.mysql.com/downloads/mysql/


설치할 폴더에 압축을 푼다. 관리상 편의를 위해 MySQL과 workbench를 한 폴더에 풀자.

압축을 풀고 폴더에 들어가면 bin 폴더가 있다.



bin 폴더 안에 mysqld.exe 파일이 있는데 실행하면 mysql이 실행된다. mysql은 생각보다 리소스를 많이 사용하기 때문에 필요할 때 실행해서 사용하면 된다. 리부팅하면 실행이 안되어 있다. 

기본으로 설정된 root 비밀번호는 없다. password를 비운 상태로 접속하면 된다.


  • workbench 설치

아래 사이트에서 본인 시스템에 맞는 32bit 또는 64bit 파일을 다운 받자. 설치버전을 다운 받아도 되지만, 여기선 ZIP 파일을 다운받아 설치한다.

http://dev.mysql.com/downloads/workbench/


마찬가지로 설치할 폴더에 압출을 풀면 폴더가 나온다. 폴더 안에 보면 MySQLWorkbench.exe 파일이 있는데 이 파일을 실행하면 된다.



처음에는 실행이 안될 수 있다. C++ 2013 라이브러리가 없어서 실행이 안되는 것이다. 자기 운영체제에 맞는 32bit 또는 64bit 파일을 다운 받자. 다운 받는 곳은 아래 사이트인다.

https://www.microsoft.com/ko-kr/download/details.aspx?id=40784


파일명은 vcredist_x64.exe(64bit) 또는 vcredist_x86.exe(32bit) 으로, 설치하고 Workbench를 실행해보자.


그리고 Workbench에서 몇가지 설정이 필요하다.

한글이 안될 경우 한글 설정은 메뉴에서

Edit > Preferences > Modeling > Appearance > Fonts > Korean 설정

또는

Edit > Preferences > Appearance > Fonts > Korean 설정


버젼에 따라 설정이 다를 수 있다.


그리고 "update 강의 set 인원제한 = 100;" 과 같은 쿼리를 실행하면 Workbench에서 보호기능에 락이 걸려있어서 실행이 되지 않는다. 다음과 같이 설정하자. 메뉴에서

Edit > Preferences > SQL Queries > Safe Updates ... 체크 해제

또는

Edit > Preferences > SQL Edit > Safe Updates ... 체크 해제






'DB > mySQL' 카테고리의 다른 글

windows에서 mysql 압축파일로 설치하기  (0) 2017.03.02
MySQL, mysql workbench 설치  (0) 2015.08.29
CentOS6(x86_64)에서 MySQL 설치에서 원격까지  (0) 2011.10.27
mySQL 환경 설정  (0) 2011.08.03
mysql 계정 생성  (0) 2011.08.03
mysql 설치  (0) 2011.08.03
tags : db, MySQL, Workbench
Trackbacks 0 : Comments 0

Write a comment


DB에서 컬럼 순서 랜덤하게 가져오기

DB/Oracle 2015.08.05 14:50

일을 하다가 컬럼 순서를 랜덤하게 가져와야할 필요가 있어서 찾아보았다. DBMS_RANDOM을 이용하여 난수를 발생하여 가져올 수 있다. 방법은 몇가지 있다.

SELECT DBMS_RANDOM.VALUE(1, 1000) AS RND FROM DUAL;


 위 쿼리는 1~1000 사이의 값을 가져오는데, 소숫점의 숫자도 포함되어 있다. 정수만 가져오려면 소숫점을 없애주면 된다.

SELECT CEIL(DBMS_RANDOM.VALUE(1, 1000)) AS RND FROM DUAL

CONNECT BY LEVEL <= 10;


10개는 난수를 가져올 것이다. 한가지 방법이 더 있다. 다음은 정수형 난수를 발생기키는 쿼리이다. 음수부터 양수까지 나온다.

SELECT DBMS_RANDOM.RANDOM AS RND FROM DUAL

CONNECT BY LEVEL <= 10;


이 쿼리를 약간 수정해서 위에 쿼리와 같은 기능으로 만들어보자

SELECT MOD(ABS(DBMS_RANDOM.RANDOM), 1000)+1 AS RND FROM DUAL

CONNECT BY LEVEL <= 10;


ABS를 이용해 양수만 가져온 후에, MOD로 나머지 연산을 하면 되겠다. 여기까지는 프로그래머라면 쉽게 구할 것이다.


그런데, 쿼리를 조금 복잡하게 짜다보니 버그인지 모르겠지만 문제가 발생했다. 실제로 사용하는 테이블에 RND를 컬럼으로 추가해서 RND 기준으로 정렬하고 SELECT로 몇번 감쌌더니 COUNT(*)에서 0으로 출력된다. *로 보면 데이터가 나온다. 조금 검색해봤으나 사례를 찾지 못하여 시간 관계상 문제가 생길 것같아 다른 방법을 찾아보았다.

SELECT LEVEL FROM DUAL

ORDER BY DBMS_RANDOM.RANDOM();


위와 같이 하면 컬럼 순서가 계속 바뀌는 것을 볼 수 있다.


- 출처 -

http://www.gurubee.net/lecture/1400

'DB > Oracle' 카테고리의 다른 글

like in 해보자. regexp_like  (0) 2016.08.17
모르는 테이블 조회  (0) 2016.07.20
DB에서 컬럼 순서 랜덤하게 가져오기  (0) 2015.08.05
오라클 포트 설정하기  (0) 2014.05.21
한글 - 알파벳 - 숫자 순으로 정렬  (0) 2013.07.29
D-DAY 계산  (0) 2013.01.17
tags : db, oracle, 정렬
Trackbacks 0 : Comments 0

Write a comment


시놀로지 NAS에 MariaDB 설치

DB/MariaDB 2015.06.05 10:02

시놀로지 NAS를 구입하고 클라우드 기능으로만 사용하다가 개발할 때 테스트 DB가 필요하게 되서 마리아 DB를 설치했다. 그런데 내가 잠시 잊고 있었다. 난 MySQL을 잘 사용하지 않는 다는 것을... 아무리 해도 root 계정 로그인이 안되서 이상하다 생각하고 전에 설치했던 내용을 참고해서 보았더니, 계정이 문제였다. 계정 권한이 localhost여서 외부에서 접근이 불가능하다. 


일딴 root는 보안 문제로 외부에서 접근하게 하지 않는 것이 좋다. 그래서 phpMyAdmin을 설치해서 계정을 새로 만들었다. 전에 쿼리로 만들 때는 길어서 귀찮았는데, phpMyAdmin을 사용하니, 클릭 몇번으로 생성이 된다.+_+ 

phpMyAdmin으로 하는건 첨이다... 자주 이용해야겠다. 생성할 때 주의할 것은 접근 호스트 설정이다. localhost로 하면 또 안될테니 %로 하자. 사실 계정 생성까지도 했었는데, %를 넣지 않고 *를 넣는 실수를 했다. 이럼 안된다. 혹시 모르니 권한은 데이터와 구조 권한 정도로만 하고... 끝.


처음에 원인을 계정으로 생각하지 않고 툴 문제인줄 알고 삽질했는데... 장점이자 단점이 NAS상에서는 루트 계정 비번만 셋팅할 수 있다. phpMyAdmin을 설치하지 않으면 아무것도 할 수가 없다. 이런 내용을 공지해주면 참 좋겠다. 설마 localhost 겠어... 이렇게 생각한 내 잘못도 있지만, 설명이 없으니 착각하게 되는 것 같다.


MariaDB 설치를 정리하자면,

  • phpMyAdmin 설치 필수
  • phpMyAdmin에서 외부 계정 생성 - 외부에서 접근 가능하게 하고 DB 권한 설정

생각해보면 별거 아닌데 혼자 삽질했다. 다신 삽질하지 말자.


'DB > MariaDB' 카테고리의 다른 글

시놀로지 NAS에 MariaDB 설치  (0) 2015.06.05
tags : MariaDB, Nas, synology
Trackbacks 0 : Comments 0

Write a comment


오라클 포트 설정하기

DB/Oracle 2014.05.21 18:21

간만에 테스트를 위해 오라클을 설치해서 외부 컴퓨터에서 접근을 해보았다.

한가지 문제가 관리상의 문제로 기본 포트인 1521 포트를 사용할 수 없었다.

게다가 인터넷에서 검색하니 부족한 정보가 넘쳐나서 삽질을 해게됬다... 제발 님들아...


오라클 11g를 설치했기 때문에 다를 수도 있겠다. 하지만 난 안됬으니 패스...


하는 수 없이 처음부터 차근차근 해보기 위해 설정프로그램을 보던중에 net manager라는 관리 툴에서 설정을 할 수 있는 것을 알게됬다. 적용되는 시간이 약간 늦어서 처음에는 안되는 줄 알았는데 잘 된다. 오라클을 설치하면 오라클 메뉴에서 [구성 및 관리 툴 > Net Manager] 실행하면 별다른 어려움 없이 설정이 가능하다. 설정파일을 직접 수정하는 방법도 인터넷에 많이 소개되고 있지만, 툴을 이용하여 설정하는 것이 편하다. 


Net Configuration Assistant 라는 툴에서도 설정할 수 있으나... 뭔가 이상하다. 이걸 사용하면 여태까지 설정했던 내용이 사라지는 효과를 볼 것이다. 오라클을 구성한 PC에서 데이터를 넘길 수가 없어서 자세한 스샷은 남기기 어렵지만 툴 사용법이 어렵지 않아서 쉽게 할 수 있을 거라 생각된다.


오라클 DB 접속을 위해 방화벽에서 포트만 열어주면 이제 바뀐 포트로 접근이 가능할 것이다.


사용했던 명령어를 몇개 보자면,


1. 리스너멈춤

lsnrctl stop


2. 리스너 시작

lsnrctl start

처음에 잘 안되는 이유를 모르다가 리스너를 멈추고 다시 시작시키면 오류가 나왔다. 오라클을 원초적인 텍스트 편집을 이용하다가 설정을 잘못한 것이였다. 잘못 설정했다면 다시 시작하려고 했을 때, 시작이 안된다.


3. 직접수정

$ sqlplus / as sysdba

SQL> ALTER SYSTEM SET LOCAL_LISTENER = "(ADDRESS=(PROTOCOL=TCP)(HOST=DB서버호스트네임 or ip)(PORT=1523))";

SQL> ALTER SYSTEM REGISTER;

이게 효과가 있는지는 모르겠다. 하다가 안되면 한번 해보자.


4. 오라클 쿼리로 변경

SQL>SELECT dbms_xdb.gethttpport() FROM dual;

                       → 현재 포트 번호를 검색함


SQL>SELECT dbms_xdb.sethttpport(1521);

                       → PL/SQL 처리가 정상적으로 완료되었습니다.

 

SQL>SELECT dbms_xdb.gethttpport() FROM dual;

                       → 다시 확인 (변경된 1521 포트가 검색되면 굳)


SQL>COMMIT;

이건 안된다.... 이것만하고서 열심히 삽질했다.


내가 사용해본 주요 명령어들이다. 리스너 멈춤,시작 명령어가 제일 효과적이였다. 설정오류를 저걸로 찾았으니까... 컴이 조금 느린 탓도 있지만, 이것저것 삽질하다보니 3시간 걸렸다. 앞으론 이러지 말자.

'DB > Oracle' 카테고리의 다른 글

모르는 테이블 조회  (0) 2016.07.20
DB에서 컬럼 순서 랜덤하게 가져오기  (0) 2015.08.05
오라클 포트 설정하기  (0) 2014.05.21
한글 - 알파벳 - 숫자 순으로 정렬  (0) 2013.07.29
D-DAY 계산  (0) 2013.01.17
연속되는 숫자 만들기  (0) 2012.09.18
Trackbacks 0 : Comments 0

Write a comment


한글 - 알파벳 - 숫자 순으로 정렬

DB/Oracle 2013.07.29 18:43

 기본적으로 Order By를 이용하여 정렬하면 특수문자와 숫자 영문자가 섞이고 마지막으로 한글이 나온다.

하지만 요구사항에 따라 한글 - 알파벳 - 숫자 처럼 출력 순서를 바꿔야하는 경우가 있다.

간단하게 Order By Desc를 사용하면 좋으나 전부 역순으로 정렬되므로 요구사항에 맞지 않다.


 처음 떠오른 것은 UNION ALL을 이용해서 3번 SELECT 하는 것이 었으나, 마음에 들지 않는다. 두번째로 생각난 것은 CASE WHEN을 이용해 컬럼을 만들어 정렬하는 것이다. SELECT한 DATA로 결과를 만들고 정렬을 하기 때문에 속도면에서도 나쁘지 않다고 생각된다. 그래서 이것을 기준으로 필요한 것을 찾아보니 이미 해본 사람들이 있었다. ASCII() 오라클 함수를 이용한 구분인데 문자열이 들어가도 첫문자의 아스키값을 10진수로 보여준다. 이 기능을 이용하여 한글인 경우를 보면 45217 이상의 수가 나온다. 한글인 경우 범위가 상당히 모호한데, 인터넷의 내용과 다르게 범위가 정확히 몇인지 확인되지 않았다. 테스트를 해보니 그 이상의 값도 나왔기 때문이다. 한글의 시작은 'ㄱ'이고 끝은 '힣'이라 생각했으나 '힝'으로 나와있어 테스트를 해보니 '힏'이 더 크게 나오기도 했다. 엑셀 문서에서 한글문자를보니 마지막이 '힣'이였는데... 정확한 판단이 안서고 조사를 해봐야하나 항상 시간이 문제다. 그래서 결국 45217  넘으면 한글로 판단했다. 일본어의 히라가나는 4만번대였으나... 구조적인 문제로 구별할 방법이 없다. 


그래서 결국 다음과 같은 쿼리가 나온다


WITH TEST AS(

  SELECT '6666' AS NAME FROM DUAL UNION ALL

  SELECT '512' AS NAME FROM DUAL UNION ALL

  SELECT '0' AS NAME FROM DUAL UNION ALL

  SELECT '가나' AS NAME FROM DUAL UNION ALL

  SELECT 'A' AS NAME FROM DUAL UNION ALL

  SELECT 'B' AS NAME FROM DUAL UNION ALL

  SELECT 'a' AS NAME FROM DUAL UNION ALL

  SELECT 'C' AS NAME FROM DUAL UNION ALL

  SELECT '  C' AS NAME FROM DUAL UNION ALL

  SELECT 'd' AS NAME FROM DUAL UNION ALL

  SELECT '나' AS NAME FROM DUAL

)

SELECT NAME,

CASE WHEN ASCII(UPPER(NAME)) > 45217 THEN '1' -- 한글

WHEN ASCII(UPPER(NAME)) BETWEEN '65'  AND '90' THEN '2' -- 알파벳

WHEN ASCII(UPPER(NAME)) BETWEEN '48'  AND '57'  THEN '3' -- 숫자

ELSE '4' -- 기타

END AS SORT_CODE

FROM TEST

ORDER BY SORT_CODE ASC, NAME ASC


정렬을 해보면 한가지 문제를 더 발견할 수 있다. 알파벳 대문자와 소문자는 정렬이 따로 된다.

그래서 한가지 더 추가했다.


WITH TEST AS(

  SELECT '6666' AS NAME FROM DUAL UNION ALL

  SELECT '512' AS NAME FROM DUAL UNION ALL

  SELECT '0' AS NAME FROM DUAL UNION ALL

  SELECT '가나' AS NAME FROM DUAL UNION ALL

  SELECT 'A' AS NAME FROM DUAL UNION ALL

  SELECT 'B' AS NAME FROM DUAL UNION ALL

  SELECT 'a' AS NAME FROM DUAL UNION ALL

  SELECT 'C' AS NAME FROM DUAL UNION ALL

  SELECT '  C' AS NAME FROM DUAL UNION ALL

  SELECT 'd' AS NAME FROM DUAL UNION ALL

  SELECT '나' AS NAME FROM DUAL

)

SELECT NAME,

CASE WHEN ASCII(UPPER(NAME)) > 45217 THEN '1' -- 한글

WHEN ASCII(UPPER(NAME)) BETWEEN '65'  AND '90' THEN '2' -- 알파벳

WHEN ASCII(UPPER(NAME)) BETWEEN '48'  AND '57'  THEN '3' -- 숫자

ELSE '4' -- 기타

END AS SORT_CODE

FROM TEST

ORDER BY SORT_CODE ASC, UPPER(NAME) ASC


이정도면 1차 목표는 달성했다. 구지 한가지 더 문제라면 특수문자 처리인데, 이것도 방법이 없다. 처음부터 특수문자는 고려대상이 아니였기때문이다. 예로 '  C' 는 맨마지막으로 내려온다. 기타로 분류하는 수 밖에....



'DB > Oracle' 카테고리의 다른 글

DB에서 컬럼 순서 랜덤하게 가져오기  (0) 2015.08.05
오라클 포트 설정하기  (0) 2014.05.21
한글 - 알파벳 - 숫자 순으로 정렬  (0) 2013.07.29
D-DAY 계산  (0) 2013.01.17
연속되는 숫자 만들기  (0) 2012.09.18
오라클 ORA-01476 에러  (0) 2011.11.11
Trackbacks 0 : Comments 0

Write a comment


D-DAY 계산

DB/Oracle 2013.01.17 15:19

쿼리로 D_DAY계산을 해보았다.

SELECT 

    CASE  

        WHEN D_DAY < 0 THEN 0

        ELSE    D_DAY

     END AS D_DAY

FROM(

    SELECT TRUNC(TO_DATE('20130201', 'yyyymmdd') - SYSDATE, 0) AS D_DAY

    FROM DUAL

)


만들기는 했으나, 쿼리로 해야하나? 하는 생각이 든다. 

'DB > Oracle' 카테고리의 다른 글

오라클 포트 설정하기  (0) 2014.05.21
한글 - 알파벳 - 숫자 순으로 정렬  (0) 2013.07.29
D-DAY 계산  (0) 2013.01.17
연속되는 숫자 만들기  (0) 2012.09.18
오라클 ORA-01476 에러  (0) 2011.11.11
한글 초성 검색  (0) 2011.05.23
Trackbacks 0 : Comments 0

Write a comment