posted by 구름너머 2013. 4. 9. 17:22

잠자는 휴면자동차보험금 137억원, "주인 찾아가세요"

 

 
【서울=뉴시스】박기주 기자 = 가입자가 찾아가지 않아 보험사 금고속에 잠자고 있는 자동차보험 휴면보험금 137억원이 주인을 찾기 쉬워질 것으로 보인다.

금융감독원과 보험개발원은 오는 10일부터 자동차보험 계약자가 직접 본인의 미지급된 휴면보험금 여부 및 금액을 간편하게 확인·청구할 수 있는 '자동차보험 휴면보험금 조회서비스'를 시작한다고 9일 밝혔다.

휴면보험금이란 가입자가 자동차보험금 지급사유를 모르고 청구하지 않거나 연락이 두절되는 경우 등으로 상당기간(2년) 동안 지급되지 못한 보험금으로, 보험회사가 보관하게 된다.

지난해 6월말 기준 자동차보험 휴면보험금 미지급 잔액은 총 136억8000만원에 달하는 것으로 나타났다.

이에 금감원과 보험업계가 휴면보험금을 소비자에게 찾아주고자 시스템을 구축한 것.

이용방법은 보험개발원 홈페이지(www.kidi.or.kr)'자동차보험 과납보험료·휴면보험금 조회서비스(AIPIS)'접속한 후 본인의 개인정보를 입력하면 된다.

휴면보험금이 확인되는 경우 결과화면에 기재된 해당보험사의 보상센터 전화번호로 연락해 보험금 지급을 청구하면 된다.

이 서비스에서는 소멸시효(2년)가 지난 휴면보험금 뿐만 아니라 소멸시효가 완료되지 않았더라도 지급처와 지급액이 확정된 미지급 보험금도 조회가 가능하다.

보험개발원 관계자는 "피해자가 휴면보험금을 능동적으로 찾아갈 수 있도록 함으로써 향후 보험금 지급누락을 방지할 수 있고, 소비자 권익보호에 크게 기여할 것으로 기대된다"고 설명했다.

kjpark@newsis.com
posted by 구름너머 2013. 4. 9. 11:37

19일 0시부터 '심야전용 시내버스' 운행

강서~중랑(N26), 은평~송파(N37)구간 2개 노선



(서울=뉴스1) 장은지 기자= 서울시는 19일부터 강서~중랑(N26), 은평~송파(N37)구간을 운행하는 '심야전용 시내버스'를 운행한다.


시는 버스·전철이 끊기는 시간부터 첫차가 다니는 새벽까지의 대중교통 공백을 매우기 위해 0시~05시 운행되는 '심야전용 시내버스'의 2개 노선을 신설, 3개월 간 시범 운행한다고 9일 밝혔다.


N26번 노선은 강서차고지~홍대~신총~종로~청량리~망우로~중랑차고지며, N37번 노선은 진관차고지~서대문~종로~강남역~대치동~가락시장~송파차고지다.


노선번호 중 N은 심야(Late Night)를 뜻하며, N 다음의 숫자는 출발 및 도착 권역을 의미한다. N26번은 2권역(중랑구)에서 6권역(강서구)간, N37번은 3권역(송파구)에서 7권역(은평구)간을 운행하는 노선을 의미한다.


◇요금은 카드기준 1850원, 심야 유동인구 많은 홍대․종로․강남역 등 경유


요금은 카드 기준 1850원이다. 시범운행기간인 3개월동안은 일반시내버스 요금과 같은 1050원을 적용한다.


시범 운행되는 2개 노선은 심야시간대 유동인구가 많은 홍대와 종로, 강남역 등을 경유하며, 노선별 총 6대씩 운행된다.


양쪽 차고지에서 각각 3대씩 35~40분 배차간격으로 0시에 동시 출발하며, 4시 55분경 각 차고지에 도착한 후 운행이 종료된다.


◇안전운행위해 과속방지장치 장착된 차량 투입…심야버스 운행 전업기사 별도 채용


아울러 시는 시민들이 야간에 심야버스를 멀리서도 잘 알아 볼 수 있도록 전면에 LED안내판을 부착하고, 안전운행을 위해 모두 과속방지장치(70km/h 이하)가 장착된 차량으로 운행한다.


또 심야에만 운행된다는 특수성을 고려하여 낮 시간대에 타 업무에 종사해 야간운행을 하는데 지장이 없도록 심야버스 운행만을 전업으로 하는 조건으로 운수종사자를 별도 채용했다.


