본문 바로가기

Oracle/오라클 양성반 15기

dbca. script, template 이것저것

템플릿 : 플라스틱이나 아크릴로 만든 얇은 판에 여러 가지 크기의 원 또는 타원 등과 같은 기본도형이나 각종 문자기호 등을 그리는 제도용구.

 

본인이 아는 템플릿의 정의는 붕어빵기계다.

아마도 웹디자인을 했던사람이라면 더욱더 잘 알만한 말같다.

 

템플릿의 가장큰 특징은

정해진 양식. 또는 정해진 구성을 가지고 약간만의 수정을 통해서 짧은 시간에 많은 결과물을 낼수있다고 하는것이 가장 큰것이 아닐까하고 생각이 된다.

 

오라클의 DBCA에 template 옵션이 있는데.

사실은 모르겠다.

흔히들 알고있는 템플릿의 용도같아보이며 이것또한

간단한 몇가지 설정을 통해서 바로 또다른 DB를 생성할수있는 용도로 보인다.

 

우선 db 하나를 dbca를 통해서 생성을 했다. 물론 template 옵션을 활성화하고나서.(여기는 따라하기로 누구나 next next해서 했을테니 패스)

그러고나서 다시 dbca를 들어가서 보기로 했다.

 

 

1. dbca 를 통해서 prod1 라는 이름으로 DB를 생성 , script 및 template 생성.

2. create 후 application 종료되면 다시 dbca를 들어가본다.

 

ㄱ) dbca 화면



ㄴ) create database 선택


ㄷ) 목록에 template 를 만든 prod1이 보인다. prod1 을 선택하고 다음~~
※ 이걸봤을때는 적어도 이 목록에 보이는것들
기존의 4가지도 템플릿으로 이루어져있다는것으로 판단이 된다.



ㄹ) prod2 생성



ㅁ) prod2의 템플릿을 다시생성후 다시 또 create


ㅂ) 생성~~~~



여기서 예상해볼수있는것은

dbca로 template 를 만들면 내부적으로 목록을 관리하는듯보인다.

그 템플릿을 언제라도 사용할수있도록 저렇게 목록에서도 활성화된다는것으로 판단할수있다.

 

SCRIPTS

=============================================================================================================

 

$ORACLE_BASE/admin/

안에 들어가보자~~


여러가지 파일이 생겼다.

 

prod2.sh 라는 파일이 생겼으며 755인걸 봐선 쉘실행파일로 보여진다.

안에 뭐가 있을라나?

 

[oracle@ora1 scripts]$ cat prod2.sh
#!/bin/sh

mkdir -p /u01/app/oracle/admin/prod2/adump
mkdir -p /u01/app/oracle/admin/prod2/bdump
mkdir -p /u01/app/oracle/admin/prod2/cdump
mkdir -p /u01/app/oracle/admin/prod2/dpdump
mkdir -p /u01/app/oracle/admin/prod2/pfile
mkdir -p /u01/app/oracle/admin/prod2/udump
mkdir -p /u01/app/oracle/product/10.2.0/cfgtoollogs/dbca/prod2
mkdir -p /u01/app/oracle/product/10.2.0/dbs
mkdir -p /u02/oradata/prod2
ORACLE_SID=prod2; export ORACLE_SID
echo You should Add this entry in the /etc/oratab: prod2:/u01/app/oracle/product/10.2.0:Y
/u01/app/oracle/product/10.2.0/bin/sqlplus /nolog @/u01/app/oracle/admin/prod2/scripts/prod2.sql
[oracle@ora1 scripts]$

 

실행파일이 저런것으로 보아.

추후에~~~ 어디에선가~~~ 다른 서버에 같은 환경에서 같은 DB를 또 설치를 할때 이~~ sh를 이용하면 한번에 될것으로보인다

 

생각해보면 별로 쓸모는 없다.

 

디렉토리도 고정이고 SID도 고정이며 각기 다른파일을 열어보면 prod2이라는 이름이 고정으로 들어가있다.

그 말인 즉슨 내가 원하는 디렉토리 원하는 SID명을 변경은 안된다.

 

자 이~~~ XX같은것을 왜쓸까???????

 

쓸곳이 있다.~~~적어도 내가 겪었던 업무라면 분명 쓸수있다. ㅎㅎ;;

직접적으로 예는 못들어도 이런경우를 예를 들어보자.

 

전국에 100여개의 매장이 있다.

음 매장은 컴퓨터를 파는 매장이라고 치자~

하드웨어의 성능의 문제로 인해서 또는 여타 다른 문제로 인해서 각 매장은 각각자체적인 DB를 내부적으로 구축하고

저녁 6시이후 마감시간이 되면 취합을 해야하는 시스템이라고 치자.

 

