Oracle/기타2010. 11. 13. 15:35





Q :

vi 에디터로 파일을 열려고 하면 단말기폭 초과라는 메시지가 나올때가 있다.

이럴 때는 어떻게 해결할까요?


A :

stty columns 160
Posted by 자수성가한 부자
Oracle/기타2010. 10. 13. 20:53



os] sqlplus / as sysdba
SQL> column date_col new_value today_var

SQL> select to_char(sysdate, 'yyyymmdd') date_col
         from dual;

SQL> spool result_&today_var

SQL> select sysdate
         from dual;

SQL> spool off


위의 순서대로 실행을 하면 result_yyyymmdd.lst의 파일이 생성된다.


출처 : http://dozuq.blog.me/39492729
Posted by 자수성가한 부자
Oracle/기타2010. 7. 8. 09:15
SQL*PLUS에서는 OS의 편집기를 이용하지 않고 buffer의 내용을 바로 편집할 수 있다.

명령어로는 list, input, append, change, delete, 번호 ....

자세한 내용은 아래의 블로그를 참조.

참고 : http://blog.naver.com/gseducation/20109008333
Posted by 자수성가한 부자
Oracle/기타2010. 5. 4. 15:58
dba_feature_usage_statistics

SYS@db1> desc dba_feature_usage_statistics
 Name           Null?    Type
 ----------------------------------------------------------------- -------- --------------------------------------------
 DBID           NOT NULL NUMBER
 NAME           NOT NULL VARCHAR2(64)
 VERSION          NOT NULL VARCHAR2(17)
 DETECTED_USAGES         NOT NULL NUMBER
 TOTAL_SAMPLES          NOT NULL NUMBER
 CURRENTLY_USED            VARCHAR2(5)
 FIRST_USAGE_DATE           DATE
 LAST_USAGE_DATE           DATE
 AUX_COUNT            NUMBER
 FEATURE_INFO            CLOB
 LAST_SAMPLE_DATE           DATE
 LAST_SAMPLE_PERIOD           NUMBER
 SAMPLE_INTERVAL           NUMBER
 DESCRIPTION            VARCHAR2(128)



SYS@db1> col name format a50
SYS@db1> col currently_used format a20
SYS@db1> set lines 120
SYS@db1> set pages 100

SYS@db1> select NAME, CURRENTLY_USED from dba_feature_usage_statistics;
NAME         CURRENTLY_USED
-------------------------------------------------- --------------------
Advanced Replication       FALSE
Externally authenticated users      FALSE
Audit Options        FALSE
Automatic Database Diagnostic Monitor     FALSE
Automatic Segment Space Management (system)    TRUE
Automatic Segment Space Management (user)    FALSE
Automatic SQL Execution Memory      TRUE
Automatic Storage Manager      FALSE
Automatic Undo Management      TRUE
Automatic Workload Repository      FALSE
Change-Aware Incremental Backup      FALSE
Client Identifier       FALSE
CSSCAN         FALSE
Character Semantics       FALSE
Character Set        TRUE
Data Guard        FALSE
Data Guard Broker       FALSE
Data Mining        FALSE
Dynamic SGA        FALSE
File Mapping        FALSE
Flashback Database       FALSE
Internode Parallel Execution      FALSE
Label Security        FALSE
Locally Managed Tablespaces (system)     TRUE
Locally Managed Tablespaces (user)     TRUE
Messaging Gateway       FALSE
MTTR Advisor        FALSE
Multiple Block Sizes       FALSE
OLAP - Analytic Workspaces      FALSE
OLAP - Cubes        FALSE
Oracle Managed Files       FALSE
Parallel SQL DDL Execution      TRUE
Parallel SQL DML Execution      FALSE
Parallel SQL Query Execution      FALSE
Partitioning (system)       TRUE
Partitioning (user)       FALSE
PL/SQL Native Compilation      FALSE
Protection Mode - Maximum Availability     FALSE
Protection Mode - Maximum Performance     TRUE
Protection Mode - Maximum Protection     FALSE
Protection Mode - Unprotected      FALSE
Real Application Clusters (RAC)      FALSE
Recovery Area        TRUE
Recovery Manager (RMAN)       FALSE
RMAN - Disk Backup       FALSE
RMAN - Tape Backup       FALSE
Resource Manager       FALSE
Segment Advisor        FALSE
Server Parameter File       TRUE
Shared Server        FALSE
Spatial         FALSE
SQL Access Advisor       FALSE
SQL Tuning Advisor       FALSE
SQL Tuning Set        FALSE
Standby Archival - LGWR       FALSE
Standby Archival - ARCH       FALSE
Standby Transmission       FALSE
Database Replay: Workload Capture     FALSE
Streams (system)       TRUE
Streams (user)        TRUE
Transparent Gateway       FALSE
Undo Advisor        FALSE
Virtual Private Database (VPD)      TRUE
XDB         TRUE
LOB         FALSE
Object         FALSE
Extensibility        TRUE
Change Data Capture       FALSE
Materialized Views (User)      FALSE
69 rows selected.

