2014. 10. 31. 23:39
nomount

1. 서버프로세스(server process)[각주:1]가 파라미터파일(parameter file[각주:2] - spfile / pfile)을 
    PGA(program global area[각주:3])로 가지고 와서 읽음
2. 해당 파라미터 파일에서 지정한 값을 확인함
3. 파라미터 파일에 지정된 값대로 메모리에 instance를 생성

mount

주로 하는 작업
- 파라미터 파일에 기록되어 있는 위치에서 컨트롤 파일을 읽어서 장애복구시 사용
- data file 이나  redo log file 관련된 작업(rename, drop) 등을 함

1. 체크포인트 프로세스(ckpt process) 가 모든 컨트롤 파일(control file)을 읽고 일시적으로 lock를 설정함
2. 컨트롤 파일 헤더 정보를 검증해서 컨트롤 파일에 이상유무를 확인
    mountid를 계산해서 컨트롤 파일에 저장
3. 파라미터 파일의 데이터베이스 네임과 컨트롤 파일의 디비 네임이 동일한지 검사
4. 위 과정이 이상이 없으면 alert log file 에 successful mount of redo thread 메시지를 기록 한 후 
    각 프로세스 정보나 db 상세내역을 기록함

*확인방법: 동시에 터미널 창을 2개 열어서 확인 가능

open

1. 데이터 파일 헤더 부분의 정보와 컨트롤 파일의 정보를 서로 비교해 장애유무를 판단
    이때 사용하는 것이 checkpoint scn 정보임, 이 정보들에 이상이 없을 경우 DB에 문제가 없다고 판단
    정상적으로 open

출처 : 백업과 복구(서진수) p20





  1. 유저프로세스가 전해 준 sql 문장을 실제 수행하는 프로세스 [본문으로]
  2. 오라클 시작시 SGA를 생성할 때 참고하는 파일 [본문으로]
  3. 각 프로세스들이 개별적으로 사용하는 메모리 공간 [본문으로]
Posted by 성장하는yw
2014. 10. 31. 01:33

1. vmware에서 원하는 용량만큼 새로운 hard disk를 생성

2. fdisk -l 에서 83 형식

3. ext3.mkfs

4. mkdir /새로운 폴더

5. mount /디바이스 /불일폴더

6. vi /etc/fstab 편집













혹시

터미널 창에서 fdisk -l 명령어로 추가한 새로운 디스크가 나오지 않으면

vmware의 리눅스를 재부팅하면 새롭게 추가한 디스를 볼 수 있음



1. 루트로 터미널 창으로 접속함


2. 연결된 하드 디스크 내용 확인


[root@localhost ~]# fdisk -l


Disk /dev/sda: 32.2 GB, 32212254720 bytes

255 heads, 63 sectors/track, 3916 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14        1288    10241437+  83  Linux

/dev/sda3            1289        1925     5116702+  83  Linux

/dev/sda4            1926        3916    15992707+   5  Extended

/dev/sda5            1926        2180     2048256   82  Linux swap / Solaris

/dev/sda6            2181        2307     1020096   83  Linux

/dev/sda7            2308        3916    12924261   83  Linux


Disk /dev/sdb: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


Disk /dev/sdb doesn't contain a valid partition table



3. 파티션 하기

