mybatis 쿼리문을 한번 보자면,

<if test='KEY !=null and KEY != "" ' >
  <![CDATA[
  AND KEY = #{KEY}
  ]]>
</if>

위 처럼 써야 에러를 줄일 수 있다고 생각한다.

 

이클립스 자동완성으로 if문을 작성해보면 

<if test=""></if>

큰 따옴표로 나온다.

 

이후 조건을 걸 때

<if test=" NAME == 'A'" >
</if>

이렇게 작성하면 큰 문제가 없다.

 

하지만 2글자 이상이 된다면 에러가 나기 때문에

<if test=' NAME == "A"' ></if>

<if test=' ADDRESS == "BUSAN"' ></if>

이렇게 큰따옴표와 작은따옴표를 쓰는 습관을 들이면 좋을 거 같다.

 

 

그리고 mybatis의 조건문에 and, or, null 은 반드시 소문자로 사용해야한다.

<if test=' NAME != "" and NAME != null' ></if>

<if test=' NAME != "" or NAME != null' ></if>

만약 order by 정렬 후 첫번째 행만 선택하고싶으면 어떻게 해야할까.

limit를 사용하면 쉽다

주의할점은 oracle에선 limit가 전혀 다르게 결과가 나오기때문에

원하는 행을 선택하려면 row_number()를 잘 이용하면 될 것 이다.

 

mysql limit 사용법

- select A from Table order by BNumber limit 1;

( Table 에서 A를 선택, BNumber를 기준으로 정렬하되 첫번째 행만 select )

 

limit 뒤에 상수를 사용해서 원하는 값을 select하면 된다

mysql 기준으로 단일 order by 사용 시

- select dname from dept order by deptno;

라고 사용하면 된다.

 

order by 를 여러개를 사용하려면

- selecet dname from dept order by deptno1 and order by deptno2 desc 가 아닌 !

- selecet dname from dept order by deptno1,deptno2 desc 로 하면된다 

참조 : https://comtoo.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EC%9E%90%EB%8F%99-DB-%EB%B0%B1%EC%97%85-bat%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%A0%95-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC-%EB%93%B1%EB%A1%9D

 

오라클 자동 DB 백업 ( bat파일 설정, 스케줄러 등록 )

참고 : https://blog.naver.com/powerms100/120008462157 자세한 설정내용은 위 블로그를 참고하셔도 좋습니다. ========================================================================================== r..

comtoo.tistory.com

 

혹시 모를 상황에 대비해 오라클 db 백업을 해야하기 때문에 오늘은 데이터 자동 백업을 해봤다.

 

일단 bat 파일 만드는법

---------------------

rem backup 

@echo off

SET ORACLE_SID=sid 이름

SET MONTH=%date:~5,2%

SET YEAR=%date:~0,4%

for %%a in (%date%) do SET day=%%a

md C:\BackUp\%YEAR%\%MONTH%\dmp

md C:\BackUp\%YEAR%\%MONTH%\log

C:\oraclexe\app\oracle\product\11.2.0\server\bin\exp 아이디/비번 file=C:\BackUp\%YEAR%\%MONTH%\dmp\%DAY%.dmp log=C:\BackUp\%YEAR%\%MONTH%\log\%DAY%backuplog.txt

--------------------

이렇게 작성했고 *.bat로 확장자명을 지정후 저장해야 한다.

 

테스트를 해보니 '해당연도>해당월>dmp,log>해당날짜' 식으로 파일 생성이 되며 dmp파일, log 파일을 확인 할 수 있다.

 

다음 자동으로 bat파일을 실행 시키려면 윈도우 기본 기능인 '작업 스케줄러'를 사용하면 된다.

 

작업 스케줄러 라이브러리에 우클릭 후 '작업 만들기'를 선택한다. 

5개의 탭이 있다.

일반>원하는 이름과 설명을 씀 ( *만약 부팅 후 os 비밀번호와 상관없이 백업을 하고싶다면 보안옵션>사용자의 로그인 여부에 관계없이 실행 을 체크해야한다 )

트리거>새로만들기>매일>원하는 시간대 지정

동작>새로만들기>찾아보기>위에 만들어놨던 bat파일 지정 후 확인

이렇게 하게 되면 자동 백업은 완성이다.

 

테스트 겸 1분 후나 2분 후 시간을 지정하고 만들어진 dmp,log를 마지막으로 확인해보면 될것같다.

 

데이터 마이그레이션은 기존에 있던 데이터나 환경 등을 새로 구축하고자 하는 DB에 복사한다는 개념으로 이해하면 될 것 같다.

 

마이그레이션 중 가장 간단하고 쉬운 난이도인 같은 오라클 데이터를 다른 스키마에 옮기는 작업을 해봤다.

툴은 DBeaver을 사용했다.

 

