[oracle] 기존 DB에 database 수동으로 추가하기

기존에 설치되어있는 DB에 datafile위치를 다르게 새로운 database 를 생성하는 예제입니다.
몇시간 고생해서 설치했는데.. 혹시 필요하신분 참고하세요.

0. 들어가기전에…
$ORACLE_HOME 은 오라클 제품이 설치되는 디렉토리
$ORACLE_BASE 는 datafile, control file등이 설치되는 디렉토리
linux는 ORACLE_HOME이 ORACLE_BASE 밑에 들어가 있지만.. SID에 따라 ORACLE_BASE는 변경이 가능하다.
여기서는 database file을 다른 위치에 설치하려고 하기때문에 ORACLE_BASE를 변경한다.

1. 환경변수 세팅
ORACLE_HOME, ORACLE_SID, PATH, LD_LIBRARY_PATH 를 세팅한다.
여기선 기존세팅이 되어있다 보고, ORACLE_SID만 수정한다.
(datafile path를 full path로 잡아줄 생각이기에, $ORACLE_BASE는 변경하지 않아도 된다.)

$ export ORACLE_SID=TESTDB

2. init.ora(pfile) 생성
$ORACLE_HOME/dbs/init.ora 를 생성할 SID용 file로 복사 후 몇가지 변수 조정
$ cp init.ora initTESTDB.ora

[oracle@www dbs]$ diff init.ora initTESTDB.ora
78c78
< db_name=DEFAULT

> db_name=TESTDB
92c92
< shared_pool_size = 3500000                                            # SMALL

> # shared_pool_size = 3500000                                            # SMALL
94c94
< # shared_pool_size = 9000000                                          # LARGE

> shared_pool_size = 9000000                                          # LARGE
159c159
< control_files = (ora_control1, ora_control2)

> control_files = (/home/orahome/oradata/testdb/control1.ctl, /home/orahome/oradata/testdb/control2.ctl)
174c174,178
< #compatible = 8.1.0

> compatible = 9.2.0.0.0
> undo_management = auto
> undo_tablespace=undotbs
> background_dump_dest=/home/orahome/logs
> user_dump_dest=/home/orahome/logs
[oracle@www dbs]$

3. nomount 로 startup
$ sqlplus “/nolog”
SQL> conn /as sysdba
SQL> startup nomount

4. create table 실행
SQL> @create_db.sql

[oracle@www ~]$ cat create_db.sql
CREATE DATABASE testdb
   USER SYS IDENTIFIED BY oracle
   USER SYSTEM IDENTIFIED BY oracle
   LOGFILE GROUP 1 (‘/home/orahome/oradata/testdb/redo01.log’) SIZE 100M,
           GROUP 2 (‘/home/orahome/oradata/testdb/redo02.log’) SIZE 100M,
           GROUP 3 (‘/home/orahome/oradata/testdb/redo03.log’) SIZE 100M
   MAXLOGFILES 5
   MAXLOGMEMBERS 5
   MAXLOGHISTORY 1
   MAXDATAFILES 100
   MAXINSTANCES 1
   CHARACTER SET KO16KSC5601
   NATIONAL CHARACTER SET AL16UTF16
—   NATIONAL CHARACTER SET KO16KSC5601
   DATAFILE ‘/home/orahome/oradata/testdb/system01.dbf’ SIZE 325M
   EXTENT MANAGEMENT LOCAL
   DEFAULT TEMPORARY TABLESPACE tempts1
      TEMPFILE ‘/home/orahome/oradata/testdb/temp01.dbf’
      SIZE 20M
   UNDO TABLESPACE undotbs
      DATAFILE ‘/home/orahome/oradata/testdb/undotbs01.dbf’
      SIZE 200M AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
/
[oracle@www ~]$

(character set 설정이 잘 안되서.. 그냥 우선 AL16UTF16 으로 잡음)

5. 에러가 나면 alert log 를 확인한다.

6. catalog.sql, catproc.sql 실행
$ORACLE_HOME/rdbms/admin 에 있는
catalog.sql, catproc.sql 을 실행한다.
SQL> @/opt/oracle/product/9.2.0.4/rdbms/admin/catalog.sql
SQL> @/opt/oracle/product/9.2.0.4/rdbms/admin/catproc.sql

7. 자료 백업 및 spfile 생성
SQL> shutdown immediate
[datafile 및 initTESTDB.ora 복사]
SQL> startup
SQL> create spfile from pfile=’/opt/oracle/product/9.2.0.4/dbs/initTESTDB.ora’

Loading