오라클 관리자 계정

오라클 데이터베이스를 관리할 수 있는 사용자는 DBA 권한을 가지고 있어야 한다.
기본적으로 오라클은 시스템 관리를 위한 SYSTEM 및 SYS 사용자 계정을 가지고 있으며
오라클ㅇ 데이터베이스 관리자는 이들 계정을 이용하여 데이터베이스에 접속한 뒤에
관리 업무를 수행할 수 있다. 하지만 SYSTEM 및 SYS 사용자가 아니라 할지라도
DBA 권한을 부여 받은 사용자라면 오라클 데이터베이스 시스템을 관리할 수 있는
권한이 주어진다.

SYS와 SYSTEM 사용자의 특징

SYS
1. 데이터사전뷰의 오너.
2. SYS 스키마에는 어떠한 테이블도 생성할 수 없다.
3. 시스템 객체를 변경 삭제 불가.

SYSTEM
1. 실질적인 오라클 시스템 관리를 위해 사용
2. dba권한을 기본적으로 가지고 있다.
3. 관리 목적을 가진 테이블을 생성, 수정, 삭제 할 수 있다.

'먹고살기 > Oracle' 카테고리의 다른 글

Oracle 데이터 삽입,삭제,변경  (0) 2011.04.05
오라클 알아둬야할것  (0) 2011.04.05
REDO LOG FILE에 대해서  (0) 2011.04.05
오라클 강좌  (0) 2011.04.05
ORACLE DATE (날짜 다루기)  (0) 2011.04.05

1.Using Online Redo Log Files

데이타의 모든 변경사항이 기록된다.
복구 메카니즘이다.
그룹으로 관리 되어진다.
적어도 2개이상의 그룹이 필요하다.

*NOLOGGING (막바로 복구작업을 시행하지만 실패하면 데이타가 날라간다.)

2.Structre of Online Redo Log FIle

Online Redo Log File Groups

- Redo Log file은 그룹으로 관리 되어 진다.
- logwrite(LGWR)은 Redo log File과 같은 정보를 가지고 있다.
- 오라클 서버는 최소 2개 이상의 Redo log file 그룹을 가지고 있다.

Online Redo log file Members

- redo log file 그룹 안에 있는 개체가 맴버이다.
- 각 맴버는 식별시퀀스 번호를 가지고, 이정보는 컨트롤 파일에 저장되어 지고

데이타 파일의 헤드 부분에 저장된다.

3. How Online Redo Log Files Work

온라인 REDO 로그 파일은 로그가 꽉 차게 되면 다음 로그로 이동하게 된다.

이것을 LOG SWITCHES라고 하며, 이렇게 넘어가면 로그시퀀스와 그룹번호도 새로 부여되며

체크포인터도 지정되게 된다.

- 로그스위치로 불리운다.
- 컨트롤파일에 정보가 저장된다.
- 체크포인트도 자동으로 생성된다.

* 복구된 시간 정보를 가지고 있는 파라메탈

Fast_start_mttr_targer (show parametal fast_start_mttr_target) 으로 확인 가능하다.

mttr-장애가 발생하고 복구된 시간

* alter tablespace [offline nomal|read only|begin backup]으로

체크포인터가 지정된다.


4. Forcing Log Switches and Checkpoints

로그스위치를 실행

alter system switch logfile;

로그 그룹에 있는 내용이 강제로 다음 그룹으로 넘어감

Fast_start_mttr_target =600

복구된 시간을 지정하고 넘어가는 경우에 checkpoint를 발생시키는 명령어. 위의 예에서는 600

alter system checkpoint

수동으로 checkpoint 발생

- 강제적으로 체크포인터를 발생시킬 때..

fast_start_io_target : 복구할 때까지 읽는 블럭의 수
log_checkpoint_timeout : 체크포인터가 발생하는 시간


5. Adding Online Redo Log file Groups

Alter database add logfile group 3
('d:\oracle\oradata\dba20\log3a.rdo', d:\oracle\oradata\dba21\log3a.rdo)
SIZE 1M;

Redo log 파일의 그룹 3을 추가할 때...

