SQL Developer Database copy(데이터베이스 복사)

SQL Developer Database copy(데이터베이스 복사)

업무상 DB 백업을 할 일이 종종 생긴다. 그럴 때 나는 SQL Developer 에서 지원하는 데이터베이스 복사 기능을 자주쓴다. 기본적인 전제는 있다.

  1. 시간적 여유가 있을 때.(데이터량이 많지 않다면 큰 문제는 아니다.)
  2. 오라클 서버에 직접 접속하지 못하는 상황일 때.(오라클은 별도 업체나, 기관에서 관리하기도 하는데, 위험부담이 있다보니 개별업체에게 서버정보를 잘 안주는 경우도 있음.) 즉, 1521 포트(꼭 1521이 아니더라도 오라클 포트)만 권한이 있을 때.

오라클 자체에서 지원하는 DB dump 보다는 속도면에서 떨어지는 것은 확실한 것 같다. 나는 주로 객체복사를 사용한다. 객체복사는 Table space 단위로 객체를 읽어오는 듯하다.(불확실).  그런데 한번에 테이블과 제약조건, 인덱스, 데이터를 다 복사하는 경우 중간중간에 제약조건과 관련된 에러메세지가 너무나서 불안해지기 시작한다. 뭐가 어디가 잘못된건지 모르는 상황에서 이걸 그냥 무시해야되나.. 하는 생각이 든다. 그래서 나는 아래의 순서로 나누어 진행한다.

  1. 테이블,시퀀스 복사(DDL) – 데이터가 들어갈 통 만들기.
  2. 데이터 복사(DML) – 데이터 붓기
  3. 제약조건, 인덱스 복사(DDL) – 제약조건,인덱스(PK, FK등) 걸기
  4. 뷰 복사(DDL)

나의 경우는 위와 같다. (내가 개발하고 있는 솔루션은 Function이나 Procedure 이런 것들은 사용되지 않고 있기 때문!)

에러가 나는 것은… 테이블에 제약조건 또는 인덱스가 걸린 상태에서 데이터를 들이부으려고 하면 당연히 DB에서는 막게 되어있다. 그렇기 때문에 일단 데이터를 부어넣고 제약조건과 인덱스를 걸면 문제 없이 된다.  순서가 나뉘어서 복잡하지만, 작업단위로 결과를 확인하기에 용이해서 좋다. SQL Developer는 각 결과파일을 주는데, 특별한 오류가 없다면 잘됐다고 보면되고, 결과를 단순하게 확인하려면 건수 비교를 해본다.

SELECT COUNT(*) FROM USER_TABLES;

SELECT COUNT(*) FROM USER_SEQUENCES;

SELECT COUNT(*) FROM USER_INDEXES;

SELECT COUNT(*) FROM USER_VIEWS;

SELECT COUNT(*) FROM A_TB UNION ALL

SELECT COUNT(*) FROM B_TB;

건수가 차이 없다면 거의 확실하다고 본다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다