운수종사자가 취객 등으로부터 피해를 입지 않고 버스를 안전하게 운행할 수 있도록 격벽이 설치된 차량을 우선 투입하고 아직 설치가 되지 않은 차량에 대해서도 격벽을 설치해 나갈 계획이다.


윤준병 서울시 도시교통본부장은 "교통 취약시간대인 심야에 이동하는 시민을 위해 심야전용버스를 도입했다"며 "시범운행 모니터링 결과를 바탕으로 향후 적합한 노선을 선정해 점차 확대해 나갈 계획"이라고 말했다.


문의 서울시 도시교통본부 버스정책과. (02)2133-2283.

posted by 구름너머 2013. 4. 8. 10:03

택시에 깜빡 놓고 내린 물건 쉽게 찾는 비결


(자료사진)

서울시, 카드결제 등 추천…작년 분실물 접수 1천255건

(서울=연합뉴스) 이정현 기자 = 춘곤증에 택시에서 깜빡 졸다 허겁지겁 내리고 보니 소지품이 없어졌다면?

서울시가 이처럼 택시에 물건을 두고 내렸을 때 쉽게 찾는 방법 5가지를 8일 소개했다.

가장 손쉬운 방법은 요금을 카드로 결제하는 것. 카드로 결제하면 카드 회사에 결제 기록이 남기 때문에 카드회사 콜센터로 문의하면 자신이 탔던 택시를 찾을 수 있다.

결제 후 영수증을 받는 습관을 들이는 것도 좋다. 영수증에는 택시 사업자의 전화번호가 기재돼 있어 물건을 빨리 찾을 수 있다.

법인택시는 업체 사무실로 전화해 자신이 탔던 택시 차량번호와 시각을 알려주면 분실물이 어딨는지 안내해주며, 개인택시는 영수증에 사업자 휴대전화 번호가 있어 바로 연락할 수 있다.

만약 영수증 받는 것을 깜빡했다면 다산콜센터(☎120)로 전화하면 된다. 차량번호를 안다면 콜센터에서 차량을 조회해 연락처를 알려준다. 모른다면 '대중교통 통합분실물센터'에 물건이 등록됐는지 확인해준다.

택시에 타서 출발 전 단말기에 카드를 태그해 미리 승인을 받는 '카드 선승인제'도 유용하다.

카드 선승인을 하면 카드회사에 기록이 남아 바로 조회할 수 있을 뿐만 아니라 차량 정보도 기록되는 만큼 택시기사가 물건을 자진반납할 가능성이 커진다.

브랜드콜택시를 이용해도 물건을 두고 내린 사실을 안 즉시 콜센터로 전화해 내가 탔던 택시를 찾을 수 있다.

지난해 택시 승객이 물건을 두고 내려 유실물센터에 접수된 분실물 접수건수는 총 1천255건으로 이 중 64.4%가 주인을 찾았다고 시는 설명했다.

택시에 두고 내리는 물건 가운데 휴대전화·노트북 등 전자제품이 759건(60%)으로 가장 많았고 지갑(183건), 가방(99건), 옷(37건) 등이 뒤를 이었다.

법인택시 중 습득물 접수건수가 가장 많은 업체는 대한상운으로 총 551건이 접수돼 327건(59.3%)이 주인에게 반환됐다. 평안운수(93.2%)·삼익택시(85.3%)·경서운수(82.1%) 등은 반환율이 높은 편인 것으로 나타났다.

임동국 시 택시물류과장은 "카드결제는 분실물을 찾는데도 유용하고 기사들의 자진 반환율을 높이는 데도 도움이 되니 많이 이용해달라"고 당부했다.

lisa@yna.co.kr

'좋은생각 좋은글방' 카테고리의 다른 글

아버지란?  (0) 2013.04.24
19일 0시부터 '심야전용 시내버스' 운행  (0) 2013.04.09
라푼젤 OST  (0) 2012.04.20
치킨 먹지 말자  (0) 2012.01.03
입냄새 제거  (0) 2011.12.30
posted by 구름너머 2013. 4. 8. 09:50

1. 설 명
지정된 버퍼의 크기보다 큰 데이터를 저장함으로써 실행 시 오류를 발생시키는 취약성을 말한다

