Oracle Database Migration이나 데이터 정리 등을 하려 TRUNCATE 명령 등을 수행할 때 ORA-2266에러를 만날 수 있습니다. 
요 에러는 reference constraint key가 걸려 있어 명령을 수행할 수 없다는 에러인데, 내가 작업하려 하는 table의 PK를 누가 참조하고 있다는 의미죠. 

> oerr ora 2266
02266, 00000, "unique/primary keys in table referenced by enabled foreign keys"
// *Cause: An attempt was made to truncate a table with unique or 
//         primary keys referenced by foreign keys enabled in another table.
//         Other operations not allowed are dropping/truncating a partition of a
//         partitioned table or an ALTER TABLE EXCHANGE PARTITION.
// *Action: Before performing the above operations the table, disable the 
//          foreign key constraints in other tables. You can see what 
//          constraints are referencing a table by issuing the following 
//          command:
//          SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = "tabnam";

이런 경우 dba_constraints를 query해서 어떤 table에서 reference 하고 있는지 확인할 수 있습니다. 
간단한 SQL이지만 계속 만들기 귀찮아 한번 정리해 봅니다. 

column r_owner format a20
column r_constraint_name format a30
column owner format a20
column table_name format a30
column constraint_name format a30
column "Constraint Disable COMMAND" format a150
set linesize 200
set pagesize 200
select r_owner,r_constraint_name,owner,table_name,constraint_name,constraint_type
from dba_constraints
where r_constraint_name in (select constraint_name from dba_constraints where table_name = upper('&&TABLE_NAME'))
/
select 'alter table '||owner||'.'||table_name||' disable constraint '||constraint_name||';' "Constraint Disable COMMAND"
from dba_constraints
where r_constraint_name in (select constraint_name from dba_constraints where table_name = upper('&TABLE_NAME'))
/

위의 SQL을 돌리면 아래 처럼 reference 하고 있는 table과 해당 constraint가 나옵니다. 
또 요놈들을 disable 해 줄 수 있는 명령도 같이 출력하게 됩니다. 

R_OWNER              R_CONSTRAINT_NAME              OWNER                TABLE_NAME                     CONSTRAINT_NAME                CON
-------------------- ------------------------------ -------------------- ------------------------------ ------------------------------ ---
DBSNMP               BSLN_BASELINES_PK2             DBSNMP               BSLN_STATISTICS                BSLN_STATISTICS_FK             R
DBSNMP               BSLN_BASELINES_PK2             DBSNMP               BSLN_THRESHOLD_PARAMS          BSLN_THRESHOLDS_FK             R

Constraint Disable COMMAND
------------------------------------------------------------------------------------------------------------------------------------------------------
alter table DBSNMP.BSLN_STATISTICS disable constraint BSLN_STATISTICS_FK;
alter table DBSNMP.BSLN_THRESHOLD_PARAMS disable constraint BSLN_THRESHOLDS_FK;

물론 아래처럼 cascade로 다 disable 시킬 수 있지만, 눈으로 한번 확인하고 작업하는 이 신중함 땜에.. ㅋ

ALTER TABLE dept DISABLE PRIMARY KEY CASCADE;


* 여기저기서 좋다는 책 몇권 추천합니다. 고수가 되는 그날까지.. 파이팅!!



DECODE() Function는 return된 결과가 지정된 값과 동일할 경우 특정 value를 출력해주는 function이다.  DECODE()는 다음과 같은 형태로 사용된다.

DECODE(value, search_value, result, default_value)

위의 decode function은 미리 지정된 value와 search_value가 같을 경우 result를, 그렇지 않은 경우 default_value를 출력한다. 이와 같이 decode()는 SQL에서 PL/SQL없이 IF-THEN-ELSE logic을 구현하고 있다.

다음은 decode()의 간단한 동작 예이다.

SELECT DECODE(1, 1, 2, 3)
FROM dual;

DECODE(1,1,2,3)
---------------
              2


SELECT DECODE(1, 2, 1, 3)
FROM dual;

DECODE(1,2,1,3)
---------------
              3

다음의 예는 more_products table의 available column의 값을 비교해 원하는 string을 출력한다. available column의 값이 'Y'일 경우 "Product is available'을 출력하고, 'Y'가 아닐 경우 'Product is not available"을 출력한다.

SELECT prd_id, available,
   DECODE(available, 'Y', 'Product is available',
      'Product is not available')