물론 이경우 저녁에 일괄적으로 적용하는 통합하는 방법이 있으나 일단 그건 패스하자 ~~~ 예제니까.

 

100여개의 매장에 같은 DB를 설치를 하러

DB엔지니어닌 나는 100여군데를 돌아다니면서 각각 설치를 해줘야한다.

정말 D.O.G. 고생 이다.

 

매장마다 들러서 dbca라고 명령어를 쳐서 계속 같은 설정을 하고 있어야할까??????

 

이왕 이럴바에는 script를 만들어서 sh파일만 실행하면 편할듯하다.

 

그럼 같은 환경의 같은 DB가 생성된다.

 

===================================================================================================================

이제 잡소리는 그만하고 sh를 직접 돌려보자.

 

기존에 DB를  DROP 하더라로 해당 스크립트는 잘 남아있으니 걱정말고 날려버리자.

 

기존에 본인의 컴퓨터에서 돌리면 prod2가 이미 있으므로 에러가 날테니 우선 drop 을 하자

그래픽적인 ui보단 console를 좋아하는 나로서는 ~~ sqlplus 에서 drop하련다.

[oracle@ora1 scripts]$ export ORACLE_SID=prod2
[oracle@ora1 scripts]$ sqlplus

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Sep 7 08:02:04 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Enter user-name: /as sysdba

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount exclusive restrict
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                  2019288 bytes
Variable Size              79691816 bytes
Database Buffers           79691776 bytes
Redo Buffers                6369280 bytes
Database mounted.
SQL> drop database;

Database dropped.

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL>

이제 sh 파일 실행준비

 

sys,system 비밀번호를 입력하면 나머지는 알아서 한다.

 

아래화면 내용은 실행한 결과.

 

[oracle@ora1 tempsss]$ ./prod2.sh
You should Add this entry in the /etc/oratab: prod2:/u01/app/oracle/product/10.2.0:Y

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Sep 7 08:10:53 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

specify a password for sys as parameter 1
Enter value for 1: oracle <-- sys 비밀번호 입력
specify a password for system as parameter 2
Enter value for 2: oracle <-- system 비밀번호 입력.

Connected to an idle instance.
SQL> spool /u01/app/oracle/admin/prod2/scripts/CloneRmanRestore.log
SQL> startup nomount pfile="/u01/app/oracle/admin/prod2/scripts/init.ora";
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                  2019288 bytes
Variable Size              75497512 bytes
Database Buffers           83886080 bytes
Redo Buffers                6369280 bytes
SQL> @/u01/app/oracle/admin/prod2/scripts/rmanRestoreDatafiles.sql;
SQL> set echo off;

