DB

[펌] ORACLE DATABASE 재설치하기

_침묵_ 2005. 8. 23. 11:23
출처 : http://members.tripod.lycos.co.kr/jelong/db_recreate.html


ORACLE DATABASE 재설치하기
DB 를 깨끗하게 밀어 버리고 재 설치하거나 또는 DB구조를 변경할 때 유용한
Create Database 따라하기... (이거 함부로 따라하다 잘못하면 다칩니다)

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

1. 기존 데이터베이스 백업 받기
2. 데이터베이스 생성 스크립트 (crdb, crdb2.sql) 수정하기
3. Create Database
4. System View 생성
5. 도움말과 샘플 테이블 생성
6. 백업 데이터 복원

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

1. 기존 데이터베이스 백업 받기

우선 export 툴인 exp 를 이용하여 전체 database 를 백업 받습니다.
$ exp system/manager file=fullbackup.dmp full=y

그리고 기존의 데이터중 그대로 사용할 데이터 또는 만약 재설치에 실패했을 때를 대비해서
기존의 데이터를 모두 백업을 받고, 현재의 설정도 백업받아야 겠지요.

SQL>spool bakdata.txt
SQL>select * from v$dba_users; - 유저들의 디폴트 테이블스페이스, temp테이블스페이스
SQL>select * from v$datafile; -- 각각의 데이터파일의 위치와 크기
SQL>select * from dba_tablespaces -- 테이블 스페이스 정보
SQL>select * from dba_data_files; -- 테이블 스페이스와 그 파일의 구성정보
SQL>select * from dba_rollback_segs; -- 롤백 세그먼트 정보
SQL>select * from v$log; -- redo log 의 정보
SQL>select * from v$logfile; -- redo log file 정보
SQL>spool off

그리고 파라미터 파일인 init<SID>.ora, (ifile 이라는 파라미터로 설정되어있는)config*.ora 백업.

한가지 더 있습니다.
바로 control file 입니다. 이것은 복구 할 때 중요한 파일입니다.
control 파일은 2진 파일이므로, 생성해주는 sql 스크립트 파일을 가지고 있으면 여러 가지로 편리합니다.

SQL>alter database backup controlfile to trace ;

이렇게 하고 init .ora 파일에(또는 config .ora) 설정된 user_dump_dest 디렉토리로 가서
가장 최근의 *.trc 파일을 열어보면 control 파일을 만드는 스크립트가 포함되어 있습니다.
이것을 편집해 놓으면 바로 controlfile을 만들수 있습니다.

control.sql 샘플(첨부)


ORACLE_SID (= DB name) 을 변경했을 경우

- UNIX의 경우
ORACLE_SID, DB_NAME 파라미터가 들어가는 모든 파일을 찾아서 수정해야 한다.

1. 홈디렉토리에서 환경변수 설정파일인 .profile(또는 .cshrc)의
ORACLE_SID=<new_SID> 부분을 편집하고
$. .profile (.cshrc 의 경우 $ source .cshrc로 실행)
로 실행시켜 준다. 아니면,
$export ORACLE_SID=ORATEST
를 수행시켜 준다.
2. /opt/var/oracle/oratab 파일을 열어 SID:ORACLE_HOME path:Y/N를 수정
3. init*.ora 또는 config*.ora 파일의 db_name을 수정
4. 아래에 나올 crdb*.sql 파일을 수정

- NT의 경우
regedit 를 실행시켜 local_machine > software > oracle > home0 (oracle 8) 로
이동하여 ORACLE_SID 를 수정합니다. 그리고 init*.ora 또는 config*.ora 파일을 수정.


2. database 생성 스크립트 crdb*.sql , crdb2*.sql 편집


oracle 7.3 이상의 경우
$ORACLE_HOME=/home1/oracle/app/oracle/product/7.3.3
이라면 crdb*.sql 파일들은
/home1/oracle/app/oracle/admin/ORA7/create
에 위치합니다.
이 위치로 이동하여 새로운 이름으로 copy하고서, 필요한 내용을 수정합니다.
이때 init *.ora 등 파라미터 파일과 연동되는 부분과 각종 데이터 파일의
위치와 크기를 수정할 때는 주의를 기울여야 합니다.

