backup 관련해서 개발 하나 진행중에 to_date 하는 부분에서 도저히 방법을 못찾고 있다가 한참을 삽질한 끝에


가능성을 도출했다... 헥헥...


일단 expdp 를 하는 방법에는 2가지 정도 방법이 있었다.

1. file을 하나 생성하여 expdp 시에 parfile 설정을 하여 해당 파일을 읽어 들여서 쿼리문을 완성하는 방법

2. 그냥 실행문 안에 쿼리문을 완성하는 방법.


1번 방법은

간단하게 vi sample.ora 로 파일을 생성 및 열어서 

tables=test_table

file=test_table_file

query=test_table:"where etime >= TO_DATE(\'2015-02-12\',\'yyyy-MM-dd\')"


이런식으로 생성하도록한다. 참고로 test_table 이라는 테이블의 etime컬럼의 date값을 where로 사용할 경우이다.


다만 이방법으로 2번의 방법을 해결하지는 못한다.(이거 찾느라고 한참을 고생했다는...ㅜ.ㅜ)


$ORACLE_HOME/bin/expdp test/test@ORCL tables=test_table file=test_table  query=\"where etime \>\= TO_DATE\(\'2015-02-12\',\'yyyy-MM-dd\'\)\"


저곳에서의 핵심 \ 을 사용하는 방법이다. 특수문자가 존재하는 거의 모든곳에서 \ 를 추가해줘야 한다.



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

[ORACLE] impdp 실행시 실행 에러 발생  (0) 2016.05.17
ORA-00020 : maximum number of processes(xxx) exceeded  (0) 2015.01.29
ORA-12505 에러  (0) 2013.01.17
tcpdump 사용법  (0) 2012.08.14
TNS-12555: TNS:permission denied  (0) 2012.04.16

ORA-00020 : maximum number of processes(xxx) exceeded


oracle에서 스왑메모리를 너무 많이 사용하고 있었기에 shutdown을 실행시키는 과정에서

접속을 시도 하였으나 ora-00020 이라는 에러코드와 함께 process 개수가 초과되었다는

메시지를 확인할수 있었다.

...

..

.

엥?


해결 방법은 의외로 간단했다.


기존에 sysdba 로 접속시 sqlplus '/as sysdba' 이렇게 사용하였으나 해당 문제가 발생시


sqlplus -prelim '/as sysdba' 와같이 실행하면 떡!!!하니 실행이 된다.


얼릉 shutdown abort 로 oracle을 중지시키고 재실행 하자.


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

[ORACLE] impdp 실행시 실행 에러 발생  (0) 2016.05.17
ORACLE expdp 설정시 where 의 to_date, to_char 설정 방법  (0) 2015.02.12
ORA-12505 에러  (0) 2013.01.17
tcpdump 사용법  (0) 2012.08.14
TNS-12555: TNS:permission denied  (0) 2012.04.16


REALTEK 11n USB Wireless LAN Utility 프로그램이 일단 설치 되었다면 어떻게 설정할 것인가가 중요하다


만약 이프로그램이 "Support_All_In_One이러한 이유로 설치 되지 않는다면 http://wolfwideweb.tistory.com/81 참고하시라


구글에서 Wireless LAN Utility 프로그램 사용법을 찾는 도중 어떤분의 티스토리에서 자세하게 설명을 해놓으셨길래


링크만 걸어본다.


http://pdbaby.tistory.com/46

딱 내가 궁금해 하던 내용이다.


결론적 내용을 잠시 퍼온다면


결론적으로 해당 프로세스에서 물리적인 메모리를 사용하는 크기는 RES 이며,

SWAP 영역에서 사용하는 메모리 + shared + swapped를 합친것이 VIRT 다.


따라서 VIRT 값과 RES 값의 차이가 크다는 이야기는 SWAP 을 쓸 확률이 높다는 의미 인 것으로 보인다. 자바에서는 Shared 메모리의 크기가 그리 크지 않으므로, 만약 VIRT 만 크다면 SWAP 확인해 보고, 애플리케이션에서 도대체 무슨 일이 일어나는지를 잘 째려봐야 할 듯 하다.


http://www.tuning-java.com/454


흠..... 여기 저기 블로그를 둘러보아도 다 똑같은 말 뿐이다. 어디서 ctrl+c, ctrl+v 를 한건가?


정작 중요한 내용은 없이 그냥 다들 setAutoCommit를 true 하면 자동적으로 commit이 되거나 rollback이 된다.


단순 이렇게만 적어놨다... 이게 뭐야? 그건 영어만 해석해도 알겠다.


내가 생각하는 입장에서는 이 setAutoCommit의 기능의 주요기능은 이게 아니라고 생각되어진다.