2. 발생원인
▪ 외부로부터 입력된 데이터(사용자 입력, 홖경변수, Command-line 파라미터, 파읷 등)를 버퍼에 곧바로 입력할 경우
▪ 입력값을 큰 버퍼에서 작은 버퍼로 복사할 경우

3. 영향도
▪ 프로그램이 버퍼 오버플로우를 내재하고 있을 경우, 해커는 이 공격을 이용하여 자싞이 원하는 실행코드를 수행할 수 있고, 이 취약점을 이용해 쉘 코드를 실행함으로써 원격에서 Shell을 얻을 수 있게 된다.
▪ 웹 서비스나 웹 서버 자체에 심각한 영향을 초래할 수도 있으며, telnet과 같은 원격 접속 프로그램에 적용된다면, 암호가 틀려도 접속이 가능하게 되는 현상이 발생할 수 있다

4. 조치방법
▪ 입력 값에 대한 검증 (범위 및 유효성 검사)
▪ 경계값 체크를 하는 적젃한 함수 사용 (strncpy(), strncat(), snprintf(), fgets() 등)
▪ 웹 서버와 웹 애플리케이션 서버 제품굮 혹은 읶터넷 홖경 상에서 사용되는 제품들에 대해 최싞의 버그 리포트를 지속적으로 참고하여, 해당 제품굮의 최싞 패치를 적용하여야 한다.

5.코드 예

아래는 Pro*C에서의 예입니다.

취약한 함수 사용 예 ====> 안전한 함수 사용 예

--------------------------------------------------------------------------
void func(char *str) {
char buffer[256];

strcpy()

return;
}

void func(char *str) {
char buffer[256];
strcpy(buffer, str);
return;
}
--------------------------------------------------------------------------

void func(char *str) {
char buffer[256];
strcat(buffer, str);
return;
}

void func(char *str) {
char buffer[256];
strncat(buffer, str, sizeof(buffer)-1);
return;
}

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

void func(char *str) {
char buffer[256];
sprintf(buffer, "%s", str);
return;
}

void func(char *str) {
char buffer[256];
if(snprintf(target, sizeof(target)-1, "%s", string) > sizeof(target)-1)
/*....*/
return;
}

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

void func(char *str) {
char buffer[256];
gets(buffer);
return;
}

void func(char *str) {
char buffer[256];
fgets(buffer, sizeof(buffer)-1, stdin);
return;
}

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

* scanf() ,sscanf(),fscanf() *

void func() {
char buffer[256];
int num;
num = fscanf(stdio, "%s", buffer);
return;
}

void func() {
char buffer[256];
int num;
num = fscanf(stdio, "%255s", buffer);
return;
}

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

'UNIX' 카테고리의 다른 글

cp 파일복사  (0) 2013.06.07
Shared Memory vs Semaphore  (0) 2013.04.26
wc cat awk 의 조화  (0) 2013.02.28
UNIX 1회성 작업 예약하기 : at  (0) 2013.02.28
보안 & 트랙킹  (0) 2012.12.27
posted by 구름너머 2013. 4. 4. 10:48

언제 써먹게 될지 모르지만 정리해봅니다.

관련지식 : LTRIM, START WITH CONNECT BY, SYS_CONNECT_BY_PATH, CONNECT_BY_ROOT

10g이상에서는 바로 CONNECT_BY_ROOT로 구할 수 있는가 봅니다.

9i에서 사용시 참고하면 될듯합니다.

start with절에 지정한 필드가 계층적으로 펼쳐지는 것이므로 여기서 해당 필드 사이즈 만큼 substring하면 됩니다.

ltrim은 첫문자인 '/' 을 없애주는 기능

/* SYS_CONNECT_BY_PATH 를 이용하여 자른다.. ^^&--^^ */
SELECT  LEVEL,
             SUBSTR(LTRIM(SYS_CONNECT_BY_PATH(HOLIDAY_START_DATE, '/'),'/'),1,8)  AS ROOT_ID , --holiday_start_date필드길이만큼 자른다. 1,8
             LTRIM(SYS_CONNECT_BY_PATH(HOLIDAY_START_DATE, '/'),'/')  AS ROOT_PATH , --전체 계층구조를 보여준다.
             HOLIDAY_START_DATE, NEXT_DATE