Posted by 자수성가한 부자
Oracle/기타2010. 4. 1. 19:55
clone database를 생성하다가 이런 에러를 만났다.



데이터베이스 이름은 8자리가 안된다.

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

SQL*PLUS에서 명령 편집  (0) 2010.07.08
database의 feature의 사용유무 체크뷰  (0) 2010.05.04
오라클 30초 간격으로 동일한 값 넣는 쿼리  (1) 2010.02.24
import 성능 향상시키는 방법  (0) 2010.02.11
reorganization  (0) 2010.02.11
Posted by 자수성가한 부자
Oracle/기타2010. 2. 24. 11:24
질문 :

테이블 A에 1,2,3,4,5,6,7  이라는 컬럼이 있습니다.

1,2,3 에는 그냥 고정값 a,b,c,가 각각 들어가고

4에는 해당 날짜 시간

5,6,7에는  5에는 4에서 적힌 년, 6에는 4에서 찍힌 월,7에는 4에서 찍힌  일을 넣을려고 합니다.

 

 1  2  3  4  5  6  7
 a  b  c  2009-09-05 00:00:30  2009  09 05
 a  b  c  2009-09-05 00:01:00  2009  09  05
 a  b  c  2009-09-05 00:01:30  2009  09  05


.

.

.

.

이런식으로 해서 30초 4컬럼에 30초 간격으로 오늘 날짜 까지 데이터를 30초 간격으로 넣어줄려고 하는데;;

어떻게 해야 하는지 모르겠네요.;;

데이터 출력을 위해서 임의의 값을 넣는건데.. 5,6,7 컬럼은 4의 값을 넣어야하고;;

2009년 9월부터 해서 오늘 일까지 30초 간격으로 데이터 넣는 방법좀 가르쳐주세여.ㅜ_ㅜ

데이터가 너무 많아서 인서트 적기는 힘드네요..ㅜ_ㅜ

 

부탁드리겠습니다





답변 :

먼저 테이블을 생성해줍니다.

SQL> create table t1(col1 varchar2(1),
                     col2 varchar2(1),
                     col3 varchar2(1),
                     col4 date,
                     col5 varchar2(4),
                     col6 varchar2(2),
                     col7 varchar2(2));



그리고 insert하려는 쿼리의 row수가 얼마나 되는지 알아봅니다.