내가 중요하게 생각하는건 이거다.


Batch 를 사용한 DCL 에서 만약 3번째 DCL문이 잘못된 문장이었다면 실제 데이터는 어떻게 처리가 되는가?


뭔말인고 하니


총10개의 insert 쿼리문이 존재한다고 하자. 이때 3번째 쿼리문이 잘못된 쿼리였다.


만약 이럴때 setAutoCommit을 true로 설정해놓으면 결과는


첫번째 두번째 데이터는 insert 되고 나머지는 insert 되지 않는다.


하지만 setAutoCommit를 false로 설정해 놓고 성공시 commit, 실패시 rollback을 지정해놓으면


결과는 아무런 데이터도 들어가 않는다는 점이다.


모두 OK가 되던지 아니면 모두 FALSE가 되던지. 트랜잭션 개념에서는 매우 중요한 부분이다. 하지만 대부분의 사람들은 다르게 사용하는중...


setAutoCommit이 자동으로 commit되고 rollback되고 이게 중요한게 아니란 말이지...

그기능은 몰라도 감으로 알겠다.




구글이나 네이버에서 해당 내용을 검색하면 많은 대답들이 나온다.

1. date 형이니깐 date형으로 바꿔서 해라~

2. PreparedStatement 사용시에는 ? 대신 sysdate로 바꾸고 값을 하나 줄여라

3. PreparedStatement 사용시에 setString 대신 setDate 또는 setTime 또는 setTimestamp 를 사용하라

등등


하지만!!! 내가 원한 대답들이 아냐 ㅜ.ㅜ 나랑 같은게 없다규!!!

난 3번 사용중이라규!!!!!


기존 ORACLE에 접근할때 odbc1.4.jar 를 사용하고 있었다.

이번에 필요한 기능때문에 odbc6.jar 로 업그레이드해서 사용중이었는데 기존에 잘되던 기능이 하나가 안되는 현상이 발견되었다.


참고로 A라는 DB에서 데이터를 받아와서 B에 데이터를 insert 하는 기능이다


PreparedStatement 를 사용해서 잘쓰고 있었는데 갑자기 뜬금없이 ORA-01861: literal does not match format string 요런 에러를 뱉는다....


미친거 아냐???? 와이?????


아무리 찾아봐도 어떠한 대답도 찾을수 없었다... 왜지??? 검색을 종나 못하는 찌질이였던가???

이러며 한탄하고 있을때 코드 한줄이 나를 꼬시고 있었다...


컬럼의 타입을 Integer 값으로 정해 놓고 Date 형이라면 ('91'의 숫자값을 갖는다.) 그 값을 setTimestamp 형태로 변환하여 

데이터를 입력시키는 형태의 로직이다.

그부분에서 odbc1.4.jar로 했을때와 odbc6.jar로 했을때의 값을 비교해 봤다....




이런 xxxxxxxx


뭐 이런!!!.... Integer값이 틀리다.... 뭐 이런경우가....

odbc1.4.jar 일때는 '91'이던게 odbc6.jar 일때는 '93'으로 바뀌어져 있었다.


아놔... 미쵸... 이걸로 몇시간을 삽질한건지...


여튼 중요한 정보니 다른분들도 나랑 같은 실수를 안했었기를 빌며.....ㅜ.ㅜ


나의 멍청함은 이걸로 끝내고 시퍼라......


예전에 어떻게 설치하는줄 모르고 막 쓰고 있다가 노트북을 포맷하게 되었는데...


이놈의 N100 어떻게 설정해야하는지 모르고 한참을 머리를 싸메고 있다가 하나의 블로그를 발견했는데...


유래카~~~!!!


그냥 이대로 따라하면 딱된다.


http://tkdgns4872.tistory.com/6


다만 나의 경우에는 핸드폰으로 연결 하였는데 wifi 가 불안정하다고 나온다...


뭐지???


Utily를 잘 살펴보니 'ㅁ인터넷 연결 공유(ICS) 설정' 이런게 보이길래 혹시나 싶어


체크를 하고 나니 똭~!!!!!!


와우~~!!!!


다른분들도 성공하세요...

 

Part.1 mount 하는 방법 (디스크 연결)

1. 파티션이 잡혀 있는지 확인 합니다. (Device Boot 확인)

# fdisk -l

 

2. 마운트할 디렉터리를 생성 합니다.

# mkdir /디렉터리명

 

3. 마운트 합니다.

# mount [디바이스명] [디렉터리명]

예) # mount /dev/sdb1 /backup

특별한 에러 메시지가 나타나지 않는다면 성공적으로 마운트 된 것 입니다.

 