FROM      (
                SELECT HOLIDAY_START_DATE,
                        TO_CHAR(TO_DATE(HOLIDAY_START_DATE,'YYYYMMDD')+1,'YYYYMMDD') AS NEXT_DATE
                FROM   TB_BUPAWEEKDAY
                WHERE HOLIDAY_START_DATE LIKE '2013%'
                )
START WITH HOLIDAY_START_DATE  LIKE '201309%'  
CONNECT BY PRIOR   NEXT_DATE = HOLIDAY_START_DATE ;

LEVEL ROOT_ID ROOT_PATH HOLIDAY_START_DATE NEXT_DATE
1 20130901 20130901 20130901 20130902 
1 20130907 20130907 20130907 20130908 
2 20130907 20130907/20130908 20130908 20130909 
1 20130908 20130908 20130908 20130909 
1 20130914 20130914 20130914 20130915 
2 20130914 20130914/20130915 20130915 20130916 
1 20130915 20130915 20130915 20130916 
20130918 20130918 20130918 20130919 
20130918 20130918/20130919 20130919 20130920 
20130918 20130918/20130919/20130920 20130920 20130921 
20130918 20130918/20130919/20130920/20130921 20130921 20130922 
20130918 20130918/20130919/20130920/20130921/20130922 20130922 20130923 
1 20130919 20130919 20130919 20130920 
2 20130919 20130919/20130920 20130920 20130921 
3 20130919 20130919/20130920/20130921 20130921 20130922 
4 20130919 20130919/20130920/20130921/20130922 20130922 20130923 
1 20130920 20130920 20130920 20130921 
2 20130920 20130920/20130921 20130921 20130922 
3 20130920 20130920/20130921/20130922 20130922 20130923 
1 20130921 20130921 20130921 20130922 
2 20130921 20130921/20130922 20130922 20130923 
1 20130922 20130922 20130922 20130923 
1 20130928 20130928 20130928 20130929 
2 20130928 20130928/20130929 20130929 20130930 
1 20130929 20130929 20130929 20130930 

참고한 URL:

1. http://www.oracleclub.com/lecture/2223

2. http://www.oracleclub.com/lecture/2250

3. http://blog.naver.com/swordsman93?Redirect=Log&logNo=33405532

 

'ORACLE' 카테고리의 다른 글

오라클 파라메터 조회  (0) 2013.12.28
rawtohex 와 chr 사용  (0) 2013.12.20
LTRIM의 재발견  (0) 2013.04.04
28일 수업  (0) 2013.03.28
MATERIALIZED VIEW 생성  (0) 2013.03.28
posted by 구름너머 2013. 4. 4. 10:30

SELECT LTRIM('xyxXxyLAST WORD','xy') "LTRIM example"
   FROM DUAL;

LTRIM example
------------
XxyLAST WORD

 

xy패턴의 문자열을 차례로 왼쪽부터 찾아서 하나씩 지우게 되므로

첫번째 문자 x를 지우고 다음 y를 지우고 그 다음 x를 지우고 그 다음 y를 찾았으나

없으므로 그대로 리턴한다.  얼핏보면 'xXxyLAST WORD' 이 될듯 하지만 처리방식이 문자 하나씩 찾는 방식이다.

다음예를 보자...

SELECT LTRIM('abcabcabkabcABxcXabAbabAAbb','abc') as aa
from dual

AA
kabcABxcXabAbabAAbb 

 

 

LTRIM

Syntax

ltrim::=

Text description of functions164.gif follows
Text description of ltrim


Purpose

LTRIM removes characters from the left of char, with all the leftmost characters that appear in set removed; set defaults to a single blank. If char is a character literal, then you must enclose it in single quotes. Oracle begins scanning char from its first character and removes all characters that appear in set until reaching a character not in set and then returns the result.

Both char and set can be any of the datatypes CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB. The string returned is of VARCHAR2 datatype and is in the same character set as char.

Examples

The following example trims all of the left-most x's and y's from a string:

SELECT LTRIM('xyxXxyLAST WORD','xy') "LTRIM example"
   FROM DUAL;

LTRIM example
------------
XxyLAST WORD

'ORACLE' 카테고리의 다른 글

rawtohex 와 chr 사용  (0) 2013.12.20
connect by [Oracle 9i 에서 10g CONNECT_BY_ROOT 써먹기]  (0) 2013.04.04
28일 수업  (0) 2013.03.28
MATERIALIZED VIEW 생성  (0) 2013.03.28
trace and mview  (0) 2013.03.28
posted by 구름너머 2013. 3. 28. 22:16