NT 인경우 이 스크립트가 없습니다. sample 스크립트 파일을 참조하세요.

crdboracle.sql sample.(첨부)
crdb2oracle.sql sameple.(첨부)


3. Create Database


$svrmgr <-------------------------- 서버메니져를 실행 (NT의 경우 svrmgrl.exe)
SVRMGR>connect internal <----- 로그인
SVRMGR>@crdboracle.sql
반드시 에러를 확인하고 다음으로 넘어 가야 합니다.
SVRMGR>@crdb2oracle.sql
또 확인 해야죠. 시간이 대략 1시간 정도.걸립니다.

이 과정이 끝나면 데이터 파일들은 제대로 생성되었는지 꼼꼼히 확인하고 다음으로 넘어가야 합니다.
보통 아래과정에서 에러가 생기기 마련입니다.

4. system table/view 생성


우선 ORACLE_HOME/rdbms/admin 디렉토리로 이동하여
catalog.sql, catproc.sql, catexp.sql 의 3가지 스크립트 파일이 존재하는지 확인하십시오.

SVRMGR>connect internal
SVRMGR>@$ORACLE_HOME/rdbms/admin /catalog
-- 20 분 소요
SVRMGR>@$ORACLE_HOME/rdbms/admin /catproc
-- 1시간 소요
SVRMGR>@$ORACLE_HOME/rdbms/admin /catexp
-- 30분 소요
만일 위의 스크립트를 돌리다 에러다 싶으면 데이터베이스 생성할 때 뭔가 잘못된 것입니다.
확인하고 다시 실행 해야겠죠..


5. 도움말과 sample table / view 생성


sqlplus를 실행하고 system/manager 로 login 합니다.

$ cd $ORACLE_HOME/sqlplus/admin/help
$ SYSTEM_PASS=system/manager;export SYSTEM_PASS
$ helpins
이렇게 해서 sqlplus 의 도움말을 설치하고 (NT 에서는 이런 과정이 필요 없습니다.)
다음에 scott/tiger 의 샘플 테이블을 설치합니다.

$ cd $ORACLE_HOME/sqlplus/admin
$ sqlplus system/manager
SQL> create user scott identified by tiger
default tablespace users temporary tablespace temp
quota unlimited on users
quota unlimited on temp;
SQL> grant connect,resource to scott;
SQL>@ $ORACLE_HOME/sqlplus/admin/pupbld.sql
SQL> connect scott/tiger;
SQL> @$ORACLE_HOME/sqlplus/demo /demobld.sql

이로서 DB의 재설치 끝~


6. 백업 데이터 복원

exp 로 백업받은 데이터를 복원할 때는 imp 를 사용하여 선별적으로 또는 full 복원 합니다.
그러나 임포트 하기 전에 임포트할 userid, tablespace 가 존재하고 있어야 합니다.
이들은 백업받은 메타데이터 정보를 이용해서 다시 살려 놓습니다.

SQL> create tablespace [name] datafile ‘/data2/oracle/oradata ….’ [Size 10M] [reuse]
Default storage( initial 1024 next 1024 …. );

일단 테이블 스페이스를 만들고 유저를 생성.

SQL> create user [id] indentified by [passwd]
default tablespace [tablespace name] temporary tablespace [temp] …;
grant connect, resource to [id];

Export받은 File에서 Index를 제외한 나머지만 Import 하려면 indexes=n 옵션을 주고,

$ imp system/manager file=fullbackup.dmp fromuser=scott touser=scott indexes=n commit=y

Indexfile Option을 이용하여 Index Script를 만든다.

$ imp system/manager fromuser=scott touser=scott file=scott.dmp indexfile=index.sql

위와 같이 명령을 실행하면 index.sql이라는 File이 만들어지고,
그 파일을 열어서 확인해 보면 create table 문장과 create index문장이 있고 Create Table 문장은 REM으로 막혀 있어서 결과적으로 Create Index문만 실행할 수 있도록 되어 있습니다.

이 파일에서 Create Index문의 Tablespace만 바꾸어서 다음과 같이 SQL*Plus에서 실행.
$ sqlplus scott/tiger
SQL> @index