그룹을 추가할 때는 반드시 파일도 같이 추가해줘야 함.

6. Adding Online Redo Log File Members

Alter Database Add Logfile Member

'd:\oracle/oradata/u01/log1c.rdo' to group 1,
'd:\oracle/oradata/u01/log2c.rdo' to group 2,
'd:\oracle/oradata/u01/log3c.rdo' to group 3;

맴버 파일을 추가할 때...

7. Dropping Online Redo Log File Groups

Alter database drop logfile group 3;

Redo Log File 그룹 3을 삭제할 때...

- redo log files의 그룹은 최소한 두개 이상이어야 한다.
- 활성화되어 있는 그룹은 드롭할 수 없다.

8. Dropping Online Redo Log File Members

alter database drop logfile member

'd:\oracle\oradata\u04\log3c.rdo';

제약

- 만약 멤버를 드롭시킬 떄 마지막 값이 그룹의 맴버이면 맴버를 삭제할 수 없다.
- 만약 그룹이 current 상태일 때는 반드시 로그파일 스위치로 강제 실행시키고,

그 전에는 멤버를 삭제할 수 없다.
- 만약 데이타베이스가 ARCHIVELOG모드 일 때는 로그 파일 그룹은 활동되어지지 않고,

멤버도 지워지지 않는다.
- 온라인 redolog 파일맴버가 드랍될 때, OS파일은 실제로 지워지지 않고,

단지 OMF에서 사용할 수 없을 뿐이다.

9. Relocating or Renaming Onlne Redo Log Files

Redo log files의 위치를 변경하고 이름을 바꾸는 것.

Alter database rename file 명령어

- 데이타베이스를 셧다운 시킬 때.
- redo log files를 새로운 장소에 복사할 때..
- 데이타 베이스가 마운트 모드일 때
- 데이타 베이스를 노말로 오플 할 때.

새로운 맴버를 추가하고 오래된 맴버를 지울 때..

10. Clearing Online redo Log files

redo log 파일을 초기화 시킬 때..

alter database clear logfile group 2;


11. Online redo Log 파일 설정

- 파일의 크기와 갯수가 같아야 하고, 아카이브 파일은 아카이브 파일대로 데이타는

데이타 파일대로 각각 보관해야 된다..

12. OMF에서 REdo Log file을 관리하는 방법..

1) 파라메타는 DB_CREATE_ONLINE_LOG_DEST_n 에 정의된다.

DB_CREATE_ONLINE_LOG_DEST_1
DB_CREATE_ONLINE_LOG_DEST_2

2) 그룹은 자동으로 생성하는 명령어

Alter database add logfile;

3) 그룹을 삭제

Alter database drop logfile group 3;

13. 그룹에서 맴버의 정보를 조회하는 뷰...

v$log, v$logfile

STAUS상태 설명

unused : 로그 파일이 추가 됬지만 한번도 사용되지 않았을 때..
current : 현재 기록하고 있는 로그 파일..
ACTIVE : 사용은 되지만 현재 쓰여지지 않는 파일

14. 아카이브 리두로그파일...

로그파일을 덮어쓰기 전에 복사를 함..

(그래서 그 로그파일이 잘못 되었을 때는 복사본으로 복구하는 파일)
온라인으로 백업이 가능.

'먹고살기 > Oracle' 카테고리의 다른 글

오라클 알아둬야할것  (0) 2011.04.05
오라클 관리자 계정  (0) 2011.04.05
오라클 강좌  (0) 2011.04.05
ORACLE DATE (날짜 다루기)  (0) 2011.04.05
Database Link사용법  (0) 2011.04.05

'먹고살기 > Oracle' 카테고리의 다른 글

오라클 관리자 계정  (0) 2011.04.05
REDO LOG FILE에 대해서  (0) 2011.04.05
ORACLE DATE (날짜 다루기)  (0) 2011.04.05
Database Link사용법  (0) 2011.04.05
사용자 세션의 강제 종료  (0) 2011.04.05
날짜 다루기

1) 현재의 날짜와 시간