SQL> select (sysdate-to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS'))*24*60*60/30 "level"
     from dual;



위 쿼리의 결과의 정수부분만 아래 쿼리의 level 뒤에 넣어줍니다.


SQL> insert into t1
     select 'a','b','c',
            to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS')+(level-1)/24/60/60*30,
            to_char(to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS')+(level-1)/24/60/60*30, 'YYYY'),
            to_char(to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS')+(level-1)/24/60/60*30, 'MM'),
            to_char(to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS')+(level-1)/24/60/60*30, 'DD')
     from dual
     connect by level <= 위 결과의 정수부분 넣는 곳;



PS) 참고로 날짜가 년월일밖에 나오지 않는다면 아래와 같이 세션의 날짜포맷을 변경해줍니다.


SQL> alter session set nls_date_format = 'DD-MON-RR HH24.MI.SS';


질문과 답변 원문 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10205&docId=105498493

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

database의 feature의 사용유무 체크뷰  (0) 2010.05.04
데이터베이스 명의 최대 바이트 수는?  (0) 2010.04.01
import 성능 향상시키는 방법  (0) 2010.02.11
reorganization  (0) 2010.02.11
Read the alert log with SQL  (0) 2010.01.13
Posted by 자수성가한 부자
Oracle/기타2010. 2. 11. 19:03

Import 성능 향상시키는 방법


Oracle에서 테이블의 재구성(table reorganization) 또는 데이터 이동(data migration)을 하는 경우 많은 양의 데이터를 import할 경우가 있습니다. 성능향상을 위한 몇 가지 방법을 소개하니 참고 바랍니다…


1. 파라미터 파일에서 BUFFER SIZE를 크게 하세요~ 이렇게 함으로서 디스크 I/O가 줄게되어 성능이 개선 됩니다.


2. 항상 indexes=N로 하시구요… 테이블의 데이터를 먼저 import한 후 Oracle Server에서 index를 rebuild 하는 것이 훨씬 좋습니다.


3. 파라미터 파일에서 COMMIT=N로 하세요… 
   이렇게 하면 클 ROLLBACK SEGMENT를 필요로 하지만 각각의 BUFFER를 import후 commit하는 것이 아니라 
   TABLE을 몽땅 import후 commit하게 됩니다.


4. 하나의 큰 dedicated rollback segment를 쓰는 것이 좋습니다. 이렇게 하기 위해서는 다른 rollback segment는 offline 시키시면 되구요… 
   하나뿐인 rollback segment의 사이즈는 가장 큰 테이블의 50% 정도 잡으시면 됩니다.


5. import가 끝날 때 까지 DB운영을 NOARCHIVELOG mode로 하세요~


출처 : http://www.oracleclub.com/article/10863?article.communityId=1683&article.end=20&categoryId=0&pageNo=9&searchKey=CONTENT&searchValue=

Posted by 자수성가한 부자
Oracle/기타2010. 2. 11. 18:59
reorganization이란?

글자그대로 해석하면 재조직이다.
오라클에서에 이 재조직이라 함은 table, index, sequence과 같은 오브젝트를 기존과는 다른 형태로 재구성한다는 것이 아닐까?


reorganization에는 어떤 것들이 있을까?



reorganization이 필요하다는 것은 어떻게 알 수 있을까?

analyze


실제적으로 실습을 해보자.


SQL> alter table 테이블명 dellocate unused;


SQL> alter index 인덱스명 rebuild (다양한 옵션);


create table
as
select  SQL문

export/import utilities

SQL*Loader

alter table move tablespace

온라인 reorganization
DBMS_REDEFINITION


참고 : http://blog.naver.com/orapybubu?Redirect=Log&logNo=40021506268
         http://blog.naver.com/orapybubu?Redirect=Log&logNo=40045446472
         http://blog.naver.com/imbyuri?Redirect=Log&logNo=110070124618
         http://kr.forums.oracle.com/forums/thread.jspa?messageID=1465894

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

오라클 30초 간격으로 동일한 값 넣는 쿼리  (1) 2010.02.24
import 성능 향상시키는 방법  (0) 2010.02.11
Read the alert log with SQL  (0) 2010.01.13
[펌]오라클의 뷰가 만들어지는 과정  (0) 2009.12.23
login.sql셋팅  (0) 2009.12.15
Posted by 자수성가한 부자
Oracle/기타2010. 1. 13. 16:39

(1) alert 파일을 재료로 external table 생성하기

[oracle@ora10gr2 ~]$ sqlplus system/oracle
 
SQL> show parameter instance_name
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      orcl
SQL> select value from v$parameter where name='background_dump_dest';
 
VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/admin/orcl/bdump
 
SQL> -- 디렉토리 객체 생성
SQL> create or replace directory b_dump_dir as '/u01/app/oracle/admin/orcl/bdump';
 
SQL> -- external table 생성
SQL> create table t_alert_log (text_line varchar2(500)) organization external
         (type oracle_loader default directory b_dump_dir location ('alert_orcl.log'));
 
SQL> -- alert 파일 내용을 질의로 확인
SQL> select * from t_alert_log where rownum <= 20;



(2) 사용자 정의 함수 및 쿼리를 사용해서 질의에 편리한 view 생성

SQL>
 
create or replace function alert_log_date( text in varchar2 )
  return date
is
  invaliddate  exception;
  pragma exception_init(invaliddate, -1846);
begin
  return to_date(text,'dy mon dd hh24:mi:ss yyyy','nls_date_language=american');
exception
  when invaliddate then return null;
end;
/
 
SQL>

create or replace view alert_log
as
select row_num,
         last_value(low_row_num ignore nulls)
         over(order by row_num rows between unbounded preceding
         and current row) start_row,
         last_value(alert_date  ignore nulls)
         over(order by row_num rows between unbounded preceding
         and current row) alert_date,
         alert_text
from (select rownum row_num,
                 nvl2(alert_log_date(text_line),rownum,null) low_row_num,
                 alert_log_date(text_line) alert_date,
                 text_line alert_text
      from t_alert_log);
 
 
SQL> set pages 40
SQL> set lines 200
SQL> col alert_text format a100
SQL> select * from alert_log;




(3) 활용예제


SQL> -- 최근 한시간 동안 추가된 내용 확인
SQL> select * from alert_log
         where alert_date > sysdate - 1/24;
 
SQL> -- 지난 한달동안 추가된 내용 가운데 "ORA-"라는 글자를 포함하는 라인 확인
SQL> select * from alert_log
          where start_row in (select start_row from alert_log
                                          where regexp_like(alert_text,'ORA-'))
          and alert_date > trunc(sysdate,'mon');


출처 : http://blog.naver.com/orapybubu/40050729230

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

import 성능 향상시키는 방법  (0) 2010.02.11
reorganization  (0) 2010.02.11
[펌]오라클의 뷰가 만들어지는 과정  (0) 2009.12.23
login.sql셋팅  (0) 2009.12.15
DBMS_STATS package  (0) 2009.12.08
Posted by 자수성가한 부자
Oracle/기타2009. 12. 23. 09:22

Oracle 의 뷰가 만들어지는 과정

 

DBA 생활을 하면서  우리가 단순히 사용하는 DBA_, USER_ , ALL_, V$ 등을 제대로 알고 어떻게 만들어지는지에 대한 정의를 한 문서를 본적이 없다.

따라서 최근에 읽기 시작한 "secret oracle"라는 책을 토대로해서 한번 정리해 보는 기회를 가졌다. 

아래는 오라클에서 만들어지는 V$ 뷰들의 layer architecture 를 표현한 그림이다.

맨 아래에 x$ 테이블을 토대로 위의 view나 시노님들이 만들어진다.

그렇다면 우리가 쉽게 조회하는 딕셔너리 뷰 및 v$ 뷰는 결국에는 x$ 테이블의 데이타를 참고하는 view나 시노님에 불과하다.

특히나 우리가 쉽게 조회하는 V$ 뷰는 결국에는 퍼블릭 시노님에 불과하다는 것을 알수 있다.

V$ VIEW라는 이름보다는 V$ 시노님이 더 어울리지 않을까?

 

 

 

TOP-DOWN방식으로 찾아본 X$ 테이블

 

그렇다면 여기서 우리가 초기화파라미터를 조회하기 위해서 흔히들 조회하는 

V$PARAMETER가 어떠한 x$ 테이블을 조회하는지 다이나믹 뷰의 원천 테이블을 찾아보도록 하자.

 

SQL> desc v$parameter
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NUM                                                NUMBER
 NAME                                               VARCHAR2(80)
 TYPE                                               NUMBER
 VALUE                                              VARCHAR2(512)
 DISPLAY_VALUE                                      VARCHAR2(512)
 ISDEFAULT                                          VARCHAR2(9)
 ISSES_MODIFIABLE                                   VARCHAR2(5)
 ISSYS_MODIFIABLE                                   VARCHAR2(9)
 ISINSTANCE_MODIFIABLE                              VARCHAR2(5)
 ISMODIFIED                                         VARCHAR2(10)
 ISADJUSTED                                         VARCHAR2(5)
 ISDEPRECATED                                       VARCHAR2(5)
 DESCRIPTION                                        VARCHAR2(255)
 UPDATE_COMMENT                                     VARCHAR2(255)
 HASH                                               NUMBER


 

1) V$PARAMETER SYNONYM

v$parameter는 sys소유의 v_$parameter 뷰를  public 시노님으로 생성되어 놓은 것에 불과하다는 것을 알수 있다.  

 

SQL> SELECT OWNER,SYNONYM_NAME,TABLE_OWNER,TABLE_NAME FROM DBA_SYNONYMS

         WHERE SYNONYM_NAME ='V$PARAMETER';

 

OWNER    SYNONYM_NAME     TABLE_OWNER     TABLE_NAME
------------------------------------------------------------
PUBLIC    V$PARAMETER        SYS                     V_$PARAMETER

 

 

2) SYS.V_$PARAMETER 뷰

 

V_$PARAMETER 뷰의 정의를 찾아보자.

이 뷰는 SYS.V$PARAMETER 로 생성된 것을 알수 있다.

 

SQL> SELECT OWNER,TEXT FROM DBA_VIEWS WHERE VIEW_NAME ='V_$PARAMETER';

OWNER    TEXT

-------------------------------------------------
SYS         select "NUM","NAME","TYPE","VALUE","DISPLAY_VALUE","ISDEFAULT","ISSES_MODIFIABLE","ISSYS_MODIFIABLE","

              ,"ISINSTANCE_MODIFIABLE","ISMODIFIED","ISADJUSTED","ISDEPRECATED","DESCRIPTION","UPDATE_COMMENT",

              "HASH"   from v$parameter

 

3) SYS.V$PARAMETER FIXED VIEW

 

