실서버 | 테스트 서버 |
Oracle Database 10g Enterprise Edition | Oracle Database 10g Express Edition |
그래서 일단 토드를 사용해서 실서버 import / 테스트 서버 export를 해봤다. 이상한 에러가 나면서 안된다.. 아, 오라클의 에디션(Enterprise / Express) 차이인가? 아 메뉴얼을 읽어보니 Express버전(흔히 말하는 OracleXE이다.)에는 DB가 하나밖에 생성 안된다고 한다. 흠..? 기본이 XE라는 DB로 되어있는데 내가 우너하는 DB는 따로 또 만들어야 하는가? 그래서 Enterprise는 제약이 없길래 설치하기로 했다.
그래서 회사에서 오라클 10g Enterprise Edition CD를 받아서 Enterprise로 설치했다. 설치할때는 별로 안걸렸는데 한번 구동하니깐 컴퓨터 거의 맛갈 지경.. 아 사양이 나쁜 것도 아닌데 왜이러지?
어쨌든 같은 버전인데도 또 안된다.. 에러를 잘 살펴보니 버전이 다르다고 한다. Oracle Universal Installer을 실행해서 "설치된 제품" 을 비교해 보니 실서버는 언제 또 업데이트를 해서 Oracle Database 10g Release 2 Patch Set 3 10.2.0.4.0 이더라.(아 무슨 버전은 또 이리 긴 것인가.) 그래서 또 엄청나게 써칭을 해서 찾았다. (구글에서 p6810189_10204_Win32.zip 를 검색하자. 아니면 http://support.oracle.com 에서 찾을 수 있다. 단 여긴 정품 유저만 가능하다. :)
그렇게 버전을 맞췄는데도 안된다. 무엇이 문제일까? 기존 테스트 서버에서 받아 놓은 DBF파일을 그대로, 아니 아에 c:\oraclexe폴더(오라클 XE 기본 폴더)를 통째로 집어 넣어도 안된다.
결국 .dmp 파일 이것만이 정답일 것 같다.. 그리고 인터넷을 뒤져서 해결 방법을 알아냈다.
1. 우선 토드를 통하거나 도스에서 exp80 system/1234 file=myexp.dmp 이런 식으로 dmp파일을 생성.
2. dmp파일을 테스트 서버에 두고 imp userid=system/1231 fromuser=백업받은계정(실서버의) touser=백업받을 계정(테스트 서버의) file=backup.dmp
이런 식으로 하면 복원이 완료된다.
다만 테스트 서버에 유저 하나가 필요한데, 이는 보통 실서버와 똑같은 ID/PW로 생성해 주는 것이 좋다.
- SQL PLUS로 접속하거나 XE의 경우 "SQL 명령줄 실행" 을 통해 SQL에 접속한다.
SQL> create user newuser identified by mypassword
2 default tablespace users
3 temporary tablespace temp
4 quota 1000m on users;
이런식으로 복원받을 계정을 만든 다음
SQL> grant connect, resource to newuser;
이런식으로 계정에 권한을 부여한다.
SQL> conn newuser/mypassword
이렇게 해서 있으면 완료된 것이다.
그런데 복원 중간에 "ORA-01950 : 테이블스페이스 'USERS'에 대한 권한이 없습니다" 이런 메시지가 나오면
일단 sqlplus로 system 계정으로 로그인후
alter user [계정명] default tablespace users quota unlimited on users;
를 입력하면 해결된다.
다만 복원 중간에 에러가 난 것이라면 무언가 찜찜하므로 ORACLE XE를 지웠다 다시 깔고 복원하는 것을 추천한다.