DBA 직원 들 이 파악 해 야 할 SQL 문장 들

1. 데이터 베이스 구조 체계 ① 표 공간 에 대한 감 시 는 중요 한 임무 이다. 우 리 는 표 공간의 설정 에 항상 관심 을 가 져 야 한다. 현재 응용 수 요 를 만족 시 키 는 지, 아래 의 문 구 는 표 공간의 상세 한 정 보 를 조회 할 수 있다.
SQL code

    
    
    
    
SELECT TABLESPACE_NAME, INITIAL_EXTENT, NEXT_EXTENT, MIN_EXTENTS, MAX_EXTENTS, PCT_INCREASE, MIN_EXTLEN, STATUS, CONTENTS, LOGGING, EXTENT_MANAGEMENT, -- Columns not available in v8.0.x ALLOCATION_TYPE, -- Remove these columns if running PLUGGED_IN, -- against a v8.0.x database SEGMENT_SPACE_MANAGEMENT -- use only in v9.2.x or later FROM DBA_TABLESPACES ORDER BY TABLESPACE_NAME;

② 일부 데이터 파일 이 자동 으로 확 장 된 표 공간 으로 설정 되 지 않 은 경우 표 공간 이 가득 차 면 데이터 베 이 스 는 공간 이 없어 서 멈 출 수 있 음 을 의미 합 니 다.감시 표 공간 은 가장 중요 한 것 은 잉여 공간의 크기 나 사용률 을 감시 하 는 것 이다.다음은 감시 표 의 공간 사용률 과 나머지 공간 크기 의 문구 이다.
SQL code

    
    
    
    