TO_CHAR(SYSTIMEST
-----------------
20100907 08:11:18

Allocating device....
Specifying datafiles...
Specifing datafiles...
Restoring ...
Restore done.

PL/SQL procedure successfully completed.


TO_CHAR(SYSTIMEST
-----------------
20100907 08:11:49

Connected.
SQL> spool /u01/app/oracle/admin/prod2/scripts/cloneDBCreation.log
SQL> Create controlfile reuse set database "prod2"
  2  MAXINSTANCES 8
  3  MAXLOGHISTORY 1
  4  MAXLOGFILES 16
  5  MAXLOGMEMBERS 3
  6  MAXDATAFILES 100
  7  Datafile
  8  '/u02/oradata/prod2/system01.dbf',
  9  '/u02/oradata/prod2/undotbs01.dbf',
 10  '/u02/oradata/prod2/sysaux01.dbf',
 11  '/u02/oradata/prod2/users01.dbf'
 12  LOGFILE GROUP 1 ('/u02/oradata/prod2/redo01.log') SIZE 51200K,
 13  GROUP 2 ('/u02/oradata/prod2/redo02.log') SIZE 51200K,
 14  GROUP 3 ('/u02/oradata/prod2/redo03.log') SIZE 51200K RESETLOGS;

Control file created.

SQL> exec dbms_backup_restore.zerodbid(0);

PL/SQL procedure successfully completed.

SQL> shutdown immediate;
ORA-01109: database not open


Database dismounted.
ORACLE instance shut down.
SQL> startup nomount pfile="/u01/app/oracle/admin/prod2/scripts/initprod2Temp.ora";
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                  2019288 bytes
Variable Size              75497512 bytes
Database Buffers           83886080 bytes
Redo Buffers                6369280 bytes
SQL> Create controlfile reuse set database "prod2"
  2  MAXINSTANCES 8
  3  MAXLOGHISTORY 1
  4  MAXLOGFILES 16
  5  MAXLOGMEMBERS 3
  6  MAXDATAFILES 100
  7  Datafile
  8  '/u02/oradata/prod2/system01.dbf',
  9  '/u02/oradata/prod2/undotbs01.dbf',
 10  '/u02/oradata/prod2/sysaux01.dbf',
 11  '/u02/oradata/prod2/users01.dbf'
 12  LOGFILE GROUP 1 ('/u02/oradata/prod2/redo01.log') SIZE 51200K,
 13  GROUP 2 ('/u02/oradata/prod2/redo02.log') SIZE 51200K,
 14  GROUP 3 ('/u02/oradata/prod2/redo03.log') SIZE 51200K RESETLOGS;

Control file created.

SQL> alter system enable restricted session;

System altered.

SQL> alter database "prod2" open resetlogs;

Database altered.

SQL> alter database rename global_name to "prod2";

Database altered.

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/u02/oradata/prod2/temp01.dbf' SIZE 20480K REUSE AUTOEXTEND ON NEXT 640K
MAXSIZE UNLIMITED;

Tablespace altered.

SQL> select tablespace_name from dba_tablespaces where tablespace_name='USERS';

TABLESPACE_NAME
------------------------------
USERS

SQL> select sid, program, serial#, username from v$session;

       SID PROGRAM                                             SERIAL#
---------- ------------------------------------------------ ----------
USERNAME
------------------------------
       155 oracle@ora1.oracle.com (QMNC)                             1


       160 sqlplus@ora1.oracle.com (TNS V1-V3)                       1
SYS

       161 oracle@ora1.oracle.com (MMNL)                             3

 

       SID PROGRAM                                             SERIAL#
---------- ------------------------------------------------ ----------
USERNAME
------------------------------
       162 oracle@ora1.oracle.com (MMON)                             3


       163 oracle@ora1.oracle.com (RECO)                             1


       164 oracle@ora1.oracle.com (SMON)                             1

 

       SID PROGRAM                                             SERIAL#
---------- ------------------------------------------------ ----------
USERNAME
------------------------------
       165 oracle@ora1.oracle.com (CKPT)                             1


       166 oracle@ora1.oracle.com (LGWR)                             1


       167 oracle@ora1.oracle.com (DBW0)                             1

 

       SID PROGRAM                                             SERIAL#
---------- ------------------------------------------------ ----------
USERNAME
------------------------------
       168 oracle@ora1.oracle.com (MMAN)                             1


       169 oracle@ora1.oracle.com (PSP0)                             1


       170 oracle@ora1.oracle.com (PMON)                             1

 

12 rows selected.

SQL> alter database character set INTERNAL_CONVERT WE8ISO8859P1;

Database altered.

SQL> alter database national character set INTERNAL_CONVERT AL16UTF16;

Database altered.

SQL> alter user sys identified by "&&sysPassword";

User altered.

SQL> alter user system identified by "&&systemPassword";

User altered.

SQL> alter system disable restricted session;

System altered.

SQL> @/u01/app/oracle/admin/prod2/scripts/postScripts.sql
SQL> connect "SYS"/"&&sysPassword" as SYSDBA
Connected.
SQL> set echo on
SQL> spool /u01/app/oracle/admin/prod2/scripts/postScripts.log
SQL> @/u01/app/oracle/product/10.2.0/rdbms/admin/dbmssml.sql;
SQL> CREATE OR REPLACE LIBRARY dbms_sumadv_lib AS '/u01/app/oracle/product/10.2.0/lib/libqsmashr.so';
  2  /

Library created.

SQL> execute dbms_datapump_utl.replace_default_dir;

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL> connect "SYS"/"&&sysPassword" as SYSDBA
Connected.
SQL> alter session set current_schema=ORDSYS;

Session altered.

SQL> @/u01/app/oracle/product/10.2.0/ord/im/admin/ordlib.sql;
SQL> create or replace library ORDIMLIBS as '/u01/app/oracle/product/10.2.0/lib/libordim10.so';
  2  /

Library created.

SQL> create or replace library ORDIMLIBT trusted as static;
  2  /

Library created.

SQL>
SQL> Rem ordimasf.jar is only available via download from the
SQL> Rem Oracle Technology Network website. Go to the interMedia section of
SQL> Rem http://otn.oracle.com.
SQL> Rem
SQL> Rem Uncomment the following lines after downloading ordimasf.jar.
SQL>
SQL> -- BEGIN
SQL> -- dbms_java.loadjava('-synonym -schema ORDSYS -resolve -grant PUBLIC ord/jlib/ordimasf.jar');
SQL> -- EXCEPTION
SQL> -- WHEN OTHERS THEN
SQL> --   NULL;
SQL> -- END;
SQL> -- /
SQL> alter session set current_schema=SYS;

Session altered.

SQL> connect "SYS"/"&&sysPassword" as SYSDBA
Connected.
SQL> connect "SYS"/"&&sysPassword" as SYSDBA
Connected.
SQL> execute dbms_swrf_internal.cleanup_database(cleanup_local => FALSE);

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL> spool off
SQL> @/u01/app/oracle/admin/prod2/scripts/postDBCreation.sql
SQL> connect "SYS"/"&&sysPassword" as SYSDBA
Connected.
SQL> set echo on
SQL> spool /u01/app/oracle/admin/prod2/scripts/postDBCreation.log
SQL> connect "SYS"/"&&sysPassword" as SYSDBA
Connected.
SQL> set echo on
SQL> create spfile='/u01/app/oracle/product/10.2.0/dbs/spfileprod2.ora' FROM pfile='/u01/app/oracle/admin/prod2/sc                         ripts/init.ora';

File created.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> connect "SYS"/"&&sysPassword" as SYSDBA
Connected to an idle instance.
SQL> startup ;
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                  2019288 bytes
Variable Size              75497512 bytes
Database Buffers           83886080 bytes
Redo Buffers                6369280 bytes
Database mounted.
Database opened.
SQL> select 'utl_recomp_begin: ' || to_char(sysdate, 'HH:MI:SS') from dual;

'UTL_RECOMP_BEGIN:'||TO_CH
--------------------------
utl_recomp_begin: 08:13:52

SQL> execute utl_recomp.recomp_serial();

PL/SQL procedure successfully completed.

SQL> select 'utl_recomp_end: ' || to_char(sysdate, 'HH:MI:SS') from dual;

'UTL_RECOMP_END:'||TO_CH
------------------------
utl_recomp_end: 08:14:02

SQL> spool /u01/app/oracle/admin/prod2/scripts/postDBCreation.log
SQL>

 

=================================================================================================================

instance 가 실행됬으며 process가 떠있는것도 확인~

 

SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
prod2            OPEN

SQL>    

 

=================================================================================================================

 

뭔가 좀 이상허다......

 

위처럼 이상없이는 되나. 만약 디렉토리를 변경해서 실행하면 잘될까???

 

아래는 기존 admin/prod2 의 정보가 있는곳의 디렉토리를 변경하고

[oracle@ora1 admin]$ mv prod2/ prod2_old/

 

/tempsss 로 관련 파일을 전부 복사했다.

[oracle@ora1 tempsss]$ pwd
/tempsss
[oracle@ora1 tempsss]$ ls
cloneDBCreation.sql   init.ora           postDBCreation.sql  prod2.sh   rmanRestoreDatafiles.sql
CloneRmanRestore.sql  initprod2Temp.ora  postScripts.sql     prod2.sql
[oracle@ora1 tempsss]$   


실행하면?

[oracle@ora1 tempsss]$ ./prod2.sh
You should Add this entry in the /etc/oratab: prod2:/u01/app/oracle/product/10.2.0:Y

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Sep 7 09:20:22 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SP2-0310: unable to open file "/u01/app/oracle/admin/prod2/scripts/prod2.sql"
SQL>

 

역시나 예상대로 열수없다는 메세지.

디렉토리가 고정이어서 같은 하드웨어및 버전의 시스템에서 디렉토리도 위치도 그대로 $ORACLE_BASE/admin/SID_NAME/scrips 를 만들어서 그곳에서 실행을 해야하는 불편함은 보인다.

==================================================================================================================

이제 템플릿과 스크립트의 용도가 대충 보인다.

 

템플릿은 기존에 구성했던 여러가지 정보(디렉토리, 메모리 구성, 디스크구성등의 정보)를 설정한 내용을 저장해서.

추후에도 사용할수있도록 한다라는것이 주된기능이다.

 

또한 이 템플릿은 사일런트 모드 INSTALL에서 템플릿을 참조 해서도 설치할수있다.(설치 성공후 업데이트예정)

 

 

그리고 스크립트의 기능은 현재 설치했던 DB정보를 그대로 타 시스템에서 그대로 적용하고 싶을때 GUI화면이 없이 바로 적용할수있다라고 보여진다.

 

실제 스크립트 자체에서 디렉토리의 변경정보가 없어서 약간 부족함이 보이긴하나

같은 인스턴스의 DB를 여러군데 설치를 해야할경우 후딱~ 설치할수있는 기능정도로 보면 어떨까 ?

'Oracle > 오라클 양성반 15기' 카테고리의 다른 글

SYSOPER  (0) 2010.09.28
pl/sql exception  (0) 2010.09.12
merge into  (0) 2010.09.12
composite data type , cursor  (0) 2010.09.12
for update  (0) 2010.09.12