cd C:\app\owner\diag\rdbms\orcl\orcl\trace
sqlplus scott/oracle
set linesize 132
set timing on
set pages 3000
alter session set tracefile_identifier='test28';
alter session set sql_trace=true;

select a.empno, a.ename, b.dname
from big_emp1 a, big_dept1 b
where a.deptno = b.deptno;

alter session set sql_trace=false;

C:\app\owner\diag\rdbms\orcl\orcl\trace>tkprof orcl_ora_1220_test28.trc test28.txt sys=no

 

------------------------------
SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

desc dba_tablespaces;
select tablespace_name, retention from dba_tablespaces;
alter tablespace undotbs1 retention guarantee;

 

 

create materialized view emp_sumsal
build immediate refresh complete on commit
enable query rewrite
as
select sum(a.sal) as sum_sal, a.deptno
from emp a, dept b
where a.deptno = b.deptno
group by a.deptno;

select * from all_objects where object_name = 'EMP_SUMSAL';

drop materialized view emp_sumsal;

 

create materialized view emp_sumsal
build deferred  -- 추후 data  생성
as
select sum(a.sal) as sum_sal, a.deptno
from emp a, dept b
where a.deptno = b.deptno
group by a.deptno;

--? 알아서 data 가져온다.
SQL> exec dbms_mview.refresh('EMP_SUMSAL','?');

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> select * from emp_sumsal;

   SUM_SAL     DEPTNO
---------- ----------
      9400         30
     10075         20
      8750         10


- C : COMPLETE
CREATE 명령의 모든 QUERY 정의를 재실행하여 기졲 데이터를 잘라내는 작업과 마스터 테이블을 기반으로 하는 모든 데이터를 재구축하는 작업이 포함
- F : FAST
마지막 REFRESH 이후의 변경 사항을 적용하며 젂체 재구축을 수행하지는 않음
MIVEW LOG를 사용한 REFRESH : 마스터 테이블의 모든 변경사항이 로그에 기록된 후 MVIEW에 적용
ROWID 범위를 이용한 REFRESH : 싞규 행의 ROWID를 이용하여 DIRECT PATH LOAD 후 MVIEW에 적용
- ? : FORCE
COMPLETE + FAST

EXEC DBMS_MVIEW.REFRESH('EMP_SUMSAL','?');

CREATE MATERIALIZED VIEW dept_sal
BUILD IMMEDIATE -- BUILD IMMEDIATE, BUILD DEFERRED 선택.
REFRESH COMPLETE -- FORCE, COMPLETE, ?
ON COMMIT -- ON DEMAND, ON COMMIT 선택.
AS
SELECT SUM(a.sal), a.deptno
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY a.deptno;

 

INSERT INTO EMP
( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO )
VALUES
( 7935, 'KIM', 'MANAGER', 7839,
TO_Date( '12/17/1980 12:00:00 오전', 'MM/DD/YYYY HH:MI:SS AM'),3000, NULL, 20);

 

SQL> show parameter query

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
query_rewrite_enabled                string      TRUE
query_rewrite_integrity              string      enforced

 

grant query rewrite to scott;
grant create materialized view to scott;

SQL> SELECT SUM(a.sal), a.deptno
  2  FROM emp a, dept b
  3  WHERE a.deptno = b.deptno
  4  GROUP BY a.deptno;


Execution Plan
----------------------------------------------------------
Plan hash value: 2006461124