[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.


The number of cylinders for this disk is set to 2610.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n                  새롭게 파티션을 만들 때 n(new) 입력
Command action
   e   extended
   p   primary partition (1-4)
p                                                    주 파티션
Partition number (1-4): 1                   주 파티션 번호
First cylinder (1-2610, default 1): 1    시작 실린더번호
Last cylinder or +size or +sizeM or +sizeK (1-2610, default 2610):    엔터 : 모든용량     
Using default value 2610

Command (m for help): p                    파티션 생성시 설정한 옵션 볼 수 있음

Disk /dev/sdb: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        2610    20964793+  83  Linux

Command (m for help): w                파티션 저장
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

4. 파티션 완료 된 디스크를 포맷, 주의할 점 장치명을 적을 때 뒤에 숫자 1을 적어주어야 함

[root@localhost ~]# mkfs.ext3 /dev/sdb1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
2621440 inodes, 5241198 blocks
262059 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
160 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


5. 디렉토리를 생성해서 마운트 작업을 함

[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sdb1 /data

6. 재부팅 후에도 적용되도록 /etc/fstab 파일에 등록

[root@localhost ~]# vi /etc/fstab
LABEL=/                     /                       ext3    defaults        1 1
LABEL=/app                /app                 ext3    defaults        1 2
LABEL=/var                 /var                   ext3    defaults        1 2
LABEL=/home             /home                ext3    defaults        1 2
LABEL=/boot               /boot                 ext3    defaults        1 2
tmpfs                         /dev/shm          tmpfs   defaults        0 0
devpts                        /dev/pts    devpts  gid=5,mode=620  0 0
sysfs                          /sys                  sysfs   defaults        0 0
proc                           /proc                proc    defaults        0 0
LABEL=SWAP-sda5    swap                 swap    defaults        0 0
/dev/sdb1                    /data                ext3    defaults        1 2  내용 추가

:wq!

7. 장치확인

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             4.8G  3.0G  1.5G  67% /
/dev/sda7              12G   12G  279M  98% /app
/dev/sda6             965M   80M  836M   9% /var
/dev/sda2             9.5G  1.1G  8.0G  12% /home
/dev/sda1              99M   12M   82M  13% /boot
tmpfs                 506M     0  506M   0% /dev/shm
/dev/sdb1              20G  173M   19G   1% /data


'DB > oralce' 카테고리의 다른 글

recovery 이론 및 dump파일 내용  (0) 2014.11.01
오라클이 시작되는 원리  (0) 2014.10.31
backup  (0) 2014.10.30
[실습] parameter file 삭제 후 재생성하기  (0) 2014.10.29
컨트롤 파일 다중화시 ora-00205 에러  (0) 2014.10.29
Posted by 성장하는yw
2014. 10. 30. 19:22

1. 닫힌 백업( cold backup, close backup )

- database의 운영상태가 closed 된 상태에서 수행하는 백업을 의미

- 백업 시점이 모두 동일해야 함

- data file, online redo log file, control file 백업가능

- 운영중(open) 상태에서는 수행할 수 없음

- archived log mode / no archived mode 상관없음


2. 열린 백업(hot backup, begin backup, online backup)

- 닫힌 백업과 달리 DB가 운영중(open) 상태에서도 백업을 수행 가능

- archived log mode 상태에서만 수행 가능

- 많은 양의 redo log가 발생됨

- data file, control file만 백업가능(redo log file 백업 불가)

- hotbackup 할 때, 디비 offline  하면 안 됨


*노아카이브-아카이브 /  아카이브-노아카이브 모드가 바뀌면 무조건 백업을 받아야 한다.

왜냐하면 scn이 달라지기 때문이다. 


cold back


백업대상확인 -> DB종료 -> 대상백업수행


1. data file 확인


SQL> select name from v$datafile;

NAME

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

/app/oracle/oradata/testdb/system01.dbf

/app/oracle/oradata/testdb/sysaux01.dbf

/app/oracle/oradata/testdb/undotbs01.dbf

/app/oracle/oradata/testdb/users01.dbf

/app/oracle/oradata/testdb/example01.dbf


2. control file 확인 


SQL> select name from v$controlfile;


NAME

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

/app/oracle/oradata/testdb/control01.ctl

/app/oracle/oradata/testdb/control02.ctl

/app/oracle/oradata/testdb/control03.ctl


3. online redo log file 확인


SQL> select member from v$logfile;


MEMBER

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

/app/oracle/oradata/testdb/redo01_a.log

/app/oracle/oradata/testdb/redo03_a.log

/app/oracle/oradata/testdb/redo01_b.log

/app/oracle/oradata/testdb/redo03_b.log


4. parameter file / password file 확인

SQL> !ls $ORACLE_HOME/dbs
afiedt.buf    hc_testdb.dat  lkTESTDB  orapwtestdb
hc_DBUA0.dat  init.ora       log.sql   spfiletestdb.ora

5. DB 종료

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

6. 각 백업파일들을 원하는 경로에 복사

[oracle@localhost backup]$ ls -al
#հ# 24
drwxr-xr-x 6 oracle dba      4096 10## 29 20:34 .
drwxr-xr-x 6 oracle dba      4096 10## 29 15:42 ..
drwxr-xr-x 3 oracle dba      4096 10## 29 19:13 close
drwxr-xr-x 2 oracle oinstall 4096 10## 29 20:35 close1
drwxr-xr-x 2 oracle dba      4096 10## 29 19:42 open
drwxr-xr-x 2 oracle oinstall 4096 10## 29 20:34 open1

*cp -av : cp 옵션
a 원본 파일 완전히 똑같은 파일로 복사
v 복사 과정을 직접 보여줌

[oracle@localhost ~]$ cp -av /app/oracle/oradata/testdb/*.dbf /data/backup/close/
`/app/oracle/oradata/testdb/example01.dbf' -> `/data/backup/close/example01.dbf'
`/app/oracle/oradata/testdb/sysaux01.dbf' -> `/data/backup/close/sysaux01.dbf'
`/app/oracle/oradata/testdb/system01.dbf' -> `/data/backup/close/system01.dbf'
`/app/oracle/oradata/testdb/temp01.dbf' -> `/data/backup/close/temp01.dbf'
`/app/oracle/oradata/testdb/undotbs01.dbf' -> `/data/backup/close/undotbs01.dbf'
`/app/oracle/oradata/testdb/users01.dbf' -> `/data/backup/close/users01.dbf'

[oracle@localhost ~]$ cp -av /app/oracle/oradata/testdb/*.ctl /data/backup/close/
`/app/oracle/oradata/testdb/control01.ctl' -> `/data/backup/close/control01.ctl'
`/app/oracle/oradata/testdb/control02.ctl' -> `/data/backup/close/control02.ctl'
`/app/oracle/oradata/testdb/control03.ctl' -> `/data/backup/close/control03.ctl'

[oracle@localhost ~]$ cp -av /app/oracle/oradata/testdb/*.log /data/backup/close/
`/app/oracle/oradata/testdb/redo01_a.log' -> `/data/backup/close/redo01_a.log'
`/app/oracle/oradata/testdb/redo01_b.log' -> `/data/backup/close/redo01_b.log'
`/app/oracle/oradata/testdb/redo02_a.log' -> `/data/backup/close/redo02_a.log'
`/app/oracle/oradata/testdb/redo02_b.log' -> `/data/backup/close/redo02_b.log'
`/app/oracle/oradata/testdb/redo03_a.log' -> `/data/backup/close/redo03_a.log'
`/app/oracle/oradata/testdb/redo03_b.log' -> `/data/backup/close/redo03_b.log'

[oracle@localhost ~]$ cp -av $ORACLE_HOME/dbs /data/backup/close
`/app/oracle/product/11g/dbs' -> `/data/backup/close/dbs'
`/app/oracle/product/11g/dbs/lkTESTDB' -> `/data/backup/close/dbs/lkTESTDB'
`/app/oracle/product/11g/dbs/orapwtestdb' -> `/data/backup/close/dbs/orapwtestdb'
`/app/oracle/product/11g/dbs/log.sql' -> `/data/backup/close/dbs/log.sql'
`/app/oracle/product/11g/dbs/afiedt.buf' -> `/data/backup/close/dbs/afiedt.buf'
`/app/oracle/product/11g/dbs/spfiletestdb.ora' -> `/data/backup/close/dbs/spfiletestdb.ora'
`/app/oracle/product/11g/dbs/hc_DBUA0.dat' -> `/data/backup/close/dbs/hc_DBUA0.dat'
`/app/oracle/product/11g/dbs/hc_testdb.dat' -> `/data/backup/close/dbs/hc_testdb.dat'
`/app/oracle/product/11g/dbs/init.ora' -> `/data/backup/close/dbs/init.ora'

[oracle@localhost ~]$ cd /data/backup/close
[oracle@localhost close]$ ls
control01.ctl  example01.dbf  redo02_b.log  system01.dbf
control02.ctl  redo01_a.log   redo03_a.log  temp01.dbf
control03.ctl  redo01_b.log   redo03_b.log  undotbs01.dbf
dbs            redo02_a.log   sysaux01.dbf  users01.dbf

hot backup


tablespace를 백업 모드로 변경 - OS 명령어로 해당 tablespace의 datafile을 백업장소로 복사 - 파일 복사 후 백업모드 종료


1. 아카이브 로그 모드 확인


SQL> archive log list;


Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /data/arc2

Oldest online log sequence     30

Next log sequence to archive   31

Current log sequence           31



SQL> select tablespace_name, status, contents
  2  from dba_tablespaces;

TABLESPACE STATUS    CONTENTS
---------- --------- ---------
SYSTEM     ONLINE    PERMANENT
SYSAUX     ONLINE    PERMANENT
UNDOTBS1   ONLINE    UNDO
TEMP       ONLINE    TEMPORARY
USERS      ONLINE    PERMANENT
EXAMPLE    ONLINE    PERMANENT

6 rows selected.

보기 좋게 화면에 출력하는 명령어들
SQL> set line 200
SQL> col tablspace_name format a10
SQL> col file_name format a50
현재 테이블스페이스 , 데이터 파일을 확인
SQL> select tablespace_name, bytes/1024/1024 MB, file_name
  2  from dba_data_files;

TABLESPACE         MB FILE_NAME
---------- ---------- --------------------------------------------------
USERS             7.5 /app/oracle/oradata/testdb/users01.dbf
UNDOTBS1           90 /app/oracle/oradata/testdb/undotbs01.dbf
SYSAUX            520 /app/oracle/oradata/testdb/sysaux01.dbf
SYSTEM            710 /app/oracle/oradata/testdb/system01.dbf
EXAMPLE       345.625 /app/oracle/oradata/testdb/example01.dbf

SQL> !

명령어를 따로 치지 않고, 스크립트를 만들어서 핫백업을 받음
스크립트를 만들지않고 각각의 명령어를 따로 입력해도 결과는 같음
스크립트 안에 있는 명령어는 모두 중요

[oracle@localhost backup]$ vi /app/oracle/open_backup.sql
alter tablespace users begin backup;
!cp -av /app/oracle/oradata/testdb/users01.dbf /data/backup/open/
alter tablespace users end backup;

alter tablespace sysaux begin backup;
!cp -av /app/oracle/oradata/testdb/sysaux01.dbf /data/backup/open/
alter tablespace sysaux end backup;

alter tablespace undotbs1 begin backup;
!cp -av /app/oracle/oradata/testdb/undotbs1.dbf /data/backup/open/
alter tablespace undotbs1 end backup;

alter tablespace system begin backup;
!cp -av /app/oracle/oradata/testdb/system01.dbf /data/backup/open/
alter tablespace system end backup;

alter tablespace example begin backup;
!cp -av /app/oracle/oradata/testdb/example01.dbf /data/backup/open/
alter tablespace example end backup;

alter database backup controlfile to '/data/backup/open/control01.ctl'
:wq!

SQL> @/app/oracle/open_backup.sql







Posted by 성장하는yw
2014. 10. 29. 20:48
pfile을 삭제 후 원본 pfile 복사해오기  

 

login as: oracle
oracle@192.168.198.128's password:
Last login: Thu Oct 23 20:30:57 2014 from 192.168.198.1

 

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Thu Oct 23 21:33:23 2014

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning option

 

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

 

SQL> !

 

[oracle@localhost ~]$ cd $ORACLE_HOME/dbs

 

[oracle@localhost dbs]$ ls
hc_DBUA0.dat  hc_testdb.dat  init.ora  lkTESTDB  orapwtestdb  spfiletestdb.ora

 

[oracle@localhost dbs]$ rm -fr spfiletestdb.ora

 

[oracle@localhost dbs]$ exit
exit


SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/app/oracle/product/11g/dbs/inittestdb.ora

 

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning option

 

[oracle@localhost ~]$ ls
Desktop  afiedt.buf  disk1  disk3  disk5    test_data.sql
a.out    database    disk2  disk4  log.sql

 

[oracle@localhost ~]$ ls $ORACLE_BASE/admin/testdb/pfile
init.ora.8262014183029

 

[oracle@localhost ~]$ cd $ORACLE_HOME/dbs

 

[oracle@localhost dbs]$ cp /app/oracle/admin/testdb/pfile/init.ora.8262014183029  inittestdb.ora

 

[oracle@localhost dbs]$ ls
hc_DBUA0.dat  hc_testdb.dat  init.ora  inittestdb.ora  lkTESTDB  orapwtestdb

 

SQL> startup
ORACLE instance started.

Total System Global Area  422670336 bytes
Fixed Size                  1344616 bytes
Variable Size             260049816 bytes
Database Buffers          155189248 bytes
Redo Buffers                6086656 bytes
Database mounted.
Database opened.

 

value 의 값이 없으면 pfile

SQL> show parameter pfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string

 

SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string

 

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

 

pfile만 있을 경우 pfile을 이용해서 spfile 생성하기

 

SQL> !ls $ORACLE_HOME/dbs
hc_DBUA0.dat hc_testdb.dat init.ora inittestdb.ora lkTESTDB orapwtestdb


SQL> create spfile from pfile;

File created.

 

SQL> !ls $ORACLE_HOME/dbs
hc_DBUA0.dat init.ora lkTESTDB spfiletestdb.ora
hc_testdb.dat inittestdb.ora orapwtestdb

 

SQL> !rm -fr $ORACLE_HOME/dbs/inittestdb.ora

 

SQL> !ls $ORACLE_HOME/dbs
hc_DBUA0.dat hc_testdb.dat init.ora lkTESTDB orapwtestdb spfiletestdb.ora

 

SQL> create pfile from spfile;

File created.

 

SQL> !ls $ORACLE_HOME/dbs
hc_DBUA0.dat init.ora lkTESTDB spfiletestdb.ora
hc_testdb.dat inittestdb.ora orapwtestdb


pfile과 spfile이 모두 있을 경우 spfile만 사용되므로 pfile을 사용하려면

spfile을 삭제하거나 이름을 변경해야함

 



 

 


 


 

'DB > oralce' 카테고리의 다른 글

오라클 실습시 용량부족으로 디스크 붙이는 방법  (0) 2014.10.31
backup  (0) 2014.10.30
컨트롤 파일 다중화시 ora-00205 에러  (0) 2014.10.29
oracle client 윈도우 설정  (0) 2014.10.28
dbms_job / dbms_scheduler  (0) 2014.10.27
Posted by 성장하는yw
2014. 10. 29. 18:05




문제점 : 컨트롤 파일을 오라클 계정으로 만들어준 것이 아니라 루트 계정으로 만들어 주고 

오라클 DB를 open 하려고 했음 


해결방안 : 컨트롤 파일에 오라클 권한을 주고, 다시 DB를 open하면 해결된다. 

'DB > oralce' 카테고리의 다른 글

backup  (0) 2014.10.30
[실습] parameter file 삭제 후 재생성하기  (0) 2014.10.29
oracle client 윈도우 설정  (0) 2014.10.28
dbms_job / dbms_scheduler  (0) 2014.10.27
사용자관리  (0) 2014.10.27
Posted by 성장하는yw
2014. 10. 28. 17:00

1. 설치할 clinet 파일을 오라클 계정으로 로그인해서 다운 받는다. 


자신의 컴퓨터가 몇 비트 운영체제인지 확인해서 파일을 받아야 한다. 

확인법 : 제어판\시스템 및 보안\시스템 - 시스템 종류를 보면 알 수 있다. (윈도우 7기준)




* 파일 다운로드 받는 곳(64비트)


http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461.html


2. client 파일을 설치한다.


- 시작프로그램-보조프로그램-실행

   또는 windows 로고 + r 하면 cmd 실행

- netca 입력

- 아래와 같은 창들이 열리면 화면과 같이 실행한다. 


로컬네트 서비스 이름 구성을 선택한다.


추가를 선택


서비스 이름은 반드시 DB 이름을 입력한다. 


기본 tcp로 되어 있는데 다음



자신 접속할  DB 서버 아이피를 입력한다.



테스트 수행 선택, 테스트를 바라지 않으면 다음 클릭



이 에러는 리스너가 꺼져있을 때 나는 에러화면

오라클 서버에서 lsnrctl start 해 주고 테스트 해볼 것 



tns 리스너가 DB가 뭔지 찾지 못할 때 생기는 오류 

리스너를 올렸을 때 서비스 네임이 있어야 한다. 

기본 설정시 서비스 네임을 주지 않으면 적용시 문제가 생길수도 있다.

들여쓰기 잘하기, 파일을 인식못할 수도 있음




로그인 변경을 해서 scott/tiger로 접속을 시도해본다. 

아래와 같이 정상접속이 되면 테스트를 성공했다는 화면을 볼 수 있다. 




3. 설치경로로 들어가서 tnsnames.ora 파일을 수정해준다.


나의 경우 설치경로 : D:\app\stu\product\11.2.0\client_1\network\admin 


만약 파일이 없다면 sample 폴더 안에 들어가서 복사해서 안에 내용을 지운다음 아래와 같이 입력해준다.  


TESTDB =

( DESCRIPTION =

( ADDRESS_LIST =

( ADDRESS = ( PROTOCOL = TCP ) ( HOST = 192.168.64.145 ) ( PORT = 1521 ) )

)

( CONNECT_DATA = 

( SERVICE_NAME = testdb )

)


각 보라색 글씨의 의미

- TESTDB : 네트 서비스 이름

- 접속할 아이피와 포트번호

- SID이름


4 client의 cmd 창에서 서버로 접속을 시도하면 성공적으로 접속이 된다. 


C:\Users\stu>sqlplus scott/tiger@testdb


SQL*Plus: Release 11.2.0.1.0 Production on 화 10월 28 16:55:38 2014


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



다음에 접속됨:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production

With the Partitioning option


SQL>




'DB > oralce' 카테고리의 다른 글

[실습] parameter file 삭제 후 재생성하기  (0) 2014.10.29
컨트롤 파일 다중화시 ora-00205 에러  (0) 2014.10.29
dbms_job / dbms_scheduler  (0) 2014.10.27
사용자관리  (0) 2014.10.27
control file 다중화 실습  (0) 2014.10.26
Posted by 성장하는yw
2014. 10. 27. 16:35

1. os 의 예약 작업 기능

리눅스, 유닉스 - shell scripts - cron 작업

cron 에 기록해 있는데로 일정시간에 사용자가 지정한 작업들을 스스로 처리해줌 


2. 오라클 내에 cron 에 해당하는 기능임 

    DBMS_JOB/DBMS_SCHEDULER


3 DBMS_JOB 

새로운 JOB 등록 테스트 하기


실습

새로운 job을 등록하는 테스트

job_test01 테이블 생성 후 1분에 1번씩 해당테이블에 데이터 insert 함 


테스트용 테이블과 시퀀스, 프로시저를 생성함

SCOTT>create sequence seq_job_seq1;


Sequence created.



SCOTT>create table job_test01

  2  (no number,

  3  name varchar2(5));


Table created.


SCOTT>ed

Wrote file afiedt.buf

create or replace procedure insert_job_test01

 is

  begin

   insert into scott.job_test01

   values(seq_job_seq1.nextval, dbms_random.string('a',3));

end;

/


Procedure created.

job을 등록할 프로시저를 생성
SCOTT>!vi job1.sql
begin
 dbms_job.submit(:jno,
 'scott.insert_job_test01;',
 sysdate,
 'sysdate + 1/24/60',
 false);
 end;
/

Procedure created.


job을 등록함

SCOTT>variable jno number

SCOTT>@job1.sql

PL/SQL procedure successfully completed.

번호는 랜덤으로 들어가는 것임
SCOTT>print jno;

       JNO
----------
         3

commit 이 시간부터 job이 수행됨, commit 가 안되면 수행되지 않음
SCOTT>commit;

Commit complete.

수행되고 있는 job 내역을 확인함
SCOTT>set line 200

SCOTT>col what for a50
SCOTT>select what, job, next_date, next_sec, failures, broken
  2  from user_jobs
  3  where what='scott.insert_job_test01;';

WHAT                                                      JOB NEXT_DATE    NEXT_SEC           FAILURES B
-------------------------------------------------- ---------- ------------ ---------------- ---------- -
scott.insert_job_test01;                                    3 23-OCT-14    18:54:30                  0 N

실제 데이터가 입력되는지 확인함

SCOTT>select * from job_test01;

        NO NAME
---------- -----
         1 xJa
         2 gMu
         3 ucr
         4 Rhw

등록되어 있는 job 삭제하기
SCOTT>exec dbms_job.remove(3);

PL/SQL procedure successfully completed.

삭제되고 없는 것을 확인할 수 있음
SCOTT>select what, job, next_date, next_sec, failures, broken
  2  from user_jobs
  3  where job=3;

no rows selected

등록되어 있는 job 수정하기
이 테스트를 위해 job을 한 번 더 등록함

SCOTT>variable jno number;

SCOTT>@job1.sql

PL/SQL procedure successfully completed.

SCOTT>print jno;

       JNO
----------
         4
SCOTT>commit;

Commit complete.
SCOTT>select what, job, next_date, next_sec, interval
  2  from user_jobs
  3  where job=4;

WHAT                                                      JOB NEXT_DATE    NEXT_SEC
-------------------------------------------------- ---------- ------------ ----------------
INTERVAL
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
scott.insert_job_test01;                                    4 23-OCT-14    19:01:31
sysdate + 1/24/60

수행시간을 1분마다에서 5분 마다로 변경
SCOTT>exec dbms_job.change(:jno,'scott.insert_job_test01;',sysdate,'sysdate + 5/24/60');

PL/SQL procedure successfully completed.

SCOTT>set line 200

SCOTT>col interval for a30
SCOTT>select what, job, next_date, next_sec, interval
  2  from user_jobs
  3  where job=4;

WHAT                                                      JOB NEXT_DATE    NEXT_SEC         INTERVAL
-------------------------------------------------- ---------- ------------ ---------------- ------------------------------
scott.insert_job_test01;                                    4 23-OCT-14    19:02:56         sysdate + 5/24/60


DBMS_SCHEDULER


DBMS_JOB과의 차이점 : 외부스크립트도 실행할 수 있음

                                   단, 이 기능은 10g 이상일 때만 사용 가능


사용

정해진 시간에 튜닝에 필요한 필요한 테이블, 인텍스, 클러스터 등의 각종 통계값을 계산해서 저장

정해진 시간에 백업 수행

Mview나 standby 서버, 원본과의 동기화 작업 등...

주기적으로 반복되어야 하는 작업을 자동화시켜서 작업을 할 때 사용함


특징

-

-

-

-

-


4 DBMS_SCHEDULER 

새로운 JOB 등록 테스트 하기


실습

새로운 job을 등록하는 테스트

job_test1 이라는 테이블에 3초에 1회씩 데이터를 insert 하는 작업

작업을 위해서 create any job의 권한이 있어야 함 

scott 계정에 먼저 이 권한을 주고 실행함


SCOTT>conn / as sysdba

Connected.

SYS>grant create any job to scott;


Grant succeeded.

SYS>conn scott/tiger
Connected.
SCOTT>create table job_test1
  2  (no number,
  3  name varchar2(5),
  4  rdate date default sysdate);

Table created.

SCOTT>create sequence seq_job_test1_no;

Sequence created.

  1  create or replace procedure insert_job_test
  2  is
  3  begin
  4   insert into scott.job_test1(no, name)
  5   values(seq_job_test1_no.nextval, dbms_random.string('a',2));
  6  commit;
  7* end;
SCOTT>/

Procedure created.


'DB > oralce' 카테고리의 다른 글

컨트롤 파일 다중화시 ora-00205 에러  (0) 2014.10.29
oracle client 윈도우 설정  (0) 2014.10.28
사용자관리  (0) 2014.10.27
control file 다중화 실습  (0) 2014.10.26
oracle의 시작단계  (0) 2014.10.26
Posted by 성장하는yw
2014. 10. 27. 16:18

1 사용자 생성하기


[oracle@localhost ~]$ sqlplus / as sysdba


SQL*Plus: Release 11.2.0.2.0 Production on Thu Oct 23 13:48:59 2014


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



Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production

With the Partitioning option


SYS>set line 200


SYS>col tablespace_name for a10

SYS>col file_name for a50

SYS>select tablespace_name, bytes/1024/1024 MB, file_name

  2  from dba_data_files;


TABLESPACE         MB FILE_NAME

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

EXAMPLE       345.625 /home/oracle/disk4/example01.dbf

USERS               5 /home/oracle/disk5/users01.dbf

UNDOTBS1          310 /home/oracle/disk5/undo01.dbf

SYSAUX            510 /home/oracle/disk4/sysaux01.dbf

SYSTEM            710 /home/oracle/disk4/system01.dbf

HAKSA                 /app/oracle/product/11g/dbs/MISSING00006

HAKSA                 /app/oracle/product/11g/dbs/MISSING00007


7 rows selected.


SYS>SYS>create tablespace ts_webhard

  2  datafile '/app/oracle/oradata/testdb/ts_web01.dbf' size 100M;


Tablespace created.


SYS>create tablespace ts_web_idx

  2  datafile '/app/oracle/oradata/testdb/ts_web_idx01.dbf' size 100M;


Tablespace created.



SYS>select tablespace_name, bytes/1024/1024 MB, file_name
  2  from dba_data_files;

TABLESPACE         MB FILE_NAME
---------- ---------- --------------------------------------------------
EXAMPLE       345.625 /home/oracle/disk4/example01.dbf
USERS               5 /home/oracle/disk5/users01.dbf
UNDOTBS1          310 /home/oracle/disk5/undo01.dbf
SYSAUX            510 /home/oracle/disk4/sysaux01.dbf
SYSTEM            710 /home/oracle/disk4/system01.dbf
HAKSA                 /app/oracle/product/11g/dbs/MISSING00006
HAKSA                 /app/oracle/product/11g/dbs/MISSING00007
TS_WEBHARD        100 /app/oracle/oradata/testdb/ts_web01.dbf
TS_WEB_IDX        100 /app/oracle/oradata/testdb/ts_web_idx01.dbf

9 rows selected.


SYS>create temporary tablespace temp_web
  2  tempfile '/app/oracle/oradata/testdb/temp_web01.dbf' size 100M;

Tablespace created.


SYS>  1  create user webuser
  2  identified by webpwd
  3  default tablespace ts_webhard
  4  temporary tablespace temp_web
  5  quota unlimited on ts_webhard
  6 quota 0m on system

User created.

SYS>grant resource, connect to webuser;

Grant succeeded.

SYS>conn webuser/webpwd;
Connected.

WEBUSER>


2 사용자 정보 확인하기

default tablespace 와 temporary tablespace 정보 확인하기

SYS>set line 200

SYS>col default_tablespace for a10

SYS>col temporary_tablespace for a10

SYS>select username, default_tablespace "Defautlt TS", temporary_tablespace "Temp TS"

  2  from dba_users

  3  where username='WEBUSER';


USERNAME                       Defautlt TS                    Temp TS

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

WEBUSER                        TS_WEBHARD                     TEMP_WEB


3 password 관련 profile 생성하기


조건

로그인 시도 5회 실패시 계정을 5일 동안 사용 못하게 할 것

계정의 암호는 10일에 한 번씩 변경하게 할 것

동일한 암호는 10일 동안 사용 못하게 할 것


SYS>create profile sample_prof limit

  2  failed_login_attempts 5

  3  password_lock_time 5

  4  password_life_time 10

  5  password_reuse_time 10;


Profile created.


4 resource 관련 profile 만들기 


조건

1명당 연속적으로  cpu를 사용할 수 있는 시간을 10초로 제한할 것

하루 중 8시간만 db에 접속 가능하게 할 것

10분 동안 사용하지 않으면 강제로 접속을 끊을 것


profile을 9i 이상 버전에서 즉시 적용시키기 위해서 입력하는 명령어

SYS>alter system set resource_limit=true;


System altered.


SYS>create profile re_sample_prof limit
  2  cpu_per_session 1000
  3  connect_time 480
  4  idle_time 10;

Profile created.

사용자에게   profile 할당하기
2,4번에서 만든 profile을 webhard에게 설정함

SYS>set pages 50

현재 모든 사용자가 적용받고 있는 profile 확인하기
SYS>select username "사용자명", profile "적용프로파일"
  2  from dba_users
  3  where username='WEBUSER';

사용자명                     적용프로파일
------------------------------ ------------------------------
WEBUSER                        DEFAULT

해당 profile에 어떤 내용이 있는지 확인하기

SYS>select * from dba_profiles
  2  where profile='SAMPLE_PROF';

PROFILE       RESOURCE_NAME                  RESOURCE LIMIT
------------- ------------------------------ -------- ----------
SAMPLE_PROF   COMPOSITE_LIMIT                KERNEL   DEFAULT
SAMPLE_PROF   SESSIONS_PER_USER              KERNEL   DEFAULT
SAMPLE_PROF   CPU_PER_SESSION                KERNEL   DEFAULT
SAMPLE_PROF   CPU_PER_CALL                   KERNEL   DEFAULT
SAMPLE_PROF   LOGICAL_READS_PER_SESSION      KERNEL   DEFAULT
SAMPLE_PROF   LOGICAL_READS_PER_CALL         KERNEL   DEFAULT
SAMPLE_PROF   IDLE_TIME                      KERNEL   DEFAULT
SAMPLE_PROF   CONNECT_TIME                   KERNEL   DEFAULT
SAMPLE_PROF   PRIVATE_SGA                    KERNEL   DEFAULT
SAMPLE_PROF   FAILED_LOGIN_ATTEMPTS          PASSWORD 5
SAMPLE_PROF   PASSWORD_LIFE_TIME             PASSWORD 10
SAMPLE_PROF   PASSWORD_REUSE_TIME            PASSWORD 10
SAMPLE_PROF   PASSWORD_REUSE_MAX             PASSWORD DEFAULT
SAMPLE_PROF   PASSWORD_VERIFY_FUNCTION       PASSWORD DEFAULT
SAMPLE_PROF   PASSWORD_LOCK_TIME             PASSWORD 5
SAMPLE_PROF   PASSWORD_GRACE_TIME            PASSWORD DEFAULT

16 rows selected.

SYS>col profile for a16
SYS>select * from dba_profiles
  2  where profile='RE_SAMPLE_PROF';

PROFILE          RESOURCE_NAME                  RESOURCE LIMIT
---------------- ------------------------------ -------- ----------
RE_SAMPLE_PROF   COMPOSITE_LIMIT                KERNEL   DEFAULT
RE_SAMPLE_PROF   SESSIONS_PER_USER              KERNEL   DEFAULT
RE_SAMPLE_PROF   CPU_PER_SESSION                KERNEL   1000
RE_SAMPLE_PROF   CPU_PER_CALL                   KERNEL   DEFAULT
RE_SAMPLE_PROF   LOGICAL_READS_PER_SESSION      KERNEL   DEFAULT
RE_SAMPLE_PROF   LOGICAL_READS_PER_CALL         KERNEL   DEFAULT
RE_SAMPLE_PROF   IDLE_TIME                      KERNEL   10
RE_SAMPLE_PROF   CONNECT_TIME                   KERNEL   480
RE_SAMPLE_PROF   PRIVATE_SGA                    KERNEL   DEFAULT
RE_SAMPLE_PROF   FAILED_LOGIN_ATTEMPTS          PASSWORD DEFAULT
RE_SAMPLE_PROF   PASSWORD_LIFE_TIME             PASSWORD DEFAULT
RE_SAMPLE_PROF   PASSWORD_REUSE_TIME            PASSWORD DEFAULT
RE_SAMPLE_PROF   PASSWORD_REUSE_MAX             PASSWORD DEFAULT
RE_SAMPLE_PROF   PASSWORD_VERIFY_FUNCTION       PASSWORD DEFAULT
RE_SAMPLE_PROF   PASSWORD_LOCK_TIME             PASSWORD DEFAULT
RE_SAMPLE_PROF   PASSWORD_GRACE_TIME            PASSWORD DEFAULT

16 rows selected.

사용자에게 profile 적용시키고 확인하기
SYS>alter user webuser profile sample_prof;

User altered.


SYS>select username, profile
  2  from dba_users
  3  where username='WEBUSER';

USERNAME                       PROFILE
------------------------------ ----------------
WEBUSER                        SAMPLE_PROF


SYS>alter user webuser profile re_sample_prof;

User altered.

SYS>select username, profile
  2  from dba_users
  3  where username='WEBUSER';

USERNAME                       PROFILE
------------------------------ ----------------
WEBUSER                        RE_SAMPLE_PROF

여러 개의 프로파일을 적용시킬 수 없으므로, 
프로파일을 만들 때 원하는 파라미터를 모두 넣고 한꺼번에 만든 후 적용을 시켜야 한다. 

사용 안하는 profile 삭제하기 
SYS>drop profile re_sample_prof;
drop profile re_sample_prof
*
ERROR at line 1:
ORA-02382: profile RE_SAMPLE_PROF has users assigned, cannot drop without CASCADE

* 현재 사용자에게 할당되어 있는 profile 은 기본적으로 삭제가 안됨
cascade 옵션을 사용하면 할당되어 있더라도 삭제 가능
삭제가 되면 해당 프로파일을 사용하던 사용자는 default profile을 사용하게 됨

SYS>drop profile re_sample_prof cascade;

Profile dropped.

SYS>select username, profile
  2  from dba_users
  3  where username='WEBUSER';

USERNAME                       PROFILE
------------------------------ ----------------
WEBUSER                        DEFAULT


권한 관리하기 


-system 관련 주요 권한


- sysoper / sysdba 권한


-  system 관련 권한 할당하기 / 해제하기

scott 사용자에게 create table, create session 권한을 할당

SYS>grant create table, create session to scott;


Grant succeeded.


scott 사용자에게 create table 권한 해제

SYS>revoke create table from scott;

Revoke succeeded.


- 사용자가 가지고 있는 권한 조회

SYS>select * from dba_sys_privs

  2  where grantee='SCOTT';


GRANTEE                        PRIVILEGE                                ADM

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

SCOTT                          UNLIMITED TABLESPACE                 NO

SCOTT                          CREATE SESSION                           NO


-object 관련 권한(privilege)

주로 dml과 연관 많음 : object 를 select, insert, update, delete 등을 할 수 있는 권한을 말함


-object 권한 할당 / 해제하기

scott 사용자에게 webuser가 만든 webuser 테이블을  select 할 수 있도록 하기

WEBUSER>create table webtest

  2  ( no number,

  3  name varchar2(10));


Table created.


WEBUSER>insert into webtest values(1, 'sss');


1 row created.


WEBUSER>select * from webtest;


        NO NAME

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

         1 sss



SCOTT>select * from webuser.webtest;

select * from webuser.webtest

                      *

ERROR at line 1:

ORA-00942: table or view does not exist



SYS>grant select on webuser.webtest to scott;

Grant succeeded.

SYS>conn scott;
Enter password:
Connected.
SCOTT>select * from webuser.webtest;

        NO NAME
---------- ----------
         1 sss

scott 사용자에게 webuser가 만든 webtest 테이블을 update 할 수 있도록 하기
또 scott 사용가가 이 권한을 다른 사람에게 줄 수 있는 권한도 주기

SCOTT>update webuser.webtest
  2  set no=101
  3  where name='sss';
update webuser.webtest
               *
ERROR at line 1:
ORA-01031: insufficient privileges

SCOTT>conn / as sysdba
Connected.
SYS>grant update on webuser.webtest to scott with grant option;

Grant succeeded.

SYS>conn scott/tiger

SCOTT>update webuser.webtest
  2  set no=101
  3  where name='sss';

1 row updated.

SCOTT>select * from webuser.webtest;

        NO NAME
---------- ----------
       101 sss


scott 사용자가 가지고 있는 webuser의 webtest 테이블을 select 하는 권한을 해제

SCOTT>conn / as sysdba
Connected.
SYS>revoke select on webuser.webtest from scott;

Revoke succeeded.

SYS>conn scott/tiger
Connected.
SCOTT>select * from webuser.webtest;
select * from webuser.webtest
                      *
ERROR at line 1:
ORA-01031: insufficient privileges

scott 계정이 hr 계정에게 업데이트 권한만 부여함
SCOTT>grant update on webuser.webtest to hr with grant option;

Grant succeeded.

hr 계정이 언락 되어 있다면 아래와 같은 작업은 넘어가도 됨
SCOTT>conn / as sysdba
Connected.

SYS>alter user hr identified by hr account unlock;

User altered.

SYS>conn hr/hr
Connected.

webuser의 webtest 테이블을 조회할 수 있는 권한을 hr은 가지고 있지 않으므로 권한 에러 뜸
HR>select * from webuser.webtest;
select * from webuser.webtest
                      *
ERROR at line 1:
ORA-01031: insufficient privileges

업데이트 권한을 scott에게서 부여 받았기 때문에 업데이트는 정상적으로 됨
HR>update webuser.webtest
  2  set no=3
  3  where name='sss';

1 row updated.

HR>conn scott/tiger
Connected.
SCOTT>select * from webuser.webtest;
select * from webuser.webtest
                      *
ERROR at line 1:
ORA-01031: insufficient privileges

with grant option의 옵션은 DBA가 scott 계정의 권한을 해지하면 scott가 권한을 주었던 hr의 계정도 해지된다. 

WEBUSER>conn / as sysdba
Connected.
SYS>revoke update on webuser.webtest from scott;

Revoke succeeded.

SYS>conn scott/tiger
Connected.
SCOTT>update webuser.webtest
  2  set no=5
  3  where name='sss';
update webuser.webtest
               *
ERROR at line 1:
ORA-00942: table or view does not exist


SCOTT>conn hr/hr
Connected.
HR>update webuser.webtest
  2  set no=5
  3  where name='sss';
update webuser.webtest
               *
ERROR at line 1:
ORA-00942: table or view does not exist


role 관리하기 

role: 권한의 그룹


role 생성하기

SYS>create role trole;

Role created.


role에 create session, create table 권한 할당하기

SYS>grant create session, create table to trole;

Grant succeeded.


scott 사용자에게 trole 할당하기

SYS>grant trole to scott;

Grant succeeded.


어떤 사용자가 어떤 role를 사용하는지 확인하기

SYS>SELECT * FROM dba_sys_privs

  2  WHERE grantee='SCOTT';


GRANTEE                        PRIVILEGE                                ADM

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

SCOTT                          UNLIMITED TABLESPACE                     NO

SCOTT                          CREATE SESSION                           NO


어떤 role에 어떤 권한이 있는지 확인하기
SYS>select * from dba_sys_privs
  2  where grantee='CONNECT';

GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
CONNECT                        CREATE SESSION                           NO

SYS>select * from dba_sys_privs
  2  where grantee='RESOURCE';

GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
RESOURCE                       CREATE TRIGGER                           NO
RESOURCE                       CREATE SEQUENCE                          NO
RESOURCE                       CREATE TYPE                              NO
RESOURCE                       CREATE PROCEDURE                         NO
RESOURCE                       CREATE CLUSTER                           NO
RESOURCE                       CREATE OPERATOR                          NO
RESOURCE                       CREATE INDEXTYPE                         NO
RESOURCE                       CREATE TABLE                             NO

8 rows selected.


'DB > oralce' 카테고리의 다른 글

oracle client 윈도우 설정  (0) 2014.10.28
dbms_job / dbms_scheduler  (0) 2014.10.27
control file 다중화 실습  (0) 2014.10.26
oracle의 시작단계  (0) 2014.10.26
3 oracle background processes  (0) 2014.10.24
Posted by 성장하는yw
2014. 10. 26. 22:01

1 컨트롤 파일 / 다중화 의미

- control file :  오라클 서버를 운영하는데 필수적인 정보들이 저장되어 있음

                       instance가 mount 이상의 상태일 때부터 실시간으로 control file의 내용이 변경, 조회됨

                       이 파일이 깨지면 DB가 망가짐

                       파일삭제 등 문제가 생기더라도 복구 할 수 있도록 복사본을 만들어 분산시켜 저장함 (multiplexing 다중화)


2. 작동 순서와 다중화 하는 방법

- 작동순서

startup - parameter file 읽어서 control file의 위치 확인 - control file을 메모리로 불러와 내용 확인 


- 다중화하는 방법 

parameter file에 control file의 위치를 기록한 후 그 경로에  control file을 복사하면 다중화가 됨 


* spfile 일 경우 다중화하는 방법


- 실습예제 

현재 운영중인 control file의 경로 확인 후

/home/oracle/disk1/control01.ctl

/home/oracle/disk2/control02.ctl

/home/oracle/disk3/controlo03.ctl 로 다중화(복사)


- 하는 순서

1. DB 상태 확인

2. 현재 운영중인 control file의 경로 확인

3. spfile경로 변경

4. instance 종료

5. 대상 디렉토리 생성 및 컨트롤 파일을 spfile 수정한 경로로 생성

6. instance  open -> startup


간략히 

spfile의 내용 변경 -> instance 종료 -> control file 복사 -> instance open


- 과정

현재 db 상태 확인

SYS>select status from v$instance;


STATUS

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

OPEN


spfile 인지 pfile 인지 확인

SYS>show parameter spfile;


NAME     TYPE VALUE

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

spfile     string /app/oracle/product/11g/dbs/sp

filetestdb.ora


한 화면에 보기 위해서 칼럼 크기 조정
SYS>col name for a70

control file의 현재경로 조회
SYS>select name from v$controlfile;

NAME
----------------------------------------------------------------------
/app/oracle/oradata/testdb/control01.ctl
/home/oracle/fast_recovery_area/testdb/control02.ctl

spfile안에 기록 되어있는 control file의 경로 변경
SYS>alter system set control_files='/home/oracle/disk1/control01.ctl',
  2  '/home/oracle/disk2/control02.ctl',
  3  '/home/oracle/disk3/control03.ctl' scope=spfile;

System altered.

db instance 종료
SYS>shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

sqlplus을 종료하지 않고 터미널창(리눅스커맨드창)으로 이동
SYS>!
[oracle@localhost ~]$ cd /home/oracle
디렉토리 생성
[oracle@localhost ~]$ mkdir disk1 disk2 disk3



spfile 변경 경로에 컨트롤 파일을 복사해 옴
[oracle@localhost ~]$ cp /app/oracle/oradata/testdb/control01.ctl /home/oracle/disk1/control01.ctl
[oracle@localhost ~]$ cp /app/oracle/oradata/testdb/control01.ctl /home/oracle/disk2/control02.ctl
[oracle@localhost ~]$ cp /app/oracle/oradata/testdb/control01.ctl /home/oracle/disk3/control03.ctl

*컨트롤 파일은 여러 곳에 분산이 되어도 내용은 모두 동일해야함
그래서 아래 처럼 control01을 3곳으로 이름을 바꾸어서 복사를 해도 아무런 문제가 없음

리눅스 명령창에서 나와서 sqlplus로 이동
[oracle@localhost ~]$ exit
exit

db instance 시작
SYS>startup
ORACLE instance started.

Total System Global Area  422670336 bytes
Fixed Size    1344616 bytes
Variable Size  322964376 bytes
Database Buffers   92274688 bytes
Redo Buffers    6086656 bytes
Database mounted.
Database opened.

변경된 컨트롤 파일 경로 확인
SYS>select name from v$controlfile;

NAME
----------------------------------------------------------------------
/home/oracle/disk1/control01.ctl
/home/oracle/disk2/control02.ctl
/home/oracle/disk3/control03.ctl



* pfile 일 경우 다중화하는 방법


현재 spfile을 사용하는 상태 -> pfile 생성 -> spfile 삭제 -> instance 재시작 후 다중화 작업을 함

조회한 컨트롤 파일 위치를 아래 경로로 다중화

/home/oracle/disk4/control01.ctl

/home/oracle/disk5/control01.ctl

/home/oracle/disk6/control01.ctl


SYS>!ls $ORACLE_HOME/dbs

hc_DBUA0.dat  hc_testdb.dat  init.ora  lkTESTDB  orapwtestdb  spfiletestdb.ora


SYS>create pfile from spfile;


File created.


SYS>!rm -f $ORACLE_HOME/dbs/spfiletestdb.ora


SYS>!ls $ORACLE_HOME/dbs

hc_DBUA0.dat  hc_testdb.dat  init.ora  inittestdb.ora  lkTESTDB  orapwtestdb


SYS>shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SYS>startup

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size    1344616 bytes

Variable Size  322964376 bytes

Database Buffers   92274688 bytes

Redo Buffers    6086656 bytes

Database mounted.

Database opened.


pfil 확인, 아래 조회내용에서 value 부분에 아무것도 나오지 않으면 pfile

SYS>show parameter pfile;


NAME     TYPE VALUE

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

spfile     string


SYS>select name from v$controlfile;


NAME

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

/home/oracle/disk1/control01.ctl

/home/oracle/disk2/control02.ctl

/home/oracle/disk3/control03.ctl


SYS>shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.


SYS>!vi $ORACLE_HOME/dbs/inittestdb.ora

testdb.__db_cache_size=92274688

testdb.__java_pool_size=4194304

testdb.__large_pool_size=4194304

testdb.__oracle_base='/app/oracle'#ORACLE_BASE set from environment

testdb.__pga_aggregate_target=155189248

testdb.__sga_target=268435456

testdb.__shared_io_pool_size=0

testdb.__shared_pool_size=159383552

testdb.__streams_pool_size=0

*.audit_file_dest='/app/oracle/admin/testdb/adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'


주석처리 한 부분을 파란색 글씨처럼 원하는 경로로 수정해줌

#*.control_files='/home/oracle/disk1/control01.ctl','/home/oracle/disk2/control02.ctl','/home/oracle/disk3/control03.ctl'

*.control_files='/home/oracle/disk4/control01.ctl','/home/oracle/disk5/control02.ctl','/home/oracle/disk6/control03.ctl'


*.db_block_size=8192

*.db_domain=''

*.db_name='testdb'

*.db_recovery_file_dest='/home/oracle/fast_recovery_area'

*.db_recovery_file_dest_size=4196401152

*.diagnostic_dest='/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=testdbXDB)'

*.log_archive_format='%t_%s_%r.dbf'

*.memory_target=422576128

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

"/app/oracle/product/11g/dbs/inittestdb.ora" 26L, 950C


:wq!


SYS>!

[oracle@localhost ~]$ cd /home/oracle

[oracle@localhost ~]$ mkdir disk4 disk5 disk6

[oracle@localhost ~]$ cp /home/oracle/disk1/control01.ctl /home/oracle/disk4/control01.ctl

[oracle@localhost ~]$ cp /home/oracle/disk1/control01.ctl /home/oracle/disk5/control02.ctl

[oracle@localhost ~]$ cp /home/oracle/disk1/control01.ctl /home/oracle/disk6/control03.ctl

[oracle@localhost ~]$ exit

exit


SYS>startup

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size    1344616 bytes

Variable Size  322964376 bytes

Database Buffers   92274688 bytes

Redo Buffers    6086656 bytes

Database mounted.

Database opened.

SYS>select name from v$controlfile;


NAME

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

/home/oracle/disk4/control01.ctl

/home/oracle/disk5/control02.ctl

/home/oracle/disk6/control03.ctl



pfile을 사용, 컨트롤파일을 다중화 하는 경우는 복사하고 경로를 수정해줘도 전혀 문제가 없지만

spfile일 때, 나머지 과정들은 꼭 순서대로 해야만 한다. 

장애 생김


컨트롤 파일에 변경되는 정보가 실시간으로 저장 되기 때문에 가장 최근에 사용한 것만 진짜 컨트롤 파일이고 

나머지 컨트롤 파일은 예전파일로 변한다. 

이동이나 복사를 할 때, 가장 최근에 사용했던것만 사용해야 한다.

'DB > oralce' 카테고리의 다른 글

dbms_job / dbms_scheduler  (0) 2014.10.27
사용자관리  (0) 2014.10.27
oracle의 시작단계  (0) 2014.10.26
3 oracle background processes  (0) 2014.10.24
9 메모리 관리 기법  (0) 2014.10.24
Posted by 성장하는yw
2014. 10. 26. 20:56

1. 오라클의 시작단계





* 사용 중인 파일은 절대로 이동 및 복사를 하면 안된다.(DB깨짐)

   단, parameter file 중에 pfile은 예외


* 어떤 작업을 하느냐에 따라 시작되는 단계가 다르다.

   원하는 단계까지만 실행 후 db open을 하려면 alter database 라는 명령어를 사용.

   반드시 startup-nomount-mount-open 단계를 순서대로 거쳐야 함

   예) nomount->open 할 때, mount를 건너뛰고 바로 open 상태로 갈 수 없음


실습1

nomount 단계까지만 시작한 후 나머지 단계 진행하기


SYS>startup nomount;

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size                  1344616 bytes

Variable Size             322964376 bytes

Database Buffers           92274688 bytes

Redo Buffers                6086656 bytes

SYS>alter database mount;


Database altered.


SYS>alter database open;


Database altered.


실습2

mount 단계까지만 시작한 후 나머지 단계 진행하기


SYS>startup mount;
ORACLE instance started.

Total System Global Area  422670336 bytes
Fixed Size                  1344616 bytes
Variable Size             322964376 bytes
Database Buffers           92274688 bytes
Redo Buffers                6086656 bytes
aDatabase mounted.
SYS>lter database open;

Database altered.

실습3

읽기 전용인 상태로 open 하기


select 작업만 가능한 상태로 open : 감사 작업과 같이 데이터 변경이 안되고 조회만 가능한 상태임


read only 모드로 open 후에 다시 데이터 변경이 가능하도록 하려면 instance 종료 후 다시 시작하면 됨 


SYS>startup mount;

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size                  1344616 bytes

Variable Size             322964376 bytes

Database Buffers           92274688 bytes

Redo Buffers                6086656 bytes

Database mounted.

SYS>alter database open read only;


Database altered.


실습4
제한된 모드(restricted mode)로 open 하기

허락받은 계정(grant 명령어를 사용)만 데이터의 생성이나 수정이 가능한 상태
제품 유지관리 작업시에 주로 사용

DB가 꺼져있을 때 이 모드로 들어가는 방법은 아래와 같음

SYS>startup restrict;
ORACLE instance started.

Total System Global Area  422670336 bytes
Fixed Size                  1344616 bytes
Variable Size             322964376 bytes
Database Buffers           92274688 bytes
Redo Buffers                6086656 bytes
Database mounted.
Database opened.

DB가 open상태 일 때 제한된 모드(restricted mode)로 변경하기


SYS>select status from v$instance;    db 현재 상태 조회


STATUS

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

OPEN


SYS>alter system enable restricted session;    제한된 모드 사용


System altered.


SYS>alter system disable restricted session;    제한된 모드 사용안 함


System altered.


제한된 모드로 open된 instance에 접속하려면 restricted session 라는 권한을 가지고 있어야만 함


 

'DB > oralce' 카테고리의 다른 글

사용자관리  (0) 2014.10.27
control file 다중화 실습  (0) 2014.10.26
3 oracle background processes  (0) 2014.10.24
9 메모리 관리 기법  (0) 2014.10.24
6 redo log 관리하기  (0) 2014.10.21
Posted by 성장하는yw