SYSDATE을 사용합니다. 요번에 마친 프로젝트가 있는데, 파워빌더로 ORACLE DB연결해서 사용했거든요. 현재 날짜를 얻기 위해 다음과 같이 사용했어요.

SELECT SYSDATE
INTO :lsToday
FROM
DUAL ;

그리고 날짜의 포맷은 파워빌더에서 지원해주는 것으로 사용했죠.

2) 날짜 포맷 요소

포 맷

설 명

범 위

포 맷

설 명

범 위

SS

0 ~ 59

MON

월 (약자)

JAN ~ DEC

SSSSS

자정 이후의 초

0 ~ 86399

MONTH

월 (영문)

JANUARY ~
DECEMBER

MI

0 ~ 59

YY

연도 끝 자리
두자

예) 98

HH

0 ~ 12

YYYY

연도 (네자리)

예) 1998

HH24

0 ~ 24

YEAR

철자화된 연도

DD

월간 일자

1 ~ 31
(28 , 30)

CC

세기

예) 19

DAY

요일

SUNDAY ~
SATURDAY

Q

분기

1 ~ 4

D

요일

1 ~ 7

J

율리우스력 일자

예) 2448000

DDD

년간 일자

1 ~ 366
(365)

W

월간 주

1 ~ 5

MM

1 ~ 12

WW

연간 주

1 ~ 52

3) 날짜를 문자열로 변환하기

  • 형식 : TO_CHAR( date_column_name, format )
  • FORMAT은 단일 인용부호로 둘러쌓여야 합니다.
  • 예) SELECT ename, TO_CHAR( birthday, 'YYYY/MM/DD' )
    FROM std_db
    ORDER BY birthday ;
    --> 생년월일 순으로 Sort되며 "1971/12/01"과 같은 Format으로 Display됩니다.
  • TO_CHAR 함수를 이용하여 문자열로 변환되면, SUBSTR과 같은 다른 문자열 함수내에서 인수로 사용할 수 있습니다.
  • 예) SELECT ename, SUBSTR( TO_CHAR( birthday, 'YYYY/MM/DD' ), 1, 4 )
    FROM std_db
    ORDER BY birthday ;
    --> 생년월일에서 연도만 Return합니다.
  • 년월일을 한글로 나타나게 하려면 다음과 같이 표현하면 됩니다.
  • 예) SELECT ename, TO_CHAR( birthday, 'YYYY"년"MM"월"DD"일"' )
    FROM std_db
    ORDER BY birthday ;

4) 문자열을 날짜로 변환하기

  • 형식 : TO_DATE( string_column_name, format )
  • 사용법은 TO_CHAR와 비슷합니다.

5) 시분초의 표현

  • 예) SELECT TO_CHAR( birthday, 'HH:MI:SS' )
    FROM std_db ;
    --> 태어난 시간을 "09:33:21"과 같은 형태로 Display합니다.
    SELECT TO_CHAR( birthday,
    'HH24:MI' )
    FROM std_db ;
    --> 태어난 시간을 "23:21"과 같은 형태로 시와 분을 Display합니다.
  • 시간을 24시간 형태로 표현하지 않고 AM, PM형태로 표현하려면
    예) SELECT TO_CHAR( birthday, 'HH:MI:SS
    PM' )
    FROM std_db ;
    --> 현재 시간이 오전인지 오후인지에 상관없이 PM을 Format에 추가하면 됩니다.

6) 날짜의 더하기와 빼기

ORACLE에서는 기존의 한 날짜로부터 다른 날짜를 계산하기 위해 더하기나 빼기를 할 수 있어요~! 오늘 딸기아빠가 된 우성이가 딸기의 백일을 알고 싶으면 다음과 같이 조회하면 되죠~!

SELECT SYSDATE + 100 FROM DUAL ;

물론 두 날짜 사이의 더하기와 빼기도 가능하지요~!

'먹고살기 > Oracle' 카테고리의 다른 글