----------------------------------------------------------------------------
| Id  | Operation           | Name | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |      |     3 |    30 |     6  (34)| 00:00:01 |
|   1 |  HASH GROUP BY      |      |     3 |    30 |     6  (34)| 00:00:01 |
|*  2 |   HASH JOIN         |      |    14 |   140 |     5  (20)| 00:00:01 |
|   3 |    TABLE ACCESS FULL| DEPT |     4 |    12 |     2   (0)| 00:00:01 |
|   4 |    TABLE ACCESS FULL| EMP  |    14 |    98 |     2   (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("A"."DEPTNO"="B"."DEPTNO")


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          6  consistent gets
          0  physical reads
          0  redo size
        555  bytes sent via SQL*Net to client
        415  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          3  rows processed


-- OPTIMIZER_MODE가 CHOOSE인 상태에서 Analyze를 실행하지 않아 QueryRewrite가 실행되지 않음
-- OPTIMIZER_MODE가 CHOOSE일 경우는 모든 테이블을 ANALYZE
-- 또한 MVIEW를 ENABLE QUERY REWRITE 옵션으로 생성해야 함
SQL> SET AUTOTRACE OFF;
SQL> drop MATERIALIZED VIEW EMP_SUMSAL;
SQL> CREATE MATERIALIZED VIEW EMP_SUMSAL
ENABLE QUERY REWRITE
AS
SELECT SUM(a.sal), a.deptno
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY a.deptno;

 

SQL> set autot trace
SQL> SELECT SUM(a.sal), a.deptno
  2  FROM emp a, dept b
  3  WHERE a.deptno = b.deptno
  4  GROUP BY a.deptno;


Execution Plan
----------------------------------------------------------
Plan hash value: 503417823

-------------------------------------------------------------------------------------------
| Id  | Operation                    | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |            |     3 |    78 |     3   (0)| 00:00:01 |
|   1 |  MAT_VIEW REWRITE ACCESS FULL| EMP_SUMSAL |     3 |    78 |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
          5  recursive calls
          0  db block gets
          8  consistent gets
          0  physical reads
          0  redo size
        555  bytes sent via SQL*Net to client
        415  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          3  rows processed

 


SQL> SELECT /*+ NOREWRITE */ SUM(a.sal), a.deptno
  2  FROM emp a, dept b
  3  WHERE a.deptno = b.deptno
  4  GROUP BY a.deptno;


Execution Plan
----------------------------------------------------------
Plan hash value: 2006461124

----------------------------------------------------------------------------
| Id  | Operation           | Name | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |      |     3 |    30 |     6  (34)| 00:00:01 |
|   1 |  HASH GROUP BY      |      |     3 |    30 |     6  (34)| 00:00:01 |
|*  2 |   HASH JOIN         |      |    14 |   140 |     5  (20)| 00:00:01 |
|   3 |    TABLE ACCESS FULL| DEPT |     4 |    12 |     2   (0)| 00:00:01 |
|   4 |    TABLE ACCESS FULL| EMP  |    14 |    98 |     2   (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("A"."DEPTNO"="B"."DEPTNO")


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          6  consistent gets
          0  physical reads
          0  redo size
        555  bytes sent via SQL*Net to client
        415  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          3  rows processed

SQL>

SQL>  SELECT SUM(a.sal), a.deptno
  2   FROM emp a, dept b
  3   WHERE a.deptno = b.deptno
  4   GROUP BY a.deptno;


Execution Plan
----------------------------------------------------------
Plan hash value: 503417823

-------------------------------------------------------------------------------------------
| Id  | Operation                    | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |            |     3 |    78 |     3   (0)| 00:00:01 |
|   1 |  MAT_VIEW REWRITE ACCESS FULL| EMP_SUMSAL |     3 |    78 |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
          4  recursive calls
          0  db block gets
          8  consistent gets
          0  physical reads
          0  redo size
        555  bytes sent via SQL*Net to client
        415  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          3  rows processed


?FAST REFRESH 방식을 이용하는 경우 MATERIALIZED VIEW LOG가 필요(PCT REFRESH는 예외)
?마스터 테이블의 변경된 데이터를 저장하는 LOG 테이블
?FAST REFRESH 수행 시 젂체 테이블이 아닌 변경된 데이터맊을 반영할 수 있게 해줌
?MVIEW의 FAST REFRESH를 위해서 MVIEW LOG 정의에 ROWID 혹은 PRIMARY KEY 옵션을 지정
?집계(SUM, AVG 등) MVIEW 인 경우에는 MVIEW가 참조하는 테이블의 모든 컬럼을 포함해야 하므로 INCLUDING NEW VALUES옵션과 SEQUENCE 옵션을 지정해야 함
?MIXED DML(한 트랜잭션에서 여러 테이블에 대한 INSERT, UPDATE, DELETE의 조합 사용)의 경우 SEQUENCE 옵션을 권장

 

 

 

 

DB 링크시 완젂 동기 리프레쉬(ON COMMIT) 안되고 동일 MACHINE에서맊 가능

 

 

INSERT INTO EMP
( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO )
VALUES
( 7916, 'KIM', 'MANAGER', 7839,
sysdate,
3000, NULL, 20)

 


ALTER TABLE sales
     SPLIT PARTITION sales_q2 AT (2005, 01, 01)
     INTO (PARTITION sales_q1 ,
           PARTITION sales_q2 );

ALTER TABLE sales
     SPLIT PARTITION sales_q3 AT (2005, 09, 01)
     INTO (PARTITION sales_q31 ,
           PARTITION sales_q32 );

- Local의 의미는 테이블 파티션 키와 인덱스 파티션 키가 같음
- Prefixed 는 인덱스 첫 번째 컬럼이 인덱스 파티션 키와 같음
SQL> CREATE INDEX sales_idx01
ON sales(sale_year, sale_month, sale_day) LOCAL
(PARTITION idx_sales_p1 ,
PARTITION idx_sales_p2 ,
PARTITION idx_sales_p3 ,
PARTITION idx_sales_p4 );
또는,
SQL> CREATE INDEX sales_idx01 ON sales(sale_year, sale_month, sale_day) LOCAL;
-- 인덱스 키 컬럼 확인
SQL> select INDEX_NAME, COLUMN_NAME, COLUMN_POSITION
from all_ind_columns where table_name='SALES' ORDER BY 1,3;
-- 인덱스 파티션 확인
SQL> select *
from all_ind_partitions where index_name = 'SALES_IDX01‘;

- Index의 첫 번째 컬럼이 파티션 키 컬럼으로 시작하지 않는 Local Index
- 파티션 키 컬럼이 Index에 중갂에 올 수도 있지맊 항상 선두에 오지 않는 한 Non-prefixed index
SQL> CREATE INDEX sales_idx02
ON sales(sales_no, sale_year) LOCAL
(PARTITION idx_sales_p1 ,
PARTITION idx_sales_p2 ,
PARTITION idx_sales_p3 ,
PARTITION idx_sales_p4 ) ;
-- 인덱스 확인
SQL> SELECT INDEX_NAME, PARTITION_COUNT, partitioning_type, locality, ALIGNMENT
fROM USER_PART_INDEXES WHERE TABLE_NAME = 'SALES' ;
INDEX_NAME PARTITION_COUNT PARTITION LOCALI ALIGNMENT
------------------------------ --------------- --------- ------ ------------
SALES_IDX01 4 RANGE LOCAL PREFIXED
SALES_IDX02 4 RANGE LOCAL NON_PREFIXED


-Range Partition으로 생성된 sales 테이블 sale_year 컬럼에 Global prefixed Index로 생성
SQL> CREATE INDEX sales_idx03
ON sales(sale_year)
GLOBAL PARTITION BY RANGE (sale_year)
(PARTITION idx_sales_year_p1 VALUES LESS THAN (2005) ,
PARTITION idx_sales_year_p2 VALUES LESS THAN (2010) ,
PARTITION idx_sales_year_p3 VALUES LESS THAN (MAXVALUE) ); ? 없으면 에러
SQL> SELECT INDEX_NAME, PARTITION_COUNT, partitioning_type, locality, ALIGNMENT
fROM USER_PART_INDEXES WHERE TABLE_NAME = 'SALES' ;
INDEX_NAME PARTITION_COUNT PARTITION LOCALI ALIGNMENT
------------------------------ --------------- --------- ------ ------------
SALES_IDX01 4 RANGE LOCAL PREFIXED
SALES_IDX02 4 RANGE LOCAL NON_PREFIXED
SALES_IDX03 3 RANGE GLOBAL PREFIXED

SQL> select INDEX_NAME, PARTITION_NAME, HIGH_VALUE
from USER_ind_partitions where INDEX_NAME LIKE 'SALES%';
INDEX_NAME PARTITION_NAME HIGH_VALUE
------------------------------ ------------------------------ ---------------
SALES_IDX01 IDX_SALES_P1 2005, 01, 01
SALES_IDX01 IDX_SALES_P2 2005, 07, 01
SALES_IDX01 IDX_SALES_P3 2006, 01, 01
SALES_IDX01 IDX_SALES_P4 2006, 07, 01
SALES_IDX02 IDX_SALES_P1 2005, 01, 01
SALES_IDX02 IDX_SALES_P2 2005, 07, 01
SALES_IDX02 IDX_SALES_P3 2006, 01, 01
SALES_IDX02 IDX_SALES_P4 2006, 07, 01
SALES_IDX03 IDX_SALES_YEAR_P1 2005
SALES_IDX03 IDX_SALES_YEAR_P2 2010
SALES_IDX03 IDX_SALES_YEAR_P3 MAXVALUE


SQL> select TABLE_NAME, PARTITION_NAME, TABLESPACE_NAME, HIGH_VALUE,
PARTITION_POSITION, NUM_ROWS
from user_tab_partitions
where table_name='SALES';
SQL> alter table SALES drop partition SALES_Q1;
SQL> select index_name, partition_name, high_value, num_rows, status
from user_ind_partitions
where index_name LIKE'SALES%';
-- GLOBAL PARTITION INDEX는 테이블 파티션 DROP 되거나 TRUNCATE 될 때 UNUSABLE 됨
SQL> select * from all_indexes where STATUS not in ('VALID','N/A');
SQL> select index_name, partition_name, status from all_ind_partitions where STATUS not in ('USABLE');

INDEX REBUILD
SQL> alter index SALES_IDX03 NOLOGGING;
SQL> alter index SALES_IDX03 rebuild partition IDX_SALES_YEAR_P1;
SQL> alter index SALES_IDX03 rebuild partition IDX_SALES_YEAR_P2;
SQL> alter index SALES_IDX03 rebuild partition IDX_SALES_YEAR_P3;
SQL> alter index SALES_IDX03 LOGGING;

 

 

 

 

 

 

 


 

'ORACLE' 카테고리의 다른 글

connect by [Oracle 9i 에서 10g CONNECT_BY_ROOT 써먹기]  (0) 2013.04.04
LTRIM의 재발견  (0) 2013.04.04
MATERIALIZED VIEW 생성  (0) 2013.03.28
trace and mview  (0) 2013.03.28
Index monitoring usage  (0) 2013.03.26
posted by 구름너머 2013. 3. 28. 20:28

-- MATERIALIZED VIEW 생성
SQL> CREATE MATERIALIZED VIEW dept_sal
-- PCTFREE 0 TABLESPACE mviews
-- STORAGE (initial 16k next 16k pctincrease 0)
BUILD IMMEDIATE -- BUILD IMMEDIATE, BUILD DEFERRED 선택.
REFRESH
COMPLETE -- FORCE, COMPLETE, FAST, NEVER 선택.
ON DEMAND -- ON DEMAND, ON COMMIT 선택.
ENABLE QUERY REWRITE
AS
SELECT SUM(a.sal), a.deptno
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY a.deptno;
구체화된 뷰가 생성되었습니다.

- REFRESH 절은 오라클이 MView의 데이터를 언제, 어떻게 Refresh 하는지를 결정 하는 방법입니다.
.Refresh 방법에는 ON COMMIT 방법과, ON DEMAND 방법 2 가지가 있습니다.

.ON COMMIT 은 기초 테이블에 Commit 이 일어날 때 Refresh 가 일어나는 방안이며,
이는 1 개의 테이블에 COUNT(*), SUM(*)과 같은 집합 함수를 사용하거나, MView에 조인만이
있는 경우, Group By 절에 사용된 컬럼에 대해 COUNT(col) 함수가 기술된 경우만
사용이 가능 합니다.

.ON DEMAND는 사용자가 DBMS_MVIEW 패키지 (REFRESH, REFRESH_ALL_MVIEWS,
REFRESH_DEPENDENT) 를 실행 한 경우 Refresh 되는 경우 입니다.


- Refresh를 하는 방법에는 FORCE, COMPLETE, FAST, NEVER의 4가지가 존재 합니다.

.COMPLETE : MView의 정의에 따라 MView의 데이터 전체가 Refresh 되는 것으로
ATOMIC_REFRESH=TRUE와 COMPLETE으로 설정한 경우 입니다.

.FAST : 새로운 데이터가 삽입될 때마다 점진적으로 Refresh 되는 방안으로 Direct Path나
Mview log를 이용 합니다.

.FORCE : 이 경우 먼저 Fast Refresh가 가능한지 점검 후 가능하면 이를 적용하고,
아니면 Complete Refresh를 적용 합니다.(디폴트)

.NEVER : MView의 Refresh를 발생시키지 않습니다

이 내용은 어딘가에서 퍼온 내용입니다.

참고하시면 될 것 같습니다.

'ORACLE' 카테고리의 다른 글

LTRIM의 재발견  (0) 2013.04.04
28일 수업  (0) 2013.03.28
trace and mview  (0) 2013.03.28
Index monitoring usage  (0) 2013.03.26
INDEX 분석  (0) 2013.03.26