FROM more_products;

    PRD_ID A DECODE(AVAILABLE,'Y','PR
---------- - ------------------------
         1 Y Product is available
         2 Y Product is available
         3 N Product is not available
         4 N Product is not available
         5 Y Product is available

다음은 product table의 product_type_id column의 값들에 따라 원하는 string을 출력한다. 즉 product_type_id가 1일 경우 'Book', 2일 경우 'Video', 3일 경우 'DVD', 4일 경우 'CD', 기타 다른 값일 경우 'Magazine'을 출력한다.

SELECT product_id, product_type_id,
 DECODE(product_type_id,
   1, 'Book',
   2, 'Video',
   3, 'DVD',
   4, 'CD',
   'Magazine')
FROM products;

PRODUCT_ID PRODUCT_TYPE_ID DECODE(P
---------- --------------- --------
         1               1 Book
         2               1 Book
         3               2 Video
         4               2 Video
         5               2 Video
         6               2 Video
         7               3 DVD
         8               3 DVD
         9               4 CD
        10               4 CD
        11               4 CD
        12                 Magazine

Decode()은 CASE문에 비해 depth가 깊어지면 성능이 떨어지는 것으로 알려져 있다. depth가 깊은 SQL의 경우 CASE()와의 성능 비교가 필요할 수 있다.


* 여기저기서 좋다는 책 몇권 추천합니다. 고수가 되는 그날까지.. 파이팅!!



Active DataGuard 모니터링하는 SQL script를 만들어 보았습니다.
수행환경은 oracle 11g release 1 입니다.

1. 현재 dataguard 관련 process 모니터링
2. 마지막 전송받은 archived log file
3. Primary와 Standby 간의 GAP, 지연 정보 등

column process format a10
column status format a15
column client_pid format a10
column group# format a10
column name format a60
set linesize 200
alter session set nls_date_format = 'MM/DD HH24:MI:SS';
select PROCESS,PID,STATUS,CLIENT_PROCESS,CLIENT_PID,GROUP#,THREAD#,SEQUENCE#,DELAY_MINS,BLOCK#,BLOCKS from V$MANAGED_STANDBY
where status not in ('IDLE','CLOSING')
order by status
/
select b.NAME,b.DEST_ID, b.THREAD#,b.SEQUENCE#,b.STANDBY_DEST,b.ARCHIVED,b.APPLIED,b.STATUS,b.COMPLETION_TIME
from 
(select thread#,max(sequence#) sequence from V$ARCHIVED_LOG group by thread#) a, v$archived_log b
where a.thread# = b.thread# and a.sequence = b.sequence# 
/
column name format a30
column value format a50
column TIME_COMPUTED format a30
column unit format a30
select * from V$DATAGUARD_STATS
/

PROCESS           PID STATUS          CLIENT_PROCESS           CLIENT_PID GROUP#        THREAD#  SEQUENCE# DELAY_MINS     BLOCK#     BLOCKS
---------- ---------- --------------- ------------------------ ---------- ---------- ---------- ---------- ---------- ---------- ----------
MRP0            11615 APPLYING_LOG    N/A                      N/A        N/A                 1      47741          0     214659    1024000
ARCH             9762 CONNECTED       ARCH                     9762       N/A                 0          0          0          0          0


NAME                                                            DEST_ID    THREAD#  SEQUENCE# STANDBY_D ARCHIVED  APPLIED                     STATUS          COMPLETION_TIM
------------------------------------------------------------ ---------- ---------- ---------- --------- --------- --------------------------- -------------
/ARC2/2_21989_697581426.arc                             1          2      21989 NO        YES       YES                         A               03/23 14:39:46
/ARC3/3_21296_697581426.arc                             1          3      21296 NO        YES       YES                         A               03/23 15:06:36
/ARC1/1_47740_697581426.arc                             1          1      47740 NO        YES       IN-MEMORY               A               03/23 16:05:58


NAME                           VALUE                                              UNIT                           TIME_COMPUTED
------------------------------ -------------------------------------------------- ------------------------------ ------------------------------
apply finish time              +00 00:00:03.5                                     day(2) to second(1) interval   23-MAR-2010 16:24:19
apply lag                      +00 00:00:00                                       day(2) to second(0) interval   23-MAR-2010 16:24:19
estimated startup time         32                                                 second                         23-MAR-2010 16:24:19
standby has been open          N                                                                                 23-MAR-2010 16:24:19
transport lag                  +00 00:00:00                                       day(2) to second(0) interval   23-MAR-2010 16:24:19






서점에서 몇번 오라클 관련 서적을 샀었는데, 많이 실망한 적이 많이 있었습니다.
그때는 오라클에 대해 잘 모를 때였던 거 같은데,
나중에 보니 tablespace를 작업공간이라고 해석해 놓았던 책도 있더군요.. --;

다음의 리스트는 오라클 전문가가 되기 위해 읽을만한 추천책입니다.

물론 이제 막 십년 밖에 안된 야매인 제가 추천해드리는 책은 아니고,
http://oracledoug.com 블로그를 운영하는 "Douglas Ian Burns"라는 사람이 추천한 책입니다.
이분은 자그마치 18년의 경력을 갖고 있다시는 군요..
저도 18년 정도 하면 이분 정도의 공력을 갖을 수 있을까..

걱정입니다.. --;
1. Chris Date's Database In Depth from O'Reilly
2. Oracle Concepts manual
3. Expert One-on One: Oracle Written by Tom Kyte
4. Expert Oracle Database Architecture: 9i and 10g Programming Techniques and Solutions
5. Practical Oracle 8i
6. Cost Based Oracle: Fundamentals
7. Optimizing Oracle Performance
8. Oracle Wait Interface: A Practical Guide to Performance Diagnostics and Tuning
 

원문: http://oracledoug.com/books.html

이분이 한국인이 아니기 때문에 당연히 외국 원서 입니다. ㅋ
국내에 번역 된 책도 많이 있는데, 알라딘에서 찾아 링크 좀 걸까 했는데, 국내에서는 절판이나 품절이 많네요.




널리 알려진 기능이지만 사용하는 방법 sample 입니다.
PC 내에 있는 scrpt 정리하다 삭제 전에 한번 올려 봅니다.
혹시 누군가에겐 필요할까 싶어서 ㅎㅎ
(절대 몇일 동안 oracle post가 없어 올리는 건 아닙니다. --;)

ora102@TEST4:/app/oracle/product/db/rdbms/log> sqlplus scott/tiger

SQL*Plus: Release 10.2.0.3.0 - Production on Sun Aug 3 14:57:17 2008

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

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

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BIN$U4gkooULB1PgQLMKTWwM7A==$0 TABLE
BIN$U4iK63kw1zTgQLMKTWx98g==$0 TABLE
EMP                            TABLE
AAA                            TABLE

SQL>
SQL> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP              BIN$U4iK63kw1zTgQLMKTWx98g==$0 TABLE        2008-08-03:14:32:03
TEST             BIN$U4gkooULB1PgQLMKTWwM7A==$0 TABLE        2008-08-03:14:03:27

SQL>  FLASHBACK TABLE TEST TO BEFORE DROP;

Flashback complete.

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BIN$U4iK63kw1zTgQLMKTWx98g==$0 TABLE
TEST                           TABLE
EMP                            TABLE
AAA                            TABLE

SQL> purge recyclebin;

Recyclebin purged.

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
TEST                           TABLE
EMP                            TABLE
AAA                            TABLE


SQL> drop table test;

Table dropped.

SQL> select * from user_recyclebin;

OBJECT_NAME                    ORIGINAL_NAME                    OPERATION
------------------------------ -------------------------------- ---------
TYPE                      TS_NAME                        CREATETIME
------------------------- ------------------------------ -------------------
DROPTIME               DROPSCN PARTITION_NAME                   CAN CAN
------------------- ---------- -------------------------------- --- ---
   RELATED BASE_OBJECT PURGE_OBJECT      SPACE
---------- ----------- ------------ ----------
BIN$U4juzy+wgKngQLMKTWwgxQ==$0 TEST                             DROP
TABLE                     USERS                          2008-08-03:13:57:59
2008-08-03:14:59:59   15636802                                  YES YES
     56903       56903        56903   

2010/03/30
oracle flashback 기능을 그림과 함꼐 잘 설명해 놓은 post가 있어 링크 겁니다

행복만땅 개발자 :: [오라클 10g] 플래시백의 설정/관리





oracle RAC(OPS도 마찬가지지만)를 사용할때, 각각의 instance는 자신의 SGA와 buffer cache를 갖는다.

RAC는 성능 향상과 노드간의 데이터 정합성을 위해 이들 각 instance내의 buffer내의 block의 변경을 자알 관리해야 한다. cache resource라 불리는 이들 buffer에 대한 각각의 copy 본은 cluster의 한 노드에는 반드시 master를 갖고 있어야 한다.

10g 이전 버전에서는 한 instance에서 해당 cache resource에 대해 master로 설정되면 instance startup이나 shutdown, node eviction 등으로 인한 reconfiguration 이전에는 그 설정이 지속되게 된다.  따라서 만약 노드 B가 cache resource에 대해 master로 설정되면 reconfiguration이 발생되기 전까지는 이 설정이 지속된다.

2009년 10월 12일 Update:


첨부된 문서는 RAC 간의 데이터 전송인 "cache fusion"에 대한 설명이다. 해당 설명의 그림을 보면 buffer access를 위해 계속 resource master에 해당 block에 대해 어떤 instance에서 master owner ship을 갖고 있는지 확인하고 있다.
이 문서는 2003년 봄 oracle magazine에 실린 "cache fusion"에 대한 설명이다.


10g에서 소개된 DRM은 자주 access 되는 node로의 buffer에 대한 master가 변경되는 re-mastering 개념이 소개되었다. 따라서 이전 버전처럼 reconfiguration 없이도 master의 재 설정이 가능해 졌다.

이러한 re-mastering operation은 LMD trace에서 확인할 수 있다.
Begin DRM(202) - transfer pkey 4294951314 to 0 oscan 1.1
*** 2006-08-01 17:34:54.645
Begin DRM(202) - transfer pkey 4294951315 to 0 oscan 1.1
*** 2006-08-01 17:34:54.646
Begin DRM(202) - transfer pkey 4294951316 to 0 oscan 1.1
*** 2006-08-01 17:34:54.646
Begin DRM(202) - transfer pkey 4294951317 to 0 oscan 1.1
RAC에서는 buffer내의 block에 대한 access시 반드시 해당 block의 master와 통신을 하게 되어 있다. 따라서 특정 노드에서 자주 참조되는 block은 해당 노드에서 master를 갖는것이 성능상의 잇점을 얻을 수 있을 것이다.

하지만 oracle10g RAC에 대해서 이전 버전처럼 업무를 노드 별로 나누는 것을 강조하고 있지 않다. 더구나 sql*net의 load balance 기능을 사용하고 있다면, remastering에 의한 부담이 더 크지 않을까나..

참고 : Note 390483.1 DRM - Dynamic Resource management

2010/03/25 Updated: 
Oracle database internals by Riyaj라는 유명한 오라클 블로그에서 DRM에 대해 post 하나를 올렸군요. 
오 ..역쉬, force가 다르군요. ㅜㅡ

내용을 좀 읽어보니 아예 DRM을 disable 시키지 말고 값을 크게 해서 remastering을 최소화하는 것을 권하는 군요. 
DRM 기능은 _gc_affinity_time을 0으로 설정해 disable 시킬 수 있습니다. 그러나 _gc_affinity_limit와 _gc_affinity_minimum의 값 조정으로 DRM 기능을 최소화 할 수 도 있군요. 이렇게 최소화 시켜놓으면 사용자게 manual 하게 rematering 하는 게 여전히 가능하답니다. 
manual 하게 수정은 "oradebug lkdebug -m pkey" 명령으로 가능합니다. 

자세한 내용은 아래 링크에서...

http://orainternals.wordpress.com/2010/03/25/rac-object-remastering-dynamic-remastering/






Oracle EM grid control에서 특정 event가 발생하면 해당 내용을 Critical, Warning으로 구분해서 alert 발생시킵니다. 
이 alert 내용을 mail로 delivery 할수 있고 user PL/SQL을 이용해 다른 여러 응용도 가능합니다. 

다음의 SQL script는 EM에서 발생한 alert message와 alert의 상태, 그리고 이에 대한 delivery 수행이 잘 되었는지 확인하는 방법입니다. 

* Oracle 11g Release 1에 Oracle Grid conrol 10.2.0.5 환경에서 테스트 되었습니다. 

SQL> select TARGET_NAME||' /'||METRIC_NAME||' /'||KEY_VALUE METRIC_NAME,TIMESTAMP,DELIVERED,substr(b.MESSAGE,1,100) message,ALERT_STATE,substr(b.DELIVERY_MESSAGE,1,50) DELIVERY_MESSAGE
from sysman.mgmt_notification_log a, SYSMAN.MGMT$ALERT_NOTIF_LOG b
where a.SOURCE_OBJ_GUID(+) =b.SOURCE_OBJ_GUID
and to_char(TIMESTAMP,'MMDD') = '0311'
-- and target_name = 'LISTENER_PMGT_FLPEME01'
-- and DELIVERED ='Y'
order by TIMESTAMP
/


METRIC_NAME                              TIMESTAMP      DEL MESSAGE                                            ALERT_STAT DELIVERY_MESSAGE
--------------------------------------- -------------- --- -------------------------------------------------- ---------- --------------------------------------------------
TEST /problemTbsp /TS_TEST                03/11 02:07:51 Y   Tablespace [TS_TEST] is [97 percent ] full           Critical   Called PL/SQL procedure SYSMAN.LOGGING_ALERT
TEST /problemTbsp /TS_TEST                03/11 02:09:22 Y   Tablespace [TS_TEST] is [97 percent ] full           Critical   Called PL/SQL procedure SYSMAN.LOGGING_ALERT
TEST /problemTbsp /UNDOTBS1              03/11 02:57:45 Y   Tablespace [UNDOTBS1] is [97 percent ] full        Critical   Called PL/SQL procedure SYSMAN.LOGGING_ALERT
TEST /problemTbsp /UNDOTBS1              03/11 02:59:16 Y   Tablespace [UNDOTBS1] is [97 percent ] full        Critical   Called PL/SQL procedure SYSMAN.LOGGING_ALERT






일반적인 HOT block에 따른 현상이 널리 알려진게 'cache buffer chains' 등의 buffer chain에 대한 latch 입니다. 

다음의 SQL은 cache buffers chains children latch 중 가장 sleep count가 높은 children latch의 ADDR에 어떤 block들이 달려 있는지 확인해
그 block 중 가장 동시 접근이 많은 block을 찾는 SQL 입니다. 

select * from (
select HLADDR,TS#,FILE#,DBABLK,TCH , CHILD#,GETS,MISSES,SLEEPS
from x$bh x, 
    (select * from (
     select CHILD#  ,ADDR,GETS,MISSES,SLEEPS  from v$latch_children where name = 'cache buffers chains' order by 5 desc
                   ) 
     where rownum < 2 ) y
where x.hladdr = y.addr
order by tch desc
) where rownum < 2
/





Oracle 11g에서 많은 새로운 기능들이 생겼습니다.
그러나 oracle 11g를 설치하면 제일 먼저 눈에 띄는게 OFA 구조가 바뀐거죠. 
(설치 후 alert log를 한참동안 찾아 헤메였다는.. ^^;)

전통적으로 oracle alert log file과 trace file들은 $ORACLE_BASE/admin/$ORACLE_SID/bdump 에 쌓였었죠. 
(아마 8.0 때부터였던가.. 그랬었을 겁니다. 아마 ㅋ)
가끔 bug이나 resource 문제로 $ORACLE_HOME/rdbms/log에 생기기도 했고요. 

Oracle 11g에서는 이 구조가 좀 바뀌었습니다. $ORACLE_BASE 밑에 diag란 directory 밑에 쪼르륵 달려있습니다. 

$ORACLE_BASE/diag/rdbms/'DATABASE NAME'/$ORACLE_SID/trace

이렇게 구조가 달라진 이유는 아마 metalink.oracle.com에서 support.oracle.com으로의 변화와 OCM (oracle configuration management) 때문이지 않을까 싶습니다. 즉, database의 특정 환경, event 들을 OCM을 통해 support.oracle.com에서 지원하려는 .. 뭐 그런 이유 이지 않을까 싶습니다. 

암튼 단순히 trace file과 alert log의 위치만 변경된 것은 아니죠. adrci라는 diag file 관리 tool이 만들어 졌습니다. 
이 tool을 이용해 현재 발생한 problem, incident 등을 쉽게 파악할 수 있으며, 기간이 오래된 trace file 등을 한방에 정리도 할 수 있습니다.
이러한 기능은 EM에서도 가능하고요. 

oracle 내에서 어떤 문제가 생겨 SR을 open해 분석을 진행할때 가장 귀찮은 게 관련 trace, log file을 취합해서 upload하는 겁니다. (저는 그래요.. ㅋ) adrci에서는 관련 trace, log file을 한꺼번에 취합해 주는 기능이 있는데, 이것이 IPS (incident packaging service) 입니다. 

구조가 바뀌고 "PROBLEM"과 "INCIDENT"라는 단어들이 나오는데, Problem은 특정한 문제 전체를, Incident는 문제의 발생 자체를 말합니다. 즉, ORA-1555가 10번 발생했다면 ORA-1555 1개의 문제에 10번의 incident가 발생한게 됩니다.

다음은 ADRCI에서 incident를 packaging 하는 방법입니다. 
그냥 보시면 아실만한 내용이라 별도의 설명은 생략하겠습니다. 

$ adrci

ADRCI: Release 11.1.0.7.0 - Production on Mon Mar 8 16:35:56 2010

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

ADR base = "/oracle"
adrci> 
adrci> show incident

ADR Home = /oracle/diag/rdbms/test/TEST01:
*************************************************************************
INCIDENT_ID          PROBLEM_KEY                                                 CREATE_TIME                              
-------------------- ----------------------------------------------------------- ---------------------------------------- 
656910               ORA 600 [critical problem임]                                2010-01-29 11:31:45.635899 +09:00       
656909               ORA 600 [critical problem임]                                2010-01-29 11:19:30.662164 +09:00       
656478               ORA 7445 [critical problem임]                               2010-01-25 13:21:00.086171 +09:00       
656477               ORA 7445 [critical problem임]                               2010-01-25 13:16:54.434050 +09:00       
               ...
20 rows fetched

ADR Home = /oracle/diag/clients/user_oracle/host_2085451943_11:
*************************************************************************
INCIDENT_ID          PROBLEM_KEY                                                 CREATE_TIME                              
-------------------- ----------------------------------------------------------- ---------------------------------------- 
25                   oci 24550 [3]                                               2009-08-19 17:01:14.504278 +09:00       
17                   oci 24550 [3]                                               2009-08-19 16:59:56.250301 +09:00       
9                    oci 24550 [3]                                               2009-06-18 08:09:28.329766 +09:00       
1                    oci 24550 [3]                                               2009-06-18 08:07:58.791738 +09:00       
4 rows fetched

adrci> show homepath
ADR Homes: 
diag/rdbms/test/TEST01
diag/clients/user_oracle/host_2085451943_11
diag/clients/user_precise/host_2085451943_11
diag/clients/user_norad/host_2085451943_11
diag/tnslsnr/TEST01/test_TEST01
diag/tnslsnr/TEST01/listener_TEST01
diag/tnslsnr/TEST01/listener_TEST01
diag/tnslsnr/TEST01/listener
adrci> set homepath diag/rdbms/test/TEST01
adrci> ips create package incident 656910
Created package 1 based on incident id 656910, correlation level typical
adrci>
adrci> IPS GENERATE PACKAGE 1 in /oracle/diag
Generated package 1 in file /oracle/diag/ORA600critical problem임_20100308163713_COM_1.zip, mode complete
adrci> exit
$ls -altr
total 12744
-rw-r--r--   1 oracle     dba        6456404 Mar  8 16:39 ORA600critical problem임_20100308163713_COM_1.zip

참고: 
Note.738732.1 ADR How to Package Diagnostic Information in 11g





Oracle global temporary table은 Transaction 내에서 임시로 만들 수 있는 table을 지칭합니다. 
transaction 내부에서 사용하는 것이니 당연히 transaction을 commit/ rollback하면 없어지겠죠. 

"global"이라는 단어가 붙은 이유는 table의 구조는 공유한데서 나오니 않았나 싶습니다. 
같은 global temporary table에 각각의 세션에서 데이터를 insert 하면 서로 다른 값을 보여주게 됩니다. 

Global temporary table 생성 명령은 table 생성명령에 global temporary 만 넣어주면 됩니다. 

create global temporary table test_temp ..

global temporary table을 만든 후 dba_objects에서 query를 해보면 해당 이름으로 object_type이 table이라고 나오긴하나, 
dba_segments에서는 해당 이름의 segment는 없는 것으로 보여줍니다. v$sort_usage를 보니 temp tablespace에 temporary data segment type으로 한덩어리 만들어 놓았군요..






오라클의 전체적인 사용현황과 그에 따른 AWR, ADDM을 수행하기 좋은 툴하나 소개합니다. 
OraScope.Net이라는 툴인데, FreeWare 입니다. 

Session, Lock, Database 등 모니터링 기능은 없는 듯하나, 
Database 전체를 파악하기 위한 resource 사용현황들은 거의 다 있는 것 같습니다. 

Download는 아래사이트에 방문하시면 됩니다..

OraScope.Net LITE 는 FREEWARE 입니다.

 

즉, 무료 오라클 성능 모니터링 툴입니다.

개인, 기업, 기관등 사용자와 장소에 구애받지 않고, 마음대로 사용하실수 있습니다.

다만, OraScope.Net LITE 를 저작자의 동의없이 상업적 용도로는 사용할수 없으며,

본 싸이트에서 제공하는 배포화일 형태 그대로, 자유로이 배포하실수 있습니다.(배포화일의 재 PACKAGING은 불허)

 

OraScope.Net LITE 의 모든 저작권은 저작자( orascope@orascope.net ) 에게 있습니다.

 

OraScope.Net LITE 를 사용하여 일어나는 문제나 기타 제반 사항에 대해, 저작자는 책임이 없음을 알려드립니다.

(기타 후원해 주실 분이나 업체는 orascope@orascope.net 로 연락주시면 됩니다.Laughing)









오라클에는 현재 수행 중인 세션을 정리하는 방법이 두가지가 있습니다.

하나는 익히 알고 있는 ALTER SYSTEM KILL SESSION 명령이고 다른 하나는 ALTER SYSTEM DISCONNECT SESSION 명령입니다. 이 두개의 명령은 "ALTER SYSTEM" 명령의 "end_session_clauses"에 속하는 명령입니다.




일반적으로 비정상적인 세션을 정리할 때 alter system kill session 명령을 수행하곤 하는데, kill session 명령은 현재 수행중인 transaction을 바로 정리해 버리죠. 그런데, disconnect session  명령은 현재까지 수행된 transaction은 처리하고 session을 정리할 수 있는 방법입니다.

ALTER SYSTEM KILL SESSION '13, 8' IMMEDIATE;
ALTER SYSTEM DISCONNECT SESSION '13, 8' POST_TRANSACTION;


DISCONNECT SESSION은 dedicated server를 강제로 정리해 현 세션을 disconnect 하게 된다. 세션의 지정은 KILL SESSION 과 마찬가지로 'sid, serial#' 으로 지정한다.

DISCONNECT SESSION 문에는 "POST_TRANSACTION" 과 "IMMEDIATE" option을 지정할 수 있다.

POST_TRANSACTION은 현재 transaction이 수행 중이라면 이 transaction이 끝난 후에 세션을 정리하게 되며, 만약 현재 수행 중인 transaction이 없다면 "KILL SESSION"과 동일한 효과를 갖는다. (근데, "KILL SESSION"절에 IMMEDIATE option은 언제 생긴거람.. ?)









예전 포스트에서 V$ view와 DBA_ view의 차이점에 대해서 언급했었습니다.

v$ view는 memory structure data를 보여주며, dba_ table(?)은 system tablespace 상의 data dictoinary data를 보여줍니다. 10g에서 awr 관련 view들이 만들어져서 dba_hist view 등에서 memory structure statistic data를 system tablespace에 저장해서 보여주기도 하죠.


아래의 v$fixed_view_definition view는 오라클의 fixed view의 description을 보여주는 view 입니다.
아래의 내용은 얼마전 bind 변수 값을 찾을 방법이 없을까 .. 해서 한번 뒤져보느라 query 해본 내용입니다.
역시 그런 방법은 없는 것 같더군요.. --;

SQL> select view_definition from v$fixed_view_definition where view_name = 'GV$SQL_BIND_CAPTURE';

VIEW_DEFINITION
-----------------------------------------------------------------------------------------------------------------------
select INST_ID,                 KQLFBC_PADD,                 KQLFBC_HASH,      
          KQLFBC_SQLID,
KQLFBC_CADD,                 KQLFBC_CHNO,                 substr(KQLFBC_NAME,
1, 30),                 KQLFBC_POS,
          to_number(decode(KQLFBC_DUPPOS, 65535, NULL, KQLFBC_DUPPOS)),        
        KQLFBC_OACDTY,             s
ubstr(KQLFBC_DTYSTR, 1, 15),                 KQLFBC_OACCSI,                
KQLFBC_OACPRE,              KQLFBC_OACSCL
,                 KQLFBC_OACMXL,                 decode(KQLFBC_WCAP, 0, 'NO',
'YES'),                 decode(KQLFBC_WCAP
, 0, to_date(NULL), KQLFBC_LCAP),                 KQLFBC_STRVAL,               
  decode(KQLFBC_WCAP, 0, NULL,
                            sys.sys$rawtoany(KQLFBC_BINVAL, KQLFBC_OACDTY,     
                              KQLFBC
_OACCSF, KQLFBC_OACCSI))          from x$kqlfbc;


* 여기저기서 좋다는 책 몇권 추천합니다. 고수가 되는 그날까지.. 파이팅!!



뻔한 script 지만, 나름 쓸만한 shell script 입니다.
shell로 저장한 후 뒤에 sql script와 interval을 주만 무한 루프..
active session 모니터링용으로는 뭐 GUI tool이 부럽지 않죠.. ㅋ

<사용방법>
rpt <sql script name> <interval(sec)>

<내용>
if [ $# -eq 1 ]
then
 arg2=2
elif [ $# -eq 2 ]
then
 arg2=$2
else
     echo "Usage : rpt sql term";
     exit;
fi

arg1=$1
while true
do
sqlplus -s '/ as sysdba' <<EOF
set linesize 200
set pause off
set pagesize 120
@$arg1
EOF
sleep $arg2
done




Oracle External table은 오라클 외부의 데이터를 내부로 loading해 table 형식으로 보여 줍니다.
Oracle 11g R2에서는 "PREPROCESSOR 절"이 생겨 이 외부 file에 대해 선처리 프로세서를 정의해 줄 수 있습니다.

대부분 외부 SAM file 형식이니 압축해제나 shell을 통한 추출 정도의 선 프로세서를 정의할 수 있겠네요.
잘만 된다면 SAM file 저장하는 공간을 줄일 수 있겠네요.

예 : compress된 데이터를 gunzip을 이용해 압축 해제 후 loading

CREATE TABLE sales_transactions_ext
     (PROD_ID NUMBER, CUST_ID NUMBER, TIME_ID DATE, CHANNEL_ID NUMBER, PROMO_ID NUMBER, QUANTITY_SOLD NUMBER,
      AMOUNT_SOLD NUMBER(10,2), UNIT_COST NUMBER(10,2), UNIT_PRICE NUMBER(10,2))
ORGANIZATION external
 (TYPE oracle_loader DEFAULT DIRECTORY data_file_dir
  ACCESS PARAMETERS
  (RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
   PREPROCESSOR exec_file_dir:'gunzip' OPTIONS '-c'
   BADFILE log_file_dir:'sh_sales.bad_xt'
   LOGFILE log_file_dir:'sh_sales.log_xt'
   FIELDS TERMINATED BY "|"
   LDRTRIM ( PROD_ID, CUST_ID, TIME_ID DATE(10) "YYYY-MM-DD", CHANNEL_ID, PROMO_ID, QUANTITY_SOLD,
                AMOUNT_SOLD, UNIT_COST, UNIT_PRICE))
location ('sh_sales.dat.gz') )
REJECT LIMIT UNLIMITED;






오라클의 통계정보는 다른 DB나 계정으로 옮겨질 수 있습니다.
개발장비에서 수집된 통계정보를 옮긴다거나, 기존의 운영장비의 통계정보를 migration 할 대상으로 옮겨 동일한 SQL 수행을 유도할 수 있습니다.

다음은 현재 SCOTT 계정의 통계정보를 다른 Database의 SCOTT 계정으로 옮기는 예제입니다.

* statistic 정보 수집 table 생성
SQL> exec dbms_stats.create_stat_table('SCOTT','STATS');

* scott.emp table의 통계정보를 statistic 정보수집 테이블인 STATS로 export
exec dbms_stats.export_table_stats('SCOTT','EMP',NULL,'STATS',NULL,TRUE);

* STATS table export
%exp scott/tiger tables=STATS file=expstat.dmp

* STATS table import
%imp scott/tiger file=expstat.dmp full=y log=implog.txt 

* STATS table의 통계정보를 SCOTT.EMP에 import
exec dbms_stats.import_table_stats('SCOTT','EMP',NULL,'STATS',NULL,TRUE);

기존의 통계정보를 다른 Database의 동일 계정으로 옮기는 작업에 대한 내용들은 많이 기술 되어 있는데,
이름이 다른 계정은 어떻게 옮길까요?

다른 계정으로 통계정보를 옮기는 작업은 다른 데이터베이스내의 동일 계정으로 통계정보를 옮기는 작업처럼 procedure로만은 불가능합니다.
물론 작업 자체가 불가능하다는 이야기는 아닙니다.

You may not export stats from one schema name and import into a different schema name (Bug 1077535). The schema names much match exactly. If the target database schema name (import database) is different from the source database schema name (export database), then you may update the table you exported the statistics into and set the C5 column to the target schema name.

통계정보를 export 받기 전에 생성하는 statistic 정보를 저장하는 stat table에는 통계정보가 만들어진 계정의 이름이 지정되어 있어,
이를 다른 계정으로 import하려고 하면 import는 성공했다고 나오나 통계정보는 입력 되지 않습니다.

따라서 수집된 통계정보가 있는 table의 owner column의 owner를 바꿔줘야 합니다.

i.e.
"update table sd_stat set c5 = '<target schemaname>'
where c5 = '<Source Schema name>'
  and statid = '<Stat Id used while exporting these stats>;"

update sd_stat set c5 = 'JBARLOW';
where c5 = 'SCOTT'
  and statid = 'a';
commit;

정리해 보자면 SCOTT 계정의 SD table의 통계정보를 JBAARLOW 계정으로 옮긴다면 아래와 같이 수행해야 합니다.

* statistic 정보 수집 table 생성
SQL> exec dbms_stats.create_stat_table('SCOTT','SD_STAT');

* scott.sd table의 통계정보를 statistic 정보수집 테이블인 SD_STATS로 export
exec dbms_stats.export_table_stats('SCOTT','SD',NULL,'SD_STAT',NULL,TRUE);

*  SD_STAT table의 계정정보 수정
update sd_stat set c5 = 'JBARLOW';
where c5 = 'SCOTT';
commit;

* STATS table의 통계정보를 JBARLOW.SD table에 import
exec dbms_stats.import_table_stats('JBARLOW','SD',NULL,'SD_STAT',NULL,TRUE,'SCOTT');


참고 : Note 117203.1 How to Use DBMS_STATS to Move Statistics to a Different Database





Oracle INVISIBLE index는 Oracle 11g new feature 입니다.

말 그대로 보이지 않는 index 입니다. 여기서 보는 주체는 oracle optimizer가 됩니다.
즉 index는 존재하지만 optimizer는 이를 기준으로 plan을 생성하지 않습니다.
그러나 해당 index의 table에 대한 DML 변경 내역은 모두 index에 적용되게 됩니다.

이는 index 생성에 따른 혹은 index 삭제에 따른 전체 성능, 일부 성능 측정에 도움이 될 만한 feature가 아닌가 싶습니다.

Invisible index 생성
SQL> Create index invisible_index on table(column) invisible;

Invitible index 사용 정의
SQL> alter session set optimizer_use_invisible_indexes=true;

Invisible index를 visible로 변경
SQL> alter index invisible_index visible;

visible index를 invisible로 변경
SQL> alter index invisible_index invisible;





Oracle과 다른 DB와의 차이점을 보면 굉장히 손이 많이 갑니다.
oracle 10g, 11g가 나오면서 운영의 자동화와 간소화 기능이 많이 추가 되긴 했지만요..

그런데, 이말을 거꾸로 말해보자면, 사용자의 역량에 따라 tuning 할 수 있는 포인트가 많다는 이야기도 되죠.
또 이런 특성때문에 곳곳에 숨어 있는 고수들도 많이 있습니다.

아래의 SQL은 숨어 있는 이러한 기능들을 control 할 수 있는 parameter를 확인 할 수 있는 SQL 입니다.
물론 show parameter나 v$parameter에서 parameter의 값을 확인 할 수 있지만,
이 두개의 방법으로 찾을 수 있는 parameter는 일반 parameter와 변경된 hidden parameter만을 볼 수 있습니다.

아래의 SQL은 일반 parameter와 hidden parameter 모두 확인 가능한 parameter 입니다.

col value format a20
col description format a70
select a.inst_id "inst_id",  ksppinm "name",  ksppstvl "value",  ksppdesc "description"
from x$ksppi a,x$ksppsv b where a.indx = b.indx and ksppinm like '%&parameter%'
/

SQL만 덩그러니 post하긴 좀 그러니..
각 버전 별로 전체 parameter 갯수와 hidden parameter 개수를 비교해 봤습니다.

10g R2는 전체 1385개의 parameter 중 hidden parameter는 1127 개이고,
11g R1 은 1920개 중 1631개,
11g R2는 2399개 중 2057 개  입니다.
(제 VMware linux 서버 기준입니당)

버전이 높아 질수록 점점 숨겨지는 parameter도 늘어가네요. 
또 전체 parameter 중에서 감춰진 parameter가 대부분이군요..
약 70% 정도 되는 거 같네요.. 

요거 마스터 하면 고수가 될 수 있을 라나..




운영 중 spfile이 유실 되는 경우, 간편하게 recovery 할 수 있는 명령어가 oracle 11g에서 추가되었네요.

뭐 alert log file에 나온 parameter 정보나 show parameter 등으로도 만들 수 있지만 많이 귀찮죠.
(사실 spfile이나 init file 유실되는 건 본적은 없으나...)

create spfile from memory;
create spfile='/u01/oracle/app/oracle/product/11g/dbs/spfile_back.ora' from memory;







전통적인 Oracle 접속 방식인 "Dedicated Server"와 "Shared Server" 방식외에 Oracle 11g에서 DRCP (Database Resident Connection Pooling)라는 접속 방식이 추가 되었습니다.

Database resident connection pooling (DRCP) provides a connection pool in the database server for typical Web application usage scenarios where the application acquires a database connection, works on it for a relatively short duration, and then releases it.

메뉴얼을 보면 각각의 접속 방식에 소모되는 memory를 계산해 놓은 부분이 있는데, 요거 보면 적용할 만 하겠다 싶긴 합니다.

그러나 memory 사용량을 보면 혹할수도 있겠는데, 만약 concurrent가 5000이라고 가정 한다면,
DRCP의 경우는 100개만 접속 해 있고 나머지는 queue에 대기하고 있는 모양이겠죠?

shared server의 경우 100개만 떠있어도 100개의 shared server가 5000개의 세션을 cover 해주고 있으니,
DRCP와 dedicate/ shared server와 비교하는 것 자체가 사실 말이 안될 수 도 있습니다.

memory required for each session is 400 KB and the memory required for each server process is 4 MB. The pool size is 100 and the number of shared servers used is 100. If there are 5000 client connections, the memory used by each configuration is as follows:

 Dedicated Server
 Memory used = 5000 X (400 KB + 4 MB) = 22 GB
 Shared Server
 Memory used = 5000 X 400 KB + 100 X 4 MB = 2.5 GB
 Database Resident Connection Pooling
 Memory used = 100 X (400 KB + 4 MB) + (5000 X 35KB)= 615 MB

설정 방법도 별로 어렵지 않습니다. 서버단에서 process parameter 좀 늘려주고 다음 처럼 수행하고, client 단에서 tnsnaems.ora의 설정 부분에 SERVER를 POOLED라고만 정의하면 되네요. 

DRCP 설정 방법
SQL> exec dbms_connection_pool.configure_pool(maxsize=>10,inactivity_timeout=>60);
SQL> exec sys.dbms_connection_pool.start_pool();

Client 설정
DRCP =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = sample.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = POOLED)
      (SERVICE_NAME = orcl.sample.com)
    )
  )

딱히 테스트 해보고 올린 post가 아니니 잘못된 부분이 있으면 가차없이 알려주세요. ^^





웨어벨리에서 하루짜리 오렌지 교육을 진행하네요.
오렌지는 DB 관리툴로 유명하죠..
오렌지에 대한 자세한 내용은 지디넷 코리아의 "오라클DB 성능 관리 툴 「오렌지」" 기사를 참고하세요.

관심있으신분.. 무료랍니다.

 1월 오렌지 무료 교육 신청하세요.







1.
1. Shutdown the database
2. Move the datafile to its new location.
3. Do a "STARTUP MOUNT"
4. ALTER DATABASE RENAME FILE '/old/location' TO '/new/location';
5. ALTER DATABASE OPEN;


2.
--Create new undo tablespace:
SQL> create undo tablespace UNDOTBS02 datafile '/u03/app/oracle/oradata/ovpi/undo02.dbf' size 1000m;

--Set new tablespace as undo_tablespace:
SQL> alter system set undo_tablespace=undotbs02;

--Drop the old tablespace:
SQL> drop tablespace undotbs including contents;

When dropping the old tablespace, you may encounter an ORA-30013 error.
This essentially indicates that you must wait for any existing transactions using this tablespace to either commit or rollback before the tablespace can be dropped.

그럼 undo_retention 까지 기다려야 할까?
아니면 undo_retention은 무시되며 drop 될까?  아마 drop 되지 않을까.. 싶다..

http://www.orafaq.com/forum/t/63723/2/





아직 해보진 않았지만..

RE: How to modify a metric collection interval in Grid Control?

I think I found it.
It's not stored in the db at all it seems.
It uses xml files in the $AGENT_HOME/sysman/admin/default_collection.
I found the "database.xmlp" file which defined the 7 Day interval for
Tablespace Allocation.

Here's the entry in the file:

<!--
======================================================================
== Category: Tablespace Allocation
== DB Versions: pre-8 to 10gR1
== Fetchlet: SQL
======================================================================
-->
<CollectionItem NAME="tbspAllocation">
<ValidIf>
<CategoryProp NAME="VersionCategory"
CHOICES="pre8;8i;8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1"/>
</ValidIf>
<Schedule>
<IntervalSchedule INTERVAL="7" TIME_UNIT="Day"/>
</Schedule>
<MetricColl NAME="tbspAllocation" />
</CollectionItem>

ALTHOUGH, I updated this to "1" day, and reloaded the agent, Grid Control is
still showing "7" days under All Metrics for this target.
It appears I'm still missing something.





오라클은 많은 백그라운드프로세스를 갖고 있습니다.
버전이 올라갈 수록 점점 더 많은 백그라운드프로세스들이 등장하고 있습니다.
이 많은 백그라운드 프로세스 중 반드시 떠있어야만 하는 프로세스들은 어떤게 있을까요?
다시 말하자면, 백그라운드 프로세스 중 비정상적으로 죽을 경우 인스턴스까지 죽을 수 있는 프로세스는 어떤게 있을까요?

가장 쉽게 알수 있는 방법은.. 백그라운드 프로세스를 하나씩 죽여 보는 거죠.
제가 찾아본 바로는 메뉴얼에도 그러한 내용은 없으니까요..
(만약 메뉴얼에 그러한 내용이 있으면 .. 뭐.. 영어가 문제죠. ㅠㅠ)
그러나 이럴 경우 mandatory process가 아닐 경우에도 bug등에 의해 죽을 수 있으니 확실한 방법은 아닙니다.

그럼 어떤 방법이 있을까요?
백그라운드를 하나씩 죽여볼까.. 하다 곰곰히 생각을 해봤는데,
백그라운드 프로세스가 죽으면 ORA-XXXX라는 메세지를 반드시 뿌린다는게 생각 나더군요.
(물론 error detecting할 여유조차 없다면 에러도 안나겠지만.. )

그래서 oracle error code가 저장되어 있는 oraus.msg file을 열어봤습니다.
빙고..


CKPT, LGWR, DBWR, PMON, ARCH process 등은 "warm start instance"라고 나오는 군요.
그에 비해 SNP process는 PMON이 금방 띄운다고 하는 군요.

그럼 "warm start instance"는 무얼까요..
다음은 oracle forum의 내용입니다.

warm start instance

What kind of error message did You get? Depending on that we could figure out what exactly should be done in that particular case.
but warm start is actually clean shutdown and startup of oracle database. This activity which is called warm start is perfomed by SMON process upon startup of database - it takes cares about all incomplete transactions and recover them.





Read hat Linux (in vmware) to Windows XP FTP setting

 

2007. 10. 25

 

made by Deng.

 

윈도우 상에서 vmware 로 리눅스를 돌릴 때 윈도우와 리눅스 사이에 자료 교환 때문에 고생을 했던 기억이 있어 차후 그런 고생을 반복하지 않기 위하여 본 자료를 남긴다.

 본 자료는 저작권 같은거 없음으로 부담없이 펌질을 할 수 있음을 알리는 바이며 본인의 시스템에서는 아무 문제 없이 셋팅이 되었지만 리눅스 특성상 주체할 수 없는 시스템의 개성으로 인하여 동작이 되지 않는 경우도 있을 것 이라 예상됨으로 본인을 탓하지 않아 주었으면 하는 바램이다. ^^

 기 본적으로 리눅스 상에서 인터넷 접속이 가능 하다는 전제하에 진행을 했지만... 인터넷 접속이 안된 상태에도.. 셋팅만 잘하면 될 것 같은 느낌이... 글을 쓰고 있는 지금 불연 듯 든다.. -_-;; 그것은 나중에 시도해 볼 문제이며 지금은 기초적인 FTP 셋팅을 해볼것이다.

 그리고 본 자료에 문제점이 발생한다면 부담 없이 수정해 줄 것을 요청한다. ^^ 본인은 리눅스 초보이기 때문이다. 초보의 마음은 초보가 아는 법..!! 이제 맘편하게 리눅스와 윈도우를 함께 활용해 보자!


리눅스 상에서 FTP 서비스 활성화



1. ntsysv 실행


 

vsftpd 는 활성화 시키고, iptables 는 비활성화 시킨다.


2. adduser 로 사용자 추가


3. passwd 로 비밀번호 지정


4. ls /home 에서 사용자 추가 여부확인


5. cd /etc/xinet.d 로 들어감


6. iptable (방화벽) 서비스 종료


 

7. xinetd, network 재시작 (설정 저장)


8. ping 윈도우와 패킷 오가는지 확인(연결 상태 확인)


여기서 부터는 윈도우 설정


9. 윈도우키 + R 또는 시작 -> 실행


10. ping 테스트 (리눅스와의 통신 상태)


ping -t 192.168.174.200  -> IP는 리눅스의 IP


 

11. 알 FTP 실행


 

12. 이제 상단의 디렉토리에 원하는 자료는 넣고 리눅스 상에서 읽어 들일 수 있다.


 이 얼마나 간단한가... 자료 만드는데 불과 30분 정도 밖에 걸리지 않았다.. 그러나 이 방법을 찾기위해 얼마나 많은 블로그와 네이뇬을 돌아다녔던가... 정보는 공유되어야 한다!

 초보 리눅스 탈출을 위하여!



자세한 내용은 첨부파일에 올려 놨음을 알린다...
================================================================
뎅사마(east7503)님의 글


'Operation System' 카테고리의 다른 글

이것 저것 Unix 명령어들  (0) 2010.11.27
VMware 설정 관련 참고 POST들.  (1) 2010.01.12
Network 용어정리 2  (2) 2009.12.22
Network 용어정리 1  (0) 2009.12.22
Makefile 이해  (1) 2009.12.17

AWR을 보다 보니 낯선 enqueue 2개가 자주 보여 요거 좀 정리합니다.

RO-Multiple Object Reuse (fast object reuse)

RO enqueue는 "multi object reuse" enqueue로 알려져 있습니다. 이 Enqueue는 foreground process와 background process 간의 sync 하는데 사용되는 enqueue 입니다. Background는 주로 DBWR나 CKPT를 말합니다.

특별히 object drop이나 table truncate 할 때 많이 사용됩니다.

oracle database내에서 truncate나 drop이 발생하면 다음과 같은 내부 작업들이 수행됩니다.

1. foreground process는 먼저 "RO" enqueue를 "execlusive" mode로 요청합니다.
2. 다음은 instance에 작업을 요청하는 cross instance call이 발생되어, CI enqueue가 할당됩니다.
3. 각 instance의 CKPT는 CI call의 요청에 따라 DBWR에서 dirty buffer를 write하게하고 관련 buffer를
   invalidate 합니다.
4. DBWR가 write 작업을 끝내면 foreground process는 "RO" enqueue를 release 합니다.

사실상 이 enqueue 작업은 truncate/drop operation을 순차적으로 수행되기 때문에 자주 drop/truncate가 발생하면 "RO" enqueue contention이 발생할 수 있겠죠..

KO-Multiple Object Checkpoint (fast object checkpoint)

얼마전에 PDML 관련해 posting 한 내용 중 다음과 같은 글을 쓴적 있습니다.

"direct-path read가 발생하면 변경되었거나 disk에 반영되지 않은 데이터를 buffer cache에서 disk로 강제로 flush 한다. 그후 data를 direct path I/O로 읽는다."
Parallel Query Execution

oracle 10g R2이전엔 direct-path read가 발생하면 관련 segment가 저장된 tablespace를 대상으로 flush를 하였습니다. 그러나 oracle 10g R2이후엔 관련 object만 disk로 flush하게 바뀌었습니다.
tablespace 단위로 flush 할 경우 해당 tablespace에 많은 데이터가 저장되어 있거나 한 tablespace에 데이터를 몰아 넣었다면 엄청 불필요한 dirty buffer write가 발생할 수 있겠죠.

KO enqueue는 10g R2 부터 바뀐 이러한 동작에 발생하는 enqueue lock type 입니다. 즉 object에 대한 checkpoint 시 대기할 때 발생하는 enqueue lock입니다.


다음은 일반적인 Enqueue 성능을 확인하는 script 들 입니다.
Enqueue는 v$system_event  v$session_wait  v$enqueue_stat을 통해 각종 statistic 정보를 확인할 수 있습니다.

전체 database system 내의 wait event에 대한 wait 관련 정보

select EVENT,TOTAL_WAITS,TOTAL_TIMEOUTS,TIME_WAITED,AVERAGE_WAIT,WAIT_CLASS
from v$system_event
where wait_class not in ('Idle')
order by 4 desc
/

전체 enqueue lock에 대한 사용 정보
select * from v$enqueue_stat order by 7 desc
/


이 포스트는 다음의 문서를 참고했습니다.

http://ww.orafaq.com/usenet/comp.databases.oracle.server/2006/09/23/1586.htm
Note 286363.1 Truncate Takes A Long Time -- Waits on RO enqueue





5. protocol

TCP :
전송 제어 프로토콜, 곧 TCP(Transmission Control Protocol, 문화어: 전송조종규약)는 네트워크의 정보 전달을 통제하는 프로토콜이다. 인터넷을 이루는 핵심 프로토콜의 하나로서 인터넷 엔지니어링 테스크 포스(IETF, Internet Engineering Task Force)의 RFC 793에 기술되어 있다. TCP는 IP 위에서 동작하는 프로토콜로 흔히 TCP/IP로 표기한다. 데이터의 전달을 보증하고 보낸 순서대로 받게 해 준다.
 
UDP :
사 용자 데이터그램 프로토콜(UDP, User Datagram Protocol)은 인터넷 프로토콜 스위트의 주요 프로토콜 가운데 하나이다.1980년에 데이빗 리드가 설계하였고, 현재 IETF의 RFC 768로 표준으로 정의되어 있으며,TCP와 함께 데이터그램으로 알려진 단문 메시지를 교환하기 위해서 사용된다.UDP는 유니버설 데이터그램 프로토콜이라고 일컫기도 한다.
 
DCCP :
DCCP(Datagram Congestion Control Protocol)는 메시지 지향적인 전송계층 통신 프로토콜이다.
 
IP :
인 터넷 프로토콜(IP, Internet Protocol, 문화어: 호상망규약)은 송신 호스트와 수신 호스트가 패킷 교환 네트워크(패킷 스위칭 네트워크, Packet Switching Network)에서 정보를 주고받는 데 사용하는 정보 위주의 규약(프로토콜, Protocol)이며, OSI 네트워크 계층에서 호스트의 주소지정과 패킷 분할 및 조립 기능을 담당한다. 줄여서 아이피(IP)라고도 한다.
 
ICMP :
ICMP(Internet Control Message Protocol,인터넷 제어 메시지 프로토콜)는 호스트 서버와 인터넷 게이트웨이 사이에서 메시지를 제어하고 에러를 알려주는 프로토콜로서 RFC 792에 정의되어있다. ICMP는 IP 데이터그램을 사용하지만, 메시지는 TCP/IP 소프트웨어에 의해 처리되며 응용프로그램 사용자에게 직접 분명하게 보이지는 않는다. 일례로서, ping 명령어는 인터넷 접속을 테스트하기 위해 ICMP를 사용한다.
 
IGMP :
IGMP(Internet Group Management Protocol)는 인터넷 컴퓨터가 멀티캐스트 그룹을 인근의 라우터들에게 알리는 수단을 제공하는 인터넷 프로토콜이다. 멀티캐스팅은 인터넷상의 한 호스트 컴퓨터가 미리 지정된 다수의 다른 컴퓨터들에게 콘텐츠를 보낼 수 있도록 허용한다. 멀티캐스팅은 현장에서 이동용 컴퓨터 사용자들의 주소록을 수정하거나, 배포 목록에 맞추어 회사의 회보를 보내는 업무, 그리고 멀티캐스트 그룹 회원을 설정함으로써 수신 파장을 맞춘 청중들에게 스트리밍 매체의 고대역폭 프로그램을 방송하는 등과 같은 일에 사용될 수 있다.

IGMP는 OSI 참조 모델에서 네트웍 계층(Layer 3)의 일부이다.

ARP :
주소 결정 프로토콜(Address Resolution Protocol; ARP)은 네트워크 상에서 IP 주소를 물리적 네트워크 주소로 대응시키기 위해 사용되는 프로토콜이다. 여기서 물리적 네트워크 주소는 이더넷 또는 토큰링의 48 비트 네트워크 카드 주소를 뜻한다.

PARP :
IP 주소로 부터 맥 주소를 알아오는 것을 ARP(Address Resolution Protocol)라고 하며, 이와 반대로 IP호스트가 자신의 물리 네트워크 주소(MAC)는 알지만 IP주소를 모르는 경우, 서버로부터 IP주소를 요청하기 위해 Reverse Address Resolution Protocol(RARP)를 사용한다.

BGP :
BGP (Border Gateway Protocol)

BGP는 자율 시스템의 네트웍 내에서 게이트웨이 호스트들 간에 라우팅 정보를 교환하기 위한 프로토콜이다. BGP는 인터넷상의 게이트웨이 호스트들 간에 흔히 사용되는 프로토콜이다. 라우팅 테이블에는 이미 알고 있는 라우터들의 목록과, 접근할 수 있는 주소들, 그리고 최적의 경로를 선택하기 위해 각 라우터까지의 경로와 관련된 비용 정보가 담겨있다.
 
SNMP :
SNMP(Simple Network Management Protocol)는 네트워크 장비를 관리 감시하기 위한 목적으로 TCP/IP 상에 정의된 응용 계층 표준 프로토콜이다.
 
SMTP :
간 이 전자 우편 전송 프로토콜(Simple Mail Transfer Protocol, SMTP)는 인터넷에서 이메일을 보내고 받기 위해 이용되는 프로토콜이다. 사용하는 TCP 포트번호는 25번이다. 상대 서버를 지시하기 위해서 DNS의 MX레코드가 사용된다. RFC2821에 따라 규정되어 있다.

메일 서버간의 송수신뿐만 아니라, 메일 클라이언트에서 메일 서버로 메일을 보낼 때에도 사용되는 경우가 많다

 
HTTP :
HTTP(HyperText Transfer Protocol)는 WWW 상에서 정보를 주고 받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고 받는 데에 쓰인다. TCP와 UDP를 사용하며, 80번 포트를 사용한다. 1996년 버전 1.0, 그리고 1999년 1.1이 각각 발표되었으며, 현재 가장 널리 쓰이는 버전이 1.1이다.

HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다. 예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다. 이 정보가 모니터와 같은 출력 장치를 통해 사용자에게 보여지는 것이다.

DHCP :
동적 호스트 설정 통신 규약(Dynamic Host Configuration Protocol; DHCP, 動的-設定通信規約)은 호스트 IP 구성 관리를 단순화하는 IP 표준이다. 동적 호스트 설정 통신 규약 표준에서는 DHCP 서버를 사용하여 IP 주소 및 관련된 기타 구성 세부 정보를 네트워크의 DHCP 사용 클라이언트에게 동적으로 할당하는 방법을 제공한다.
 
6. 데이터 통신 방식
 
simplex :
단방향 통신(Simplex): 한쪽 방향으로만 전송할 수 있는 것으로 방송, 감시 카메라을 들 수 있다.
 
half duplex :
반이중 통신(Half Duplex): 한 쪽이 송신하는 동안 다른 쪽에서 수신하는 통신 방식으로, 전송 방향을 교체한다. 마스터 슬레이브 방식의 센서 네트워크가 대표적이다.
 
full duplex :
전이중 통신(Full Duplex): 두 대의 단말기가 데이터를 송수신하기 위해 동시에 각각 독립된 회선을 사용하는 통신 방식이다. 대표적으로 전화망, 고속 데이터 통신을 들 수 있다.
 
gsm :
GSM[지 에스엠]은 유럽 및 기타 지역에서 광범위하게 사용되는 디지털 이동전화 시스템이다. GSM은 시분할 다중접속(TDMA)의 변종으로서, 이것은 TDMA, CDMA와 함께 가장 널리 사용되는 3개의 디지털 무선전화기술 중 하나이다. GSM은 데이터를 디지털화하고 압축한 다음, 그것을 두 개의 다른 사용자 데이터와 함께 한 채널을 통해 보내는데, 각각의 데이터는 나름대로의 고유한 시간대에 보내진다. GSM은 900 MHz와 1800 MHz 주파수 대역에서 모두 동작할 수 있다.
 
pdc :
PDC 는 로컬 도메인의 보안을 관리하는 윈도우NT의 서비스이다. 모든 도메인은 사용자 이름과 패스워드, 그리고 사용 권한 등의 데이터베이스를 포함하는 하나의 PDC를 가진다. 윈도우NT 3.51과 4.0에는 PDC와 BDC라는 두 가지 종류의 도메인 콘트롤러가 있다. PDC는 사본에 대한 읽기/쓰기 권한을 가지고 있으며, BDC는 오직 사본을 읽을 수만 있다.
 
fdma :
FDMA (frequency division multiple access) ; 주파수분할 다중접속

FDMA[에프디 에메이]는 무선 셀룰러 통신에 할당된 주파수 대역을 30개의 채널로 분할한 것이며, 각 채널은 음성 대화나 디지털 데이터를 옮기는 서비스에 사용될 수 있다. FDMA는 북미에 가장 광범위하게 설치된 셀룰러폰 시스템인 아날로그 AMPS의 기본 기술이다. FDMA에서는 각 채널이 한번에 오직 단 한 명의 사용자에게 할당될 수 있다. FDMA는 TACS (Total Access Communication System)에도 역시 사용될 수 있다.

tdma :
TDMA (time division multiple access) ; 시분할 다중접속

TDMA[티디엠에이]는 디지털 셀룰러폰 통신에 사용되는 기술로서, 전송할 수 있는 데이터 량을 늘리기 위해 각 셀룰러 채널을 3개의 시간대로 나누기 위한 기술이다.

TDMA는 D-AMPS (Digital-American Mobile Phone Service), GSM 및 PDC (Personal Digital Cellular)에 의해 사용된다. 그러나, 이러한 각 시스템들은 서로 간에 다소 다르고 호환성이 없도록 TDMA를 구현하였다. TDMA의 대안으로 제시되고 있는 다중화 개념으로, 코드분할 다중접속 즉 CDMA가 있는데, 이는 주어진 서비스에 할당된 전체 주파수 범위를 가지고 모든 사용자들의 정보를 광범위하게 동시에 다중화한다.
 
cdma :
CDMA (code-division multiple access) ; 코드분할 다중접속

CDMA[씨디 에메이]는 세 가지 무선전화 송신기술 중 하나로서 GSM 또는 그와 비슷한 TDMA와는 전혀 다른 접근방식이다. CDMA는 데이터를 디지털화한 다음 그것을 가용한 전체 대역폭에 걸쳐 확산시킨다. 여러 통화가 하나의 채널에 겹쳐지게 되며, 각 통화는 차례를 나타내는 고유한 코드가 부여된다.
 
wcdma :
WCDMA (wideband CDMA)

WCDMA는 TDMA 대신에 CDMA를 사용함으로써 GSM 시스템의 데이터 전송속도를 높이기 위한 3G 기술이다. WCDMA는 ITU의 3G 규격에 있는 DS 모드가 되어, 1배속 멀티캐리어 모드 (1x MC)과 3배속 멀티캐리어 모드 (3x MC)를 포함한다. 1x MC (이전에는 cdma2000으로 불렸었다)와 3x MC는 이미 CDMA (cdmaOne)를 사용하는 통신회사들을 위해 3G로 업그레이드할 수 있는 경로를 이룬다.

wdma :
Wavelength-Division Multiple Access (WDMA) is a channel access method based on wavelength-division multiplexing.

'Operation System' 카테고리의 다른 글

이것 저것 Unix 명령어들  (0) 2010.11.27
VMware 설정 관련 참고 POST들.  (1) 2010.01.12
Read hat Linux (in vmware) to Windows XP FTP setting  (0) 2009.12.31
Network 용어정리 1  (0) 2009.12.22
Makefile 이해  (1) 2009.12.17

1. 네트워크 종류


- 거리에 따라
PAN :
수미터이내의 무선 네트워크 (적외선통신, 블루투스), 컴퓨터와 PDA,PDA와 PDA와 같이 수미터 이내의 컴퓨터 간의 통신이 가능해졌다.

LAN :
소규모 지역(반경 1km 이내)의 통신기기의 상호연결 가능하게 하는 통신 네트워크, 집, 사무실,빌딩,공장등과 같이 제한된 지역에서 컴퓨터를 연결하여 쓰
는 대부분의 네트워크가 여기에 포함된다.

MAN :
도시내의 또는 도시간을 연결하는 네트워크, 대도시를 포괄하는 네트워크로 통신망의 총 거리는 수백Km에 달하여 그 용도상 고속의 통신속도를 지원한다.

WAN:
도시 범위를 벗어난 지역간의 네트워크, 지방과 지방, 국가와 국가 또는 랜과 랜을 연결하는 네트워크, LAN에 비해 넓은 지역인 1Km이상인 지역을 대상을
의미하며 공중망으로도 불림. 지사간 데이터 통신가능.

- 전송방식에 따라.

토큰링 근거리 통신망 :
토큰링 근거리통신망(LAN) 기술은 OSI 모델의 데이터 링크 계층에서 쓰이는 근거리통신망 프로토콜이다. 1980년대 초반 IBM에 의해 개발되었고 IEEE 802.5로 표준화되었다. 당시에는 매우 성공적이었으나 1990년대 초반 이더넷이 개발되면서 잘 쓰이지 않게 되었다. IBM은 토큰링이 이더넷보다 빠르고 안정적이라는 주장을 펼쳤지만 성공적이지 못했다. 더이상 IBM은 토큰링을 사용하거나 홍보하지 않는다.

초기인 1985년의 토큰링 네트워크는 전송속도가 4Mbps였지만, 1989년에 IBM이 16Mbps의 토큰링 제품을 생산하였으며, 802.5 기준도 이를 지원하도록 확장되었다.

토큰링 네트워크는 여러 스테이션(컴퓨터)들이 하나의 링(고리)에 이어져 형성되며, 데이터는 항상 한 방향으로만 흐른다. 정확히 말하면 데이터가 한 컴퓨터에서 다음 컴퓨터로 순서대로 전달된다. 각각의 스테이션은 바로 이전의 스테이션이 전달해준 비트를 그대로 다음 스테이션에 전달해주는 역할을 수행한다.

이더넷:
이더넷(Ethernet)은 LAN을 위해 개발된 컴퓨터 네트워크 기술로, '이더넷'이라는 이름은 빛의 매질로 여겨졌던 에테르(ether)에서 유래되었다. 이더넷은 OSI 모델의 물리 계층에서 신호와 배선, 데이터 링크 계층에서 MAC(media access control) 패킷과 프로토콜의 형식을 정의한다. 이더넷 기술은 대부분 IEEE 802.3 규약으로 표준화되었다. 현재 가장 널리 사용되고 있으며, 토큰 링, FDDI 등의 다른 표준을 대부분 대체했다.
 
TCP/IP:
인 터넷 프로토콜 스위트(Internet Protocol Suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약(프로토콜)의 모음이다. 인터넷 프로토콜 스위트 중 TCP와 IP가 가장 많이 쓰이기 때문에 TCP/IP 프로토콜 스위트라고도 불린다.
 
2. 무선 인터넷 기술
Wi-Fi :
Wi-Fi(와이파이)는 홈 네트워킹, 휴대전화, 비디오 게임 등에 쓰이는 유명한 무선 기술의 상표 이름이다. 와이파이는 현대의 개인용 컴퓨터 운영 체제, 고급형 게임기, 프린터, 다른 주변 기기에서 지원된다.
 
HSDPA :
HSDPA는 High Speed Downlink Packet Access(고속하향패킷접속)의 머릿 글자를 딴 것으로, WCDMA를 확장한 고속패킷통신규격이다.

3세대 비동기식 이동통신기술 표준화 기구인 3GPP(3rd Generation Partnership Project)가 2002년 3월 발표한 Release 5의 핵심기술인 고속데이터패킷접속규격으로 W-CDMA 표준에서 패킷 기반의 데이터 서비스를 가리킨다. 이 기술을 사용하면 W-CDMA보다 5배 이상 빠른 속도로 통신할 수 있으며 다운로드 속도는 최대 14.4Mbps이다. 기지국에 대한 별도의 투자 없이 W-CDMA 시스템을 개량하는 방식으로 서비스를 제공할 수 있다는 장점이 있다.

WiMAX :
와이맥스(WiMAX)는 Worldwide Interoperability for Microwave Access의 준말로, 점대점 연결에서 완전한 휴대형 접근에 이르기까지 다양한 방식으로 먼 거리를 걸쳐 무선으로 자료를 제공하는 것을 목표로 하는 전자 통신 기술이다. WirelessMAN이라고도 불리는 IEEE 802.16 표준에 기반을 두고 있다. "와이맥스"라는 이름은 표준의 상호 운용성과 순응을 제고시키기 위해 와이맥스 포럼이 2001년 6월에 만든 것이다. 이 포럼은 와이맥스를 "케이블, DSL의 대안으로서 라스트 마일(last mile)의 무선 광역 접근 전달을 가능하게 하는 표준 기반의 기술"로 설명하고 있다.
 
WiBro :
Wibro는 Wireless Broadband Internet의 약자이다. 우리나라 말로는 휴대용 초고속 인터넷이라고 한다. 말 그대로 Wibro는 우리가 단말기를 휴대하고 이동하면서 계속 인터넷을 사용할 수 있는 기술을 의미한다. Wibro는 시속 60Km 이하로 이동하면서 우리가 현재 가정에서 많이 사용하고 있는 유선 ADSL 정도의 속도로 인터넷을 사용할 수 있게 해준다.

 
3. 네트워크 장치

Repeater :
리피터(repeater, 문화어: 반복기)는 신호를 받아 더 높은 수준에 더 높은 힘으로 방해가 되는 곳의 반대 쪽으로 재전송함으로써 신호가 더 먼 거리에 다다를 수 있게 도와 주는 전자 기기이다. 중계기(中繼器)라고도 부른다.
 
허브 :
네트워크를 확장시켜 주는 장비로 LAN을 구성하는 장비로 사용된다. 여러 대의 컴퓨터가 연결되면 속도를 나누어 사용해서 속도 저하 현상이 발생한다. 내
부 테트워크에서 위치하여 네트워크가 확장될수 있도록 해주며 전선연결시 멀티탬과 같은 역할이라보면 된다. 수많은 컴퓨터간의 내부 통신 연결을 가능하게 해
주며 커넥터를 연결할 수 있는 여러개의 네트워크 포트를 가지고 있다.

Bridge :
네트워크 브리지(network bridge, 문화어: 망다리)는 OSI 모델의 데이터 링크 계층에 있는 여러 개의 네트워크 세그먼트를 연결해 준다. 레이어 2 스위치는 브리지라는 용어와 같은 뜻으로 간헐적으로 사용된다. 브리지는 물리 계층에 있는 네트워크 세그먼트를 연결해 주는 장치인 리피터, 네트워크 허브와 비슷하지만 브리지를 사용하면 단순히 주변 네트워크 세그먼트로 다시 전송한다기 보다는 특정 네트워크로부터 오는 트래픽을 관리하게 된다. 이더넷 망에서 "브리지"라는 용어는 공식적으로 IEEE 802.1D 표준을 따르는 장치를 뜻한다.
 
스위치:
네트워크를 확장시켜 주는 장비로 LAN을 구성하는 장비로 사용된다.

라우터 : LAN구간과 인터넷을 연결하는데 주로 사용되며 성능이 좋은 스위치의 일종이다. 서로 성격이 다른 네트워크 랜구간과 다른 랜구간 혹은 랜구간과 외부
인터넷간의 연결을 하기 위해 사용되며 다양한 네트워크 제어기능을 가지고 있는 고성능 스위치.

Gateway :
프로토콜 변환기의 일종으로 볼 수가 있다. LAN과 WAN을 접속하는 장치와 같이 다른 통신망을 상호 접속하는 기기를 지칭하는 경우도 있다.

4. Servers

Webserver :
웹 서버(Web Server)는 HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전송해주는 서비스 프로그램을 말한다. 웹 서버 소프트웨어를 구동하는 하드웨어도 웹 서버라고 해서 혼돈하는 경우가 간혹 있다.
 
fileserver :
컴퓨팅 환경에서 파일 서버(file server)는 워크스테이션이 접근할 수 있는 컴퓨터 파일(문서, 사운드 파일, 사진, 영화, 그림, 데이터베이스 등)을 공유하고 있는 기억 공간의 위치를 제공하는 것이 주 목적을 가진 네트워크에 추가된 컴퓨터를 말한다. "서버"(server)라는 용어는 클라이언트 서버 구조로 된 기기의 역할을 강조하며 여기서 클라이언트는 이 기억 공간을 사용하는 워크스테이션을 말한다. 파일 서버는 일반적으로 어떠한 계산도 수행하지 않으며 클라이언트의 중간에 어떠한 프로그램도 실행하지 않는다. 데이터의 빠른 저장과 워크스테이션이 중대한 계산을 제공하는 데이터 수신이 파일 서버의 주된 설계 목적이다.
 
proxy server :
프 록시 서버(proxy server)는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 네트워크 서비스이다. 서버와 클라이언트 사이에서 중계기로서 대리로 통신을 수행하는 기능을 가리켜 '프록시', 그 중계 기능을 하는 것을 프록시 서버라고 부른다.

프록시 서버는 프록시 서버에 요청된 내용들을 캐시를 이용하여 저장해 둔다. 이렇게 캐시를 해 두고 난 후에, 캐시 안에 있는 정보를 요구하는 요청에 대해서는 원격 서버에 접속하여 데이터를 가져올 필요가 없게 됨으로써 전송 시간을 절약할 수 있게 됨과 동시에 불필요하게 외부와의 연결을 하지 않아도 된다는 장점을 갖게 된다. 또한 외부와의 트래픽을 줄이게 됨으로써 네트워크 병목 현상을 방지하는 효과도 얻을 수 있게 된다.


was :
웹 애플리케이션 서버(Web Application Server, 약자 WAS)는 인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어(소프트웨어 엔진)이다. 웹 애플리케이션 서버는 동적 서버 콘텐츠를 수행하는 것으로 일반적인 웹 서버와 구별이 되며, 주로 데이터베이스 서버와 같이 수행이 된다. 한국에서는 일반적으로 "WAS" 또는 "WAS S/W"로 통칭하고 있으며 공공기관에서는 "웹 응용서버"로 사용되고, 영어권에서는 "Application Server"로 불린다.

c/s :
클라이언트 서버 시스템(Client/Server System, 약칭 C/S 시스템)은 클라이언트와 서버로 나뉘는 네트워크 아키텍처를 나타낸다. 웹 시스템도 확장된 '클라이언트 서버 시스템'으로 분류되나, 일반적으로는 클라이언트 서버 시스템이라고 하면 웹 시스템이 나오기 이전의, 사용자 PC에는 클라이언트가 설치되어 화면을 처리하고 서버에서는 자료를 처리하는 시스템을 일컫는다.
 
DNS :
DNS(도메인 이름 서비스:Domain Name System)는 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다. 인터넷 도메인 주소 체계로서 TCP/IP의 응용에서, www.example.com과 같은 주 컴퓨터의 도메인 이름을 192.168.1.0과 같은 IP 주소로 변환하고 라우팅 정보를 제공하는 분산형 데이터베이스 시스템이다.


'Operation System' 카테고리의 다른 글

이것 저것 Unix 명령어들  (0) 2010.11.27
VMware 설정 관련 참고 POST들.  (1) 2010.01.12
Read hat Linux (in vmware) to Windows XP FTP setting  (0) 2009.12.31
Network 용어정리 2  (2) 2009.12.22
Makefile 이해  (1) 2009.12.17

Oracle Data Type에 대한 Technical iSeminar 입니다.


참고 : 첨부된 자료는 Oracle의 technical iSeminar 자료 입니다. 


1. Overview
 - Data Type 개요
 - Data Type 종류
 - Data Type 이해의 중요성

2. Scalar Data Type
 - CHAR/NCHAR
 - VARCHAR2/NVARCHAR2
 - CLOB/NCLOB
 - LONG
 - NUMBER
 - DATE
 - TIMESTAMP
 - INTERVAL
 - BLOB/BFILE
 - RAW/ LONG RAW
 - ROWID/UROWID

3. User Defined Data Type
 - OBJECT TYPE
 - VARRAY
 - NESTED TABLE
 - REF

4. 데이터 타입 선정 지침
 - 문자열 관련 일반지침
 - 숫자/날짜 관련 일반 지침
 - LONG/ LONG RAW 제약사항
 - BLOB/ CLOB 제약사항
 
5. Reference

+ Recent posts