REDO LOG FILE에 대해서  (0) 2011.04.05
오라클 강좌  (0) 2011.04.05
Database Link사용법  (0) 2011.04.05
사용자 세션의 강제 종료  (0) 2011.04.05
oracle JOIN  (0) 2011.04.05
원격지의 패러미터파일(init.ora)에 global_names를 true로 하면 dblink의 이름과 접속하는 db의 이름이
동일하도록 요구한다.


global_names = true [ or false ]

이 설정은 다음과 같이 해서 알 수 있다.
SQL> select name, value from v$parameter where name='global_names';

NAME                 VALUE
-------------------- ------
global_names         FALSE


현재 데이터베이스의 이름은 global_names에 질의함으로써 알 수 있다.

SQL> connect kang/xxxxxx@piruks;
연결되었습니다.
SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------
PIRUKS.KANG.COM



local db에 kang이라는 사용자로 접속한다.
SQL> connect kang/xxxxxx
연결되었습니다.

이제 원격지(piruks.kang.com)의 DB에 kang이라는 사용자로 연결되는 Database link를 생성한다.
여기서 piruks.kang.com은 원격지의 [Database name].[Domain name]이다.
보통 [Database name].[Domain name]는 Service Name이라 불리운다.
하지만 위와 같이 해서 제대로 않되는 경우가 있다.
이럴때는 global_name에 있는 이름을 dblink이름으로 정하면 해결된다.
piruks는 database connect string이다.

SQL> create database link piruks.kang.com
  2  connect to kang identified by xxxxxx
  3  using 'piruks';

데이타베이스 링크가 생성되었습니다.



사용법은 다음과 같다.
보통의 DML문장에 '@piruks.kang.com'을 추가한다.

SQL> select * from tab@piruks.kang.com;

TNAME                                                        TABTYPE         CLUSTERID
------------------------------------------------------------ -------------- ----------
TEST                                                         TABLE

SQL> select * from test@piruks.kang.com;

NAME                        AGE
-------------------- ----------
강명규                       27

SQL> insert into test@piruks.kang.com values('홍길동', 30);

1 개의 행이 만들어졌습니다.

SQL> update test@piruks.kang.com set age=31 where age=30;

1 행이 갱신되었습니다.

SQL> select * from test@piruks.kang.com;

NAME                        AGE
-------------------- ----------
강명규                       27
홍길동                       31

SQL> delete from test@piruks.kang.com where age=31;

1 행이 삭제되었습니다.

데이터베이스링크에서 DDL문장은 적용되지 않는다.
SQL> drop table test@piruks.kang.com;
drop table test@piruks.kang.com
                *
1행에 오류:
ORA-02021: 원격 데이터베이스에 DDL 조작들이 허용되지 않습니다


SQL> drop database link piruks.kang.com;

데이타베이스 링크가 삭제되었습니다.

SQL>


[2003-07-30 추가]
public DB링크와 동의어의 사용
이제껏 설명한 private DB링크와는 달리, public DB링크는 DB내의 모든 사용자가 사용할 수 있다.
이는 일반계정에서는 사용하지 못하므로 system사용자에서 생성해야 한다.
일반계정에서 public DB링크를 생성하려면, 다음의 권한이 필요하다.

DROP PUBLIC DATABASE LINK
CREATE PUBLIC DATABASE LINK

system계정에서 다음의 명령으로 kang계정에 이 권한을 줄 수 있다.

SQL> grant CREATE PUBLIC DATABASE LINK, DROP PUBLIC DATABASE LINK to kang;

권한이 부여되었습니다.


SQL> connect system/xxxxxx
연결되었습니다.
SQL> create public database link db.world
  2  connect to kang identified by xxxxxx
  3  using 'linuxdb';

데이타베이스 링크가 생성되었습니다.
SQL> conn scott/tiger
연결되었습니다.
SQL> select * from v_emp@db.world;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 80/12/17        800                    20
      7900 JAMES      CLERK           7698 81/12/03        950                    30
      7521 WARD       SALESMAN        7698 81/02/22       1250        500         30
이하생략

12 개의 행이 선택되었습니다.