먼저 DB 접속을 한 후, 기존 스키마에서 원하는 테이블을 선택해 '우클릭-내보내기'를 클릭해보면 CSV, DbUnit, HTML, JSON, Markdown, SQL, Source code, TXT, XML 형식들을 선택하면 된다.

처음에 SQL로 내보낸 후 마이그레이션 작업을 하려 시도했지만 DBeaver에서 내보내기한 insert문은 오라클에서 없는 문법이라 오류가 난다.

때문에 CSV형식으로 내보내기 후 마이그레이션 작업을 시작했다.

 

만약 새로운 스키마 테이블에 데이터가 있다면 delete해준 후 조회를 한번 더 해보는 확인작업이 있으면 확실하다.

테이블에 데이터가 남아있다면 제약조건으로 인해 충돌할 수 있기 때문이다.

 

내보내기한 파일 위치를 기억 후 새로운 스키마 테이블을 선택 후 '우클릭-가져오기'를 하면 이상하게 CSV로만 가져올 수 있도록 나온다.

CSV 파일을 선택해보면 오류가 나지않고 실행이 될 것 이다.

데이터가 잘 들어갔는지 확인 할 겸 select count(*) ... 로 개수비교를 해보면 된다.

처음으로 포트 포워딩이란것을 접했다.

포트 포워딩이 필요한 이유는, 만약 iptime 공유기를 사용해 같은 인터넷을 사용하는 컴퓨터가 많다면 ip주소가 '192.168.0.XXX' 이런식으로 동적ip를 할당 받는다.

그렇다면 다른 사람 컴퓨터에서 iptime을 사용하는 컴퓨터라 해도 위 ip주소와 비슷한 방식으로 ip를 받게되므로 포트포워딩없에 서버 컴퓨터를 설정한다면 그 많은 컴퓨터중에 어떤 컴퓨터가 서버컴퓨터인지 알 방법은 없다.

 

포트 포워딩이란, 간단히 말하면 외부에서 접속을 위해 서버컴퓨터의 포트를 고정시켜 외부에서 접근시 서버컴퓨터로 안내해주는 것이라 생각하면 될 것 같다.

 

서버컴퓨터는 보안이 제일 중요하다고 생각하기때문에 하면 좋을 몇가지 설정을 써보면,

 

1. os 암호

 - 누군가 몰래 회사 서버컴퓨터에 모니터, 키보드, 마우스를 연결하여 서버컴퓨터의 설정, 데이터 등을 변경하거나 훔쳐간다면 큰일난다는건 누구나 알 수 있다. 혹시 모를 위험방지를 위해 중요한 컴퓨터는 os 비밀번호를 걸어두면 좋다.

 

2. DB 포트, sid 변경

 - 서버컴퓨터가 가장 큰 할일중 하나는 DB접속이라 생각한다. 요즘 it시대로 해킹의 기술과 빈도수가 엄청나다고 한다. 데이터베이스 기본포트를 변경해준다면 1차보호를 할 수 있습니다.

 - oracle을 기준으로 기본 sid는 XE로 통일 돼 있다. sid도 마찬가지로 변경해준다면 좋을거같다. 이 과정중에 '방화벽 - 고급설정'을 들어가게 될 때 추가한 인바운드 규칙에 속성을 들어가보면 영역창이 있다. 원하는 ip의 범위를 지정한다면 불필요한 접근들을 막기 수월할 것 이다.

 

3. 컴퓨터 ip 고정할당

 - 일반적으로 비슷한 ip와 port로 구분이 어렵기 때문에 외부로부터 접근이 어렵다. 때문에 자동으로 IP주로를 받는 설정을 한개의 ip를 직접 부여하여 그 ip는 이제 다른컴퓨터에서 주소사용이 불가능하도록 해야한다. 이때 맥락이 비슷한 '영구결번' 느낌을 받았고 이렇게 생각하지면 조금 더 쉽게 이해할 수 있다고 생각한다.

 

4. 공유기 포트포워딩

 - 내 기준 iptime으로는 192.168.0.1 에 접속하여 '고급설정 - 라이터 관리 - 포트포워드 설정' 으로 가면 컴퓨터 ip 고정할당의 내용과 비슷하고 추가로 포트까지 부여한다면 더 확실한 포워딩을 할 수 있다.

 

* 포트포워딩 과정중 오류

cmd로 oracle 접속시 'ORA-12560: TNS:protocol adapter error'가 뜬다면 서비스에서 오라클 관련 서비스들이 실행중이 아닌지 확인해보면 된다.

만약 본인이 SID를 변경 후 'ORA-12560: TNS:protocol adapter error' 오류가 뜬다면 

재접속시 변경SID가 적용이 풀려 오류가 난다.

 

$lsnrctl stop

$SET oracle_SID= 변경SID이름

$lsnrctl start

 

를 시도해보면 대부분 해결될 것 이다. 

 

잘못된 부분이 있다면 댓글부탁드립니다.

감사합니다.

+ Recent posts