oracle db full backup
backup 받을 디렉터리 생성
# mkdir /home/backup
백업받을 디렉터리로 이동
# cd /home/backup
백업 받을 디렉터리로 이동하여야 해당 디렉터리에 .dmp 파일이 생성된다
오라클 system 계정 패스워드를 모르는 상태였다. 패스워드 변경
# su - oracle
$ sqlplus / as sysdba
SQL> conn /as sysdba
SQL> alter user system identified by NEW_PASSWORD;
SQL> alter user system identified by NEW_PASSWORD; // NEW_PASSWORD 부분에 새로 지정할 패스워드 입력, 특수문자는 안되는 것으로 확인.
SQL> alter user sys identified by NEW_PASSWORD;
SQL> quit
#### 참고 사항 ####
sqlplus / as sysdba 로 로그인 하는 경우에는 system 계정 패스워드 파일을 사용하거나 OS 인증을 사용한다.
################
< 백업하기 >
$ exp system/sidae file=/home/backup/backup_20141207.dmp full=Y
. exporting operators
. exporting indextypes
. exporting bitmap, functional and extensible indexes
. exporting posttables actions
. exporting triggers
. exporting materialized views
. exporting snapshot logs
. exporting job queues
. exporting refresh groups and children
. exporting dimensions
. exporting post-schema procedural objects and actions
. exporting user history table
. exporting default and system auditing options
. exporting statistics
Export terminated successfully with warnings.
exp userid=id/pass file=C:/oracleDump.dmp log=C:/oracleDump.log owner=id
옵션 설명
1. statistics=none
– 통계정보가 정확하지 않을 때 익스포트를 시행하면서 오라클은 “경고와 함께. ..” 라는 식의 경고를 출력한다. 보기 싫다면 옵션을 추가한다.
2. owner=id
– 해당 유저가 들고있는 객체를 덤프한다.
– full=Y 옵션과 함께 사용할 수 없다.
3. full=Y
– DB의 전체 구조를 백업한다.
– owner 옵션과 함께 사용할 수 없다.
4. tables=tbl1, tbl2, tbl3
– 지정한 테이블들만 데이터와 함께 덤프한다.
– cmd로 실행할경우 세미콜론까지 이름으로 인식하므로 조심한다.
5. log
– cmd 명령어 창에 출력되는 내역을 파일로 남긴다.
imp userid=id/pass file=C:/oracleDump.dmp log=C:/oracleImpo.log fromuser=id touser=id2
옵션 설명
1. fromuser/touser
– fromuser는 dmp를 통하여 익스포트시 해당 객체의 owner를 뜻한다.
– touser는 dmp파일로부터 임포트될 객체를 가져갈 owner를 뜻한다.
2. tables=tbl1, tbl2, tbl3
– dmp내에 존재하는 테이블중 지정한 테이블들만 찾아서 데이터와 함께 임포트한다.
– cmd로 실행할경우 세미콜론까지 이름으로 인식하므로 조심한다.
3. log
– cmd 명령어 창에 출력되는 내역을 파일로 남긴다.
원격으로 하는 경우
원격 백업/복원의 경우 tns에 DBLink를 추가하여야한다.
DBLink추가하는 법
필자의 tns파일 경로는 다음과 같다.
C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN\tnsnames.ora
환경마다, 버전마다 다르겠지만 궁극적으로 10g 이상에서는 network폴더 내에 있는 tnsnames.ora 를 찾으면 된다. 단, sample 폴더 안에있는 것은 해당하지 않는다.
열어보면 다음과 같은 부분이 있는데 해당 부분을 복사하여 아래쪽에 추가한다.
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
XE를 TNS2라고 지정하고 해당 접속 정보를 변경하도록 하겠다.
TNS2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
그러면 tnsnames.ora내용이 다음과 같은 형태로 설정될 것 이다. (추가만 했으므로 자신의 환경에 맞는 설정은 그대로 두면 된다.)
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
TNS2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
.
.
.
저장한 후 원격접속이 되는지 cmd를 통해 확인한다.
cmd> sqlplus id/pass@TNS2
select * from user_tables;
정상적으로 접속되는 것이 확인되면 exp/imp를 실행할 수 있다.
dmp userid=id/pass@TNS2 file=C:/oracleDump.dmp log=C:/oracleDump.log owner=id
imp userid=id/pass@TNS2 file=C:/oracleDump.dmp log=C:/oracleImpo.log fromuser=id touser=id2