그럼 FIXED VIEW 인 V$PARAMETER 의 구성을 찾아보자.

아래의 V$FIXED_VIEW_DEFINITION 뷰를 조회해보면 GV$PARAMETER를 가지고 있는것을 알수 있다.

 

SQL> SELECT view_definition FORMAT FROM V$FIXED_VIEW_DEFINITION
    2   WHERE view_name='V$PARAMETER';

 

FORMAT
--------------------------------------------------------------------------------
select  NUM , NAME , TYPE , VALUE , DISPLAY_VALUE, ISDEFAULT , ISSES_MODIFIABLE
, ISSYS_MODIFIABLE , ISINSTANCE_MODIFIABLE, ISMODIFIED , ISADJUSTED , ISDEPRECAT
ED, DESCRIPTION, UPDATE_COMMENT, HASH  from GV$PARAMETER where inst_id = USERENV
('Instance')

 

 

GV$PARAMETER를 위의 1~ 3번과정을 동일하게 조회된다.

마지막에 SYS.GV$PARAMETER를 조회하면 해당되는 X$ 테이블을 알 수 있다.

 

SELECT * FROM V$FIXED_VIEW_DEFINITION
WHERE VIEW_NAME='GV$PARAMETER'

 

View_name 

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

GV$PARAMETER 