SELECT D.TABLESPACE_NAME, SPACE "SUM_SPACE(M)", BLOCKS SUM_BLOCKS, SPACE - NVL(FREE_SPACE, 0 ) "USED_SPACE(M)", ROUND (( 1 - NVL(FREE_SPACE, 0 ) / SPACE ) * 100 , 2 ) "USED_RATE( % )", FREE_SPACE "FREE_SPACE(M)" FROM ( SELECT TABLESPACE_NAME, ROUND ( SUM (BYTES) / ( 1024 * 1024 ), 2 ) SPACE , SUM (BLOCKS) BLOCKS FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) D, ( SELECT TABLESPACE_NAME, ROUND ( SUM (BYTES) / ( 1024 * 1024 ), 2 ) FREE_SPACE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME( + ) UNION ALL -- if have tempfile SELECT D.TABLESPACE_NAME, SPACE "SUM_SPACE(M)", BLOCKS SUM_BLOCKS, USED_SPACE "USED_SPACE(M)", ROUND (NVL(USED_SPACE, 0 ) / SPACE * 100 , 2 ) "USED_RATE( % )", NVL(FREE_SPACE, 0 ) "FREE_SPACE(M)" FROM ( SELECT TABLESPACE_NAME, ROUND ( SUM (BYTES) / ( 1024 * 1024 ), 2 ) SPACE , SUM (BLOCKS) BLOCKS FROM DBA_TEMP_FILES GROUP BY TABLESPACE_NAME) D, ( SELECT TABLESPACE_NAME, ROUND ( SUM (BYTES_USED) / ( 1024 * 1024 ), 2 ) USED_SPACE, ROUND ( SUM (BYTES_FREE) / ( 1024 * 1024 ), 2 ) FREE_SPACE FROM V$TEMP_SPACE_HEADER GROUP BY TABLESPACE_NAME) F WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME( + )

③ 감시 표 공간의 나머지 공간 을 제외 하고 가끔 우 리 는 이 표 공간 이 자동 으로 공간 을 확장 하 는 능력 이 있 는 지 알 아 볼 필요 가 있다. 비록 우 리 는 생산 시스템 에서 공간 을 미리 분배 하 는 것 을 권장 하지만.다음 문장 은 이 기능 을 완성 할 것 이다.
SQL code

    
    
    
    
SELECT T.TABLESPACE_NAME, D. FILE_NAME , D.AUTOEXTENSIBLE, D.BYTES, D.MAXBYTES, D.STATUS FROM DBA_TABLESPACES T, DBA_DATA_FILES D WHERE T. TABLESPACE_NAME = D. TABLESPACE_NAME ORDER BY TABLESPACE_NAME, FILE_NAME

④ 사전 관 리 를 사용 하 는 표 공간 도 적지 않다 고 믿 습 니 다. 사전 관리 표 공간 에서 각 표 의 다음 구간 의 크기 는 예측 할 수 없 기 때문에 사전 관리 표 공간 에서 의 다음 구간 의 분 배 는 성능 문 제 를 일 으 키 거나 확장 되 지 않 은 표 공간 으로 인해 시스템 이 중단 되 는 것 을 감시 해 야 합 니 다.다음 문 구 는 표 의 확장 을 검사 하면 표 공간의 확장 을 일 으 킬 것 이다.
SQL code

    
    
    
    
SELECT A.OWNER, A.TABLE_NAME, A.NEXT_EXTENT, A.TABLESPACE_NAME FROM ALL_TABLES A, ( SELECT TABLESPACE_NAME, MAX (BYTES) BIG_CHUNK FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F WHERE F.TABLESPACE_NAME = A.TABLESPACE_NAME AND A.NEXT_EXTENT > F.BIG_CHUNK

⑤ 세그먼트 의 점용 공간 과 구간 수 역시 주의해 야 할 문제 입 니 다. 한 세그먼트 의 점용 공간 이 너무 크 거나 너무 많은 구간 (사전 이 관리 하 는 표 공간 에서 심각 한 성능 영향 을 미 칠 수 있 음) 을 뛰 어 넘 으 면 세그먼트 가 재분배 할 수 있 는 구간 이 없 으 면 데이터 베 이 스 를 오류 로 유도 할 수 있 습 니 다.따라서 구간 의 크기 와 구간 모니터링 도 중요 한 작업 이다.
SQL code

    
    
    
    
SELECT S.OWNER, S.SEGMENT_NAME, S.SEGMENT_TYPE, S.PARTITION_NAME, ROUND (BYTES / ( 1024 * 1024 ), 2 ) "USED_SPACE(M)", EXTENTS USED_EXTENTS, S.MAX_EXTENTS, S.BLOCKS ALLOCATED_BLOCKS, S.BLOCKS USED_BOLCKS, S.PCT_INCREASE, S.NEXT_EXTENT / 1024 "NEXT_EXTENT(K)" FROM DBA_SEGMENTS S WHERE S.OWNER NOT IN ( ' SYS ' , ' SYSTEM ' ) ORDER BY Used_Extents DESC

⑥ 대상 의 공간 분배 와 공간 이용 상황 은 분석 표, rowid 조회 등 여러 가지 측면 에서 분석 하 는 것 을 제외 하고 Oacle 은 공간 을 조회 하 는 패키지 dbms 를 제공 합 니 다.space, 우리 가 조금 만 포장 하면 아주 좋 은 물건 이 될 것 입 니 다.
SQL code

    
    
    
    
CREATE OR REPLACE PROCEDURE show_space(p_segname IN VARCHAR2 , p_owner IN VARCHAR2 DEFAULT USER , p_type IN VARCHAR2 DEFAULT ' TABLE ' , p_partition IN VARCHAR2 DEFAULT NULL ) -- This procedure uses AUTHID CURRENT USER so it can query DBA_* -- views using privileges from a ROLE and so it can be installed -- once per database, instead of once per user who wanted to use it. AUTHID CURRENT_USER as l_free_blks number ; l_total_blocks number ; l_total_bytes number ; l_unused_blocks number ; l_unused_bytes number ; l_LastUsedExtFileId number ; l_LastUsedExtBlockId number ; l_LAST_USED_BLOCK number ; l_segment_space_mgmt varchar2 ( 255 ); l_unformatted_blocks number ; l_unformatted_bytes number ; l_fs1_blocks number ; l_fs1_bytes number ; l_fs2_blocks number ; l_fs2_bytes number ; l_fs3_blocks number ; l_fs3_bytes number ; l_fs4_blocks number ; l_fs4_bytes number ; l_full_blocks number ; l_full_bytes number ; -- Inline procedure to print out numbers nicely formatted -- with a simple label. PROCEDURE p(p_label in varchar2 , p_num in number ) IS BEGIN dbms_output.put_line(rpad(p_label, 40 , ' . ' ) || to_char(p_num, ' 999,999,999,999 ' )); END ; BEGIN -- This query is executed dynamically in order to allow this procedure -- to be created by a user who has access to DBA_SEGMENTS/TABLESPACES -- via a role as is customary. -- NOTE: at runtime, the invoker MUST have access to these two -- views! -- This query determines if the object is an ASSM object or not. BEGIN EXECUTE IMMEDIATE ' select ts.segment_space_management FROM dba_segments seg, dba_tablespaces ts WHERE seg.segment_name = :p_segname AND (:p_partition is null or seg.partition_name = :p_partition) AND seg.owner = :p_owner AND seg.tablespace_name = ts.tablespace_name ' INTO l_segment_space_mgmt USING p_segname, p_partition, p_partition, p_owner; EXCEPTION WHEN too_many_rows THEN dbms_output.put_line( ' This must be a partitioned table, use p_partition => ' ); RETURN ; END ; -- If the object is in an ASSM tablespace, we must use this API -- call to get space information; else we use the FREE_BLOCKS -- API for the user managed segments. IF l_segment_space_mgmt = ' AUTO ' THEN dbms_space.space_usage(p_owner, p_segname, p_type, l_unformatted_blocks, l_unformatted_bytes, l_fs1_blocks, l_fs1_bytes, l_fs2_blocks, l_fs2_bytes, l_fs3_blocks, l_fs3_bytes, l_fs4_blocks, l_fs4_bytes, l_full_blocks, l_full_bytes, p_partition); p( ' Unformatted Blocks ' , l_unformatted_blocks); p( ' FS1 Blocks (0-25) ' , l_fs1_blocks); p( ' FS2 Blocks (25-50) ' , l_fs2_blocks); p( ' FS3 Blocks (50-75) ' , l_fs3_blocks); p( ' FS4 Blocks (75-100) ' , l_fs4_blocks); p( ' Full Blocks ' , l_full_blocks); ELSE dbms_space.free_blocks(segment_owner => p_owner, segment_name => p_segname, segment_type => p_type, freelist_group_id => 0 , free_blks => l_free_blks); p( ' Free Blocks ' , l_free_blks); END IF ; -- And then the unused space API call to get the rest of the -- information. dbms_space.unused_space(segment_owner => p_owner, segment_name => p_segname, segment_type => p_type, partition_name => p_partition, total_blocks => l_total_blocks, total_bytes => l_total_bytes, unused_blocks => l_unused_blocks, unused_bytes => l_unused_bytes, LAST_USED_EXTENT_FILE_ID => l_LastUsedExtFileId, LAST_USED_EXTENT_BLOCK_ID => l_LastUsedExtBlockId, LAST_USED_BLOCK => l_LAST_USED_BLOCK); p( ' Total Blocks ' , l_total_blocks); p( ' Total Bytes ' , l_total_bytes); p( ' Total MBytes ' , trunc(l_total_bytes / 1024 / 1024 )); p( ' Unused Blocks ' , l_unused_blocks); p( ' Unused Bytes ' , l_unused_bytes); p( ' Last Used Ext FileId ' , l_LastUsedExtFileId); p( ' Last Used Ext BlockId ' , l_LastUsedExtBlockId); p( ' Last Used Block ' , l_LAST_USED_BLOCK); END ;

실행 결 과 는 다음 과 같 습 니 다.
SQL code

    
    
    
    
SQL > exec show_space2( ' test_stevie ' ); Free Blocks............................. 3 Total Blocks............................ 32 Total Bytes............................. 262 , 144 Total MBytes............................ 0 Unused Blocks........................... 0 Unused Bytes............................ 0 Last Used Ext FileId.................... 27 Last Used Ext BlockId................... 41 , 617 Last Used Block......................... 8 PL / SQL procedure successfully completed

  
  
  
  
⑦ , V$parameter ,ORACLE , 。
SQL code

     
     
     
     
SELECT NAME, VALUE, decode(isdefault, ' TRUE ' , ' Y ' , ' N ' ) as " Default ", decode(ISEM, ' TRUE ' , ' Y ' , ' N ' ) as SesMod, decode(ISYM, ' IMMEDIATE ' , ' I ' , ' DEFERRED ' , ' D ' , ' FALSE ' , ' N ' ) as SysMod, decode(IMOD, ' MODIFIED ' , ' U ' , ' SYS_MODIFIED ' , ' S ' , ' N ' ) as Modified, decode(IADJ, ' TRUE ' , ' Y ' , ' N ' ) as Adjusted, description FROM ( -- GV$SYSTEM_PARAMETER SELECT x.inst_id as instance, x.indx + 1 , ksppinm as NAME, ksppity, ksppstvl as VALUE, ksppstdf as isdefault, decode(bitand(ksppiflg / 256 , 1 ), 1 , ' TRUE ' , ' FALSE ' ) as ISEM, decode(bitand(ksppiflg / 65536 , 3 ), 1 , ' IMMEDIATE ' , 2 , ' DEFERRED ' , ' FALSE ' ) as ISYM, decode(bitand(ksppstvf, 7 ), 1 , ' MODIFIED ' , ' FALSE ' ) as IMOD, decode(bitand(ksppstvf, 2 ), 2 , ' TRUE ' , ' FALSE ' ) as IADJ, ksppdesc as DESCRIPTION FROM x$ksppi x, x$ksppsv y WHERE x.indx = y.indx AND substr(ksppinm, 1 , 1 ) = ' _ ' AND x.inst_id = USERENV( ' Instance ' )) ORDER BY NAME

⑨ 데이터베이스 의 색인 이 잦 은 Delete 작업 이 있 으 면 색인 에 많은 조각 이 생 길 수 있 으 므 로 색인 블록 을 합 쳐 파편 을 줄 이 고 조회 속 도 를 높 일 수 있 도록 모든 색인 을 다시 REBUILD 해 야 합 니 다.
SQL code

     
     
     
     
SQL > set heading off SQL > set feedback off SQL > spool d:/ index .sql SQL > SELECT ' alter index ' || index_name || ' rebuild ' || ' tablespace INDEXES storage(initial 256K next 256K pctincrease 0); ' FROM all_indexes WHERE (tablespace_name != ' INDEXES ' OR next_extent != ( 256 * 1024 )) AND owner = USER SQL > spool off

이때, 우 리 는 spool 에서 나 온 파일 을 열 면 바로 실행 할 수 있 습 니 다. 
⑨ 표 의 메 인 키 는 필요 하 다. 메 인 키 가 없 는 시 계 는 디자인 규범 에 부합 되 지 않 기 때문에 우 리 는 표 에 메 인 키 가 있 는 지 모니터링 해 야 한다.
SQL code

     
     
     
     
SELECT table_name FROM all_tables WHERE owner = USER MINUS SELECT table_name FROM all_constraints WHERE owner = USER AND constraint_type = ' P '
2.      
① , , , , data buffer 。 
, 。
SQL code

      
      
      
      
SELECT a.VALUE + b.VALUE logical_reads, c.VALUE phys_reads, round ( 100 * ( 1 - c.value / (a.value + b.value)), 4 ) hit_ratio FROM v$sysstat a, v$sysstat b, v$sysstat c WHERE a.NAME = ' db block gets ' AND b.NAME = ' consistent gets ' AND c.NAME = ' physical reads '

② 라 이브 러 리 버퍼 는 SQL 문장의 리 셋 률 을 설명 합 니 다. 물론 하나의 SQL 문 구 는 실 행 될 수록 좋 습 니 다. 리 셋 률 이 높 으 면 공유 탱크 의 크기 를 늘 리 거나 Bind 변 수 를 향상 시 키 는 것 을 고려 합 니 다.다음 문 구 는 Sql 문장의 과부하 율 을 조회 하 였 으 며, 낮 을 수록 좋다.
SQL code

      
      
      
      
SELECT SUM (pins) total_pins, SUM (reloads) total_reloads, SUM (reloads) / SUM (pins) * 100 libcache_reload_ratio FROM v$librarycache

③ 사용자 잠 금, 데이터 뱅 크 의 잠 금 은 자원 을 소모 할 때 가 있 습 니 다. 특히 잠 금 대기 가 발생 할 때 우 리 는 기다 리 는 자 물 쇠 를 찾 아야 합 니 다. 가능 하 다 면 이 프로 세 스 를 죽여 야 합 니 다.  이 문 구 는 데이터베이스 에 있 는 모든 DML 문 구 를 찾 을 수 있 고 모든 DML 문 구 는 사실 두 개의 자물쇠 가 생 겼 으 며 하 나 는 시계 자물쇠 이 고 하 나 는 줄 자물쇠 임 을 발견 할 수 있다.  alter system kill session 'sid, serial \ #' 를 통 해 세 션 을 죽 일 수 있 습 니 다.
SQL code

      
      
      
      
SELECT /* + rule */ s.username, decode(l.type, ' TM ' , ' TABLE LOCK ' , ' TX ' , ' ROW LOCK ' , NULL ) LOCK_LEVEL, o.owner, o. object_name , o.object_type, s.sid, s.serial#, s.terminal, s.machine, s.program, s.osuser FROM v$session s, v$lock l, dba_objects o WHERE l.sid = s.sid AND l.id1 = o. object_id ( + ) AND s.username is NOT NULL

④ 잠 금 과 기다 림, 잠 금 대기 가 발생 하면 누가 시 계 를 잠 그 고 누 구 를 기다 리 게 하 는 지 더 알 고 싶 을 수 있 습 니 다.  아래 의 문 구 는 누가 시 계 를 잠 갔 는 지, 누가 기다 리 고 있 는 지 알 수 있다.
SQL code

      
      
      
      
SELECT /* + rule */ lpad( ' ' , decode(l.xidusn, 0 , 3 , 0 )) || l.oracle_username User_name , sysdate, o.owner, o. object_name , o.object_type, s.sid, s.serial# FROM v$locked_object l, dba_objects o, v$session s WHERE l. object_id = o. object_id AND l.session_id = s.sid ORDER BY o. object_id , xidusn DESC

상기 조회 결 과 는 트 리 구조 로 하위 노드 가 있 으 면 대기 가 있 음 을 나타 낸다.자물쇠 가 어떤 스크롤 백 을 사 용 했 는 지 알 고 싶다 면 V $rollname 과 연결 할 수 있 습 니 다. 그 중에서 xidusn 은 스크롤 백 의 USN 입 니 다.⑤ 트 랜 잭 션 이나 잠 금 이 발생 하면 어떤 스크롤 백 이 사용 되 고 있 는 지 알 고 싶 습 니까?사실 사무 표를 통 해 우 리 는 사무 와 스크롤 백 간 의 관 계 를 상세 하 게 조회 할 수 있다.또한 세 션 시트 와 관련 이 있다 면 어떤 세 션 이 이 일 을 시 작 했 는 지 알 수 있 습 니 다.
SQL code

      
      
      
      
SELECT s.USERNAME, s.SID, s.SERIAL#, t.UBAFIL "UBA filenum", t.UBABLK "UBA Block number ", t.USED_UBLK " Number os undo Blocks Used", t.START_TIME, t.STATUS, t.START_SCNB, t.XIDUSN RollID, r.NAME RollName FROM v$session s, v$ transaction t, v$rollname r WHERE s.SADDR = t.SES_ADDR AND t.XIDUSN = r.usn

⑥ 현재 어떤 사용자 가 임시 구간 을 이용 하고 있 는 지 알 고 싶 습 니까?이 문 구 는 어떤 사용자 가 임시 구간 을 이용 하고 있 는 지 알려 줄 것 이다.
SQL code

      
      
      
      
SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, a.sid, a.serial#, a.username, a.osuser, a.status, c.sql_text FROM v$session a, v$sort_usage b, v$sql c WHERE a.saddr = b.session_addr AND a.sql_address = c.address( + ) ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks;

⑦ 세 션 을 이용 하여 추적 하거나 세 션 의 추적 파일 을 보 려 면 OS 의 프로 세 스 나 스 레 드 번 호 를 조회 하 는 것 이 매우 중요 합 니 다. 파일 의 이름 에는 이 정보 가 포함 되 어 있 기 때문에 아래 의 문 구 는 프로 세 스 나 스 레 드 번 호 를 조회 하여 해당 하 는 파일 을 찾 을 수 있 습 니 다.
SQL code

      
      
      
      
SELECT p1.value || ' / ' || p2.value || ' _ora_ ' || p.spid filename FROM v$process p, v$session s, v$parameter p1, v$parameter p2 WHERE p1.name = ' user_dump_dest ' AND p2.name = ' db_name ' AND p.addr = s.paddr AND s.audsid = USERENV( ' SESSIONID ' );

⑨ ORACLE 9i 에 서 는 색인 사용 을 모니터링 할 수 있 으 며, 사 용 된 색인 이 없 으 면 완전히 삭제 할 수 있 으 며, DML 작업 시 동작 을 줄 일 수 있 습 니 다.  다음은 색인 모니터링 을 시작 하고 색인 모니터링 을 중단 하 는 스 크 립 트 입 니 다.
SQL code

      
      
      
      
SQL > set heading off SQL > set echo off SQL > set feedback off SQL > set pages 10000 SQL > spool start_index_monitor.sql SQL > SELECT ' alter index ' || owner || ' . ' || index_name || ' monitoring usage; ' SQL > FROM dba_indexes SQL > WHERE owner = USER ; SQL > spool off set heading on SQL > set echo on SQL > set feedback on -- -------------------------- SQL > set heading off SQL > set echo off SQL > set feedback off SQL > set pages 10000 SQL > spool stop_index_monitor.sql SQL > SELECT ' alter index ' || owner || ' . ' || index_name || ' nomonitoring usage; ' SQL > FROM dba_indexes SQL > WHERE owner = USER ; SQL > spool off SQL > set heading on SQL > set echo on SQL > set feedback on

더 많은 사용 자 를 감시 할 필요 가 있다 면, owner = User 를 다른 것 으로 바 꿀 수 있 습 니 다.  모니터링 결 과 는 보기 v $objectusage 에서 조회 합 니 다.
3.     
① id。
SQL code

      
      
      
      
select spid from v$process where addr in ( select paddr from v$session where sid = $sid)

② 프로 세 스 id 에 따라 인 스 턴 스 를 봅 니 다.
SQL code

      
      
      
      
select sid from v$session where paddr in ( select addr from v$process where spid = $pid)

③ 현재 session 에 있 는 sql 문 을 봅 니 다.
SQL code

      
      
      
      
select SQL_TEXT from V$SQLTEXT where HASH_VALUE = ( select SQL_HASH_VALUE from v$session where sid = & sid) order by PIECE

④ v $session 보기wait。
SQL code

      
      
      
      
select * from v$session_wait where event not like ' rdbms% ' and event not like ' SQL*N% ' and event not like ' %timer ' ;

⑤ Dictionary 캐 시 적중률
SQL code

      
      
      
      
/* It should be about 15%, otherwise add share_pool_size */ SELECT sum (getmisses) / sum (gets) FROM v$rowcache;

⑥ 파일 번호 와 데이터 블록 을 이용 하여 DB 의 각 대상 을 봅 니 다.
SQL code

      
      
      
      
select owner,segment_name,segment_type from dba_extents where file_id = [ $fno and &dno between block_id and block_id + blocks - 1 ]

⑦ 핫 블록 을 찾 습 니 다.
SQL code

      
      
      
      
select /* + ordered */ e.owner || ' . ' || e.segment_name segment_name, e.extent_id extent#, x.dbablk - e.block_id + 1 block#, x.tch, l.child# from sys.v$latch_children l, sys.x$bh x, sys.dba_extents e where l.name = ' cache buffers chains ' and l.sleeps > & sleep_count and x.hladdr = l.addr and e. file_id = x. file # and x.dbablk between e.block_id and e.block_id + e.blocks - 1 ;

⑨ 파일 마다 대기 이 벤트 를 찾아낸다.
SQL code

      
      
      
      
select df.name, kf. count from v$datafile df, x$kcbfwait kf where (kf.indx + 1 ) = df. file #;

⑨ 대기 이 벤트 를 일 으 키 는 SQL 문 구 를 찾 습 니 다.
SQL code

      
      
      
      
select sql_text, c.event from v$sqlarea a, v$session b, v$session_wait c where a.address = b.sql_address and b.sid = c.sid;

⑩ pfile 에서 시작 하 는 지 spfile 에서 시작 하 는 지 판단 합 니 다.
SQL code

      
      
      
      
SQL > select decode( count ( * ), 1 , ' spfile ' , ' pfile ' ) as DECODE 2 from v$spparameter 3 where rownum = 1 4 and isspecified = ' TRUE ' ; DECODE -- ---- spfile SQL >

좋은 웹페이지 즐겨찾기