Part.2 umount 하는 방법 (디스크 연결 해제)

# umount [디바이스명] or [디렉터리명]

예) # umount /dev/sdb1 또는

     # umount /backup

 

마운트 해제가 안될 경우

(mount: block device /dev/sda2 is write-protected, mounting read-only)

# fuser -kfuc [디렉터리명]

예) fuser -kfuc /mnt

fuser는 특정 파일이나 파일시스템, 포트 등에서 사용중인 프로세스를 확인할 때 사용하며

지정된 파일과 관련된 모든 프로세스들을 kill 시킬 수 있습니다.

 

# fuser -km [디렉토리명] 을 하게 되면 자동으로 해당 디렉토리 사용자를 kill 시켜 주더군요.

 

 

 

Part.3 읽기전용 파티션 읽기/쓰기 가능하게 리마운트 하는 방법

디스크의 에러 및 fstab 파일을 잘못 수정하거나 리부팅 중 발생되는 마운트 에러시 싱글모드로 부팅하게되면 / 파티션의 수정이 금지됩니다.

이러한 경우 [-o 옵션] 을 주어 다시 마운트를 걸어주고 읽기/쓰기 권한을 줍니다.

# mount -o remount,rw [디바이스명] or [디렉터리명]

예) # mount -o remount,rw /

 

# 만약 이렇게 했을경우에도 "mount: block device /dev/sda2 is write-protected, mounting read-only" 메시지가 뜬다면

그냥 간단하게

unmount /dev/sda2

mount /dev/sda2

하시면 됩니다... 괜히 이거 가지고 되니 안되니 삽질 했네....

 

Etc.1 mount 옵션 설명

mount [-fnrvw] [-t 파일시스템 종류] [-o 옵션] 디바이스명 디렉터리명

 

옵션

-v : 자세한 내용을 출력합니다.

-f : 실제로 마운트를 하지 않고 마운트를 할 수 있는지 점검합니다.

-n : /etc/mtab 파일에 쓰기 작업을 하지 않고 마운트 합니다.

-r : 읽기만 가능하게 마운트 합니다. -o ro 옵션과 같습니다.

-w : 읽기/쓰기 모드로 마운트 합니다. 기본설정값이며 -o rw 옵션과 같습니다.

-t 파일시스템 종류 : 파일시스템 종류에는 ext3, iso9660등 파일시스템 종류를 적어줍니다.

                            만약 이 옵션을 사용하지 않는다면 파일시스템의 수퍼블럭을 조사하여 자동으로 파일시스템이 선택됩니다.

-o 옵션 : 이곳에는 마운트 옵션들을 적어줍니다. 입력하지않으면 기본적으로 defaults가 선택됩니다.

defaults : rw, suid, dev, auto, nouser, async의 옵션이 선택됩니다.

async : 파일시스템에 대한 입출력이 비동기적으로 이루어지게 합니다.

auto : -a 옵션으로 마운트가 가능하게 합니다.

dev : 파일시스템의 문자, 블럭 특수장치를 해석합니다.

exec : 바이너리의 실행을 허가 합니다.

noauto : -a 옵션으로는 마운트 되지 않으며 명시적으로만 마운트가 가능합니다.

noexec : 바이너리의 실행을 허가하지 않습니다.

nosuid : set-UID, set-GID를 무시합니다.

nouser : 일반 사용자가 마운트할 수 없게 합니다.

remount : 이미 마운트된 파일시스템을 다시 마운트 합니다.

ro : 읽기전용으로 마운트 합니다.

rw : 읽기/쓰기 모두 가능하게 마운트 합니다.

suid : set-UID, set-GID를 사용합니다.

sync : 파일시스템에 대한 입출력을 동기화 합니다.

user : 일반 사용자가 마운트할 수 있게 합니다.

 

Etc.2 umount 옵션 설명

umount [-nv] 디바이스명 or 디렉터리명

-n : /etc/mtab 파일을 갱신하지 않고 마운트를 해제 합니다.

-v : 자세한 정보를 보여줍니다.

-a : /etc/mtab 파일에 명시된 모든 파일시스템의 마운트를 해제 합니다.

-t 파일시스템 종류 : -a 명령어와 함께 사용되며 이 옵션이 지정되면 /etc/mtab 파일에 명시된 모든 파일시스템 중 유저가 입력한 파일시스템만 마운트를 해제 합니다.

 

Etc.3 현재 시스템 마운트 상황 확인

mount 명령어로 확인하는 것보다 다음과 같이 확인하는 것이 더 정확하다.

# cat /proc/mounts

 

 

[ 출처 : http://www.serverguide.co.kr/94 ]