View_definition

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

select x.inst_id,x.indx+1,ksppinm,ksppity,ksppstvl, ksppstdvl, ksppstdf,  decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE'),  decode(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED',                                  3,'IMMEDIATE','FALSE'),  decode(bitand(ksppiflg,4),4,'FALSE',                                     decode(bitand(ksppiflg/65536,3), 0, 'FALSE', 'TRUE')),     decode(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE'),  decode(bitand(ksppstvf,2),2,'TRUE','FALSE'),  decode(bitand(ksppilrmflg/64, 1), 1, 'TRUE', 'FALSE'),  ksppdesc, ksppstcmnt, ksppihash  from x$ksppi x, x$ksppcv y where (x.indx = y.indx) and  ((translate(ksppinm,'_','#') not like '##%') and    ((translate(ksppinm,'_','#') not like '#%')      or (ksppstdf = 'FALSE') or      (bitand(ksppstvf,5) > 0)))

 

위의 과정들을 귀찮으니 한방에 어떠한 X$테이블인지 찾을려면

V$FILESTAT 의 예를 보면  먼저 GV$FILESTAT 로 변환해서 위의 V$FIXED_VIEW_DEFINITION 을 조회하면 되겠다.

 

View_name 

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

View_definition

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

GV$FILESTAT 

select k.inst_id, k.kcfiofno,k.kcfiopyr,k.kcfiopyw,k.kcfiopbr,k.kcfiopbw, k.kcfiosbr,k.kcfioprt,k.kcfiopwt,k.kcfiosbt,k.kcfioavg,k.kcfiolst,k.kcfiomin, k.kcfiormx,k.kcfiowmx from x$kcfio k,x$kccfe f where f.fedup <> 0 and  f.fenum=k.kcfiofno

 

X$ -> GV$ 뷰-> GV_$ 뷰-> GV$ 시노님 -> V$ 뷰 -> V_$ 뷰 -> V$ 시노님

 

과정을 거친다.

 

그렇다면 X$ 테이블의 정체는 무엇인가?

X$ 테이블은 오라클의 각종 뷰가 참조되는 원천 테이블이자 C 프로그램으로 작성된 Oracle Kernel 에 존재하는 2차원(2-dimension) array 형태의 데이타이다. 절대로 보호되어야 하는 데이타이고 따라서 당근 SYS유저만이 접근이 가능하다.  

거의 X$ 테이블에 대해서는 몇몇 테이블들(x$bh,x$ksppi, x$ksppsv 등)  일부 공개가 되어 있고 대부분 internal 그 의미와 용도가 숨겨져 있다.

다만 추측으로 어떠한 테이블인지에 대한 정보가 제공될 뿐이다.

약어

추정 의미<?xml:namespace prefix = o /><?xml:namespace prefix = o />

K

Kernel

KC

Kernel Cache

KCB

Kernel Cache buffer

KCBW

Kernel Cache buffer wait

KCC

Kernel Cache Control file

KCCB

Kernel Cache Control Backup

KCCF

Kernel Cache Copy Flash Recovery Area

KCCDC

Kernel Cache Control file Data file Copy

KCP

Kernel Cache transPortable tablespace

KCR

Kernel Cache Redo

KCT

Kernel Cache insTance

KG

Kernel Generic

KGL

Kernel Generic Library Cache

KCLJ

Kernel Generic Library Cache java

KS

Kernel Service

KSB

Kernel Service Background

KSM

Kernel Service Memory

KSU

Kernel Service User

KSUSE

Kernel Service User SEssion

KSUSECON

Kernel Service User SEssion COnnection

KSUSEH

Kernel Service User SEssion History

KT

Kernel Transaction

KTU

Kernel Transaction Undo

KX

Kernel eXecution

KXS

Kernel eXecution Pool

 

위의 정보를 토대로 v$filestat가 참조하는 x$ 테이블인 x$kcfio ,x$kccfe 의 뜻을 대충 살펴보자면 kernel cache의 file i/o에 관련된 테이블과  Kernel Cache Control file에 관련된 구조정보를 조인하는 문구정도로 추측할 수 있을 것이다.

 

 

참고문헌: Secret Oracle (by Robert Debes)

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

reorganization  (0) 2010.02.11
Read the alert log with SQL  (0) 2010.01.13
login.sql셋팅  (0) 2009.12.15
DBMS_STATS package  (0) 2009.12.08
index의 크기 문제  (0) 2009.12.02
Posted by 자수성가한 부자