SQL> conn kang/xxxxxx
연결되었습니다.
SQL> select * from v_emp@db.world;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 80/12/17        800                    20
      7900 JAMES      CLERK           7698 81/12/03        950                    30
      7521 WARD       SALESMAN        7698 81/02/22       1250        500         30
이하생략

12 개의 행이 선택되었습니다.

이와 같이 매번 골뱅이와 DB링크명(@db.world)를 붙이면 불편하므로, 동의어를 사용하여 투명하게 사용할 수도
있을 것이다. 모든 사용자에게 적용하려면 마찬가지로 system계정에서 public동의어를 생성하면 된다.

SQL> conn kang/xxxxxx
연결되었습니다.
SQL> create synonym v_emp for v_emp@db.world;

동의어가 생성되었습니다.

SQL> select * from v_emp;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 80/12/17        800                    20
      7900 JAMES      CLERK           7698 81/12/03        950                    30
      7521 WARD       SALESMAN        7698 81/02/22       1250        500         30
이하생략

12 개의 행이 선택되었습니다.

SQL>


[2003-07-30 추가]
하나의 SQL명령에서 사용할 수 있는 DB링크수는 초기화 패러미터 open_links에 따라 정해진다.
디폴트는 4개다.
SQL> show parameter open_links

NAME                                 TYPE    VALUE
------------------------------------ ------- ------------------------------
open_links                           integer 4
open_links_per_instance              integer 4


[2003-07-30 추가]
본문에서 잠깐 언급했지만, DB링크가 제대로 생성되었으나 실제 질의시 실패하는 경우가 있다.
이 경우에는, 연결DB의 global_name에 지정된 문자열을 사용하면 해결된다.
원래 초기화패러미터 gloabl_names가 true일 경우에만, 이것을 강제하게 되어 있으나,
이상한 것은 false일 경우에도 발생했다. 예제를 보면 쉽게 알 수 있을 것이다.

[문제**********]
DB링크는 에러없이 생성되나, 실제 질의가 실패함.
SQL> conn kang/xxxxxx
연결되었습니다.
SQL> create database link linuxdb_link
  2  connect to kang identified by xxxxxx
  3  using 'linuxdb';

데이타베이스 링크가 생성되었습니다.

SQL> select * from tab@linuxdb_link;
select * from tab@linuxdb_link;
                  *
1행에 오류:
ORA-02085: 데이터베이스 링크 LINUXDB_LINK.WORLD가 DB.WORLD에 연결됩니다


SQL> drop database link linuxdb_link;

데이타베이스 링크가 삭제되었습니다.


[해결책********]
원격DB서버의 global_name값을 확인
SQL> connect system/xxxxxx@linuxdb
SQL> show parameter global_names

NAME                                 TYPE    VALUE
------------------------------------ ------- ------------------------------
global_names                         boolean FALSE
연결되었습니다.
SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
DB.WORLD

다시 돌아와, DB링크생성시 이름을 위에서 확인한 global_names로 한다.
SQL> conn kang/xxxxxx
연결되었습니다.
SQL> create database link db.world
  2  connect to kang identified by xxxxxx
  3  using 'linuxdb';

데이타베이스 링크가 생성되었습니다.

SQL> select * from tab@db.world;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
A                              TABLE
AA                             TABLE
BONUS                          TABLE
CUSTOMER                       TABLE
DEPT                           TABLE
EMP                            TABLE
FAMILY                         TABLE
HITEL                          TABLE
ILSAN014                       TABLE
INTERIOR                       TABLE
MEMBER                         TABLE
MEMBER_DETAIL                  TABLE
PLAN_TABLE                     TABLE
SALGRADE                       TABLE
SAMWOO                         TABLE
SERVER                         TABLE
TEST                           TABLE
TM_YH                          TABLE
V_EMP                          VIEW

19 개의 행이 선택되었습니다.

'먹고살기 > Oracle' 카테고리의 다른 글

오라클 강좌  (0) 2011.04.05
ORACLE DATE (날짜 다루기)  (0) 2011.04.05
사용자 세션의 강제 종료  (0) 2011.04.05
oracle JOIN  (0) 2011.04.05
oracle exp/imp  (0) 2011.04.05