반응형

서버 프로세스

** 서버 프로세스 상태

SELECT sid, serial#, username, status "Status of Session",
       server "ServerType", osuser, machine, program, process
FROM   v$session;

** PGA 상태(전체 세션)

SELECT MEM.value "PGA", DISK.value "Temporary 테이블스페이스",
       (disk.value/mem.value) * 100 "Ratio"
FROM   v$sysstat MEM, v$sysstat DISK
WHERE  MEM.name = 'sorts (memory)'
   AND DISK.name = 'sorts (disk)';

 

**  PGA 상태 (세션 별)

SELECT  A.process, A.username, B.block_gets, B.consistent_gets
        , B.physical_reads
FROM    v$sess_io B, v$session A
WHERE   B.sid=A.sid

 

**  UGA 상태 (Shared_Pool)

SELECT SUM(value) "Total Session Memory"
FROM   v$mystat A, v$statname B
WHERE  name = 'session uga memory'
   AND A.statistic# = B.statistic#;

 

 

 

 

데이터 버퍼 캐쉬

** 데이터 버퍼 캐쉬 구조

SELECT id, name, block_size, buffers
FROM   v$buffer_pool;


**  히트율

SELECT phy.value "Physical Read",cur.value+con.value
   "Buffer Cache Read",
   (1-((phy.value) / (cur.value+con.value)))*100 "히트율"
FROM   v$sysstat cur, v$sysstat con, v$sysstat phy
WHERE  cur.name = 'db block gets'
   and con.name = 'consistent gets'
   and phy.name = 'physical reads';

** 대기상태

SELECT (SELECT total_waits FROM   v$system_event WHERE  event = 'free buffer waits') "Free Buffer Waits",
       (SELECT total_waits FROM   v$system_event WHERE  event = 'buffer busy waits') "Buffer Busy Waits"
FROM dual;
** 메모리 사용상태(세션 별)
SELECT A.process, A.username, B.block_gets, B.consistent_gets, B.physical_reads
FROM   v$sess_io B, v$session A
WHERE  B.sid = A.sid;

 

 

로그 버퍼 (히트율)

SELECT S1.value "Redo Alloc Retries",
       S2.value "Redo Entries",
       S1.value / S2.value * 100 "히트율"
FROM   v$sysstat S1, v$sysstat S2
WHERE  S1.name = 'redo buffer alLocation retries'
   AND S2.name = 'redo entries';

 

공유 풀 영역 (Shared Pool Area)

** Reload 상태

SELECT Gets, Gethits, Gethitratio*100 "히트율"
FROM   v$Librarycache
WHERE  namespace = 'SQL AREA';

** 히트율

SELECT SUM(pins) "Executions(PINS)",
       SUM(reloads) "Cache Misses(RELOADS) " ,
       SUM(reloads) / SUM(pins)*100 "Reload율"
FROM   v$Librarycache;

 

** Reserved Pool(응답상태)

SELECT requests, request_misses, request_failures, free_space,
       avg_free_size, max_free_size, used_space,avg_used_size
FROM   v$shared_pool_reserved;

** 파싱된 SQL문의 상태

SELECT cpu_time, elapsed_time,executions, loads, invalidations, version_count,
       parse_calls, sorts,  sql_text
FROM   v$sqlarea
WHERE  sql_text NOT LIKE '%$%' AND command_type IN (2,3,6,7)
   AND rownum <= 200
ORDER BY sql_text DESC;

 

** 파싱된 SQL문의(메모리 순)

SELECT buffer_gets, sql_text
FROM   v$sqlarea
WHERE  sql_text NOT LIKE '%$%'
   AND command_type IN(2,3,6,7)
ORDER BY buffer_gets DESC;

 

** 파싱된 SQL문의(I/O 순)

SELECT disk_reads, sql_text
FROM   v$sqlarea
WHERE  sql_text NOT LIKE '%$%'
   AND command_type IN(2,3,6,7)
ORDER BY disk_reads DESC;

 

Large Pool (free memory 상태)

SELECT pool, name, bytes
FROM   v$sgastat
WHERE  pool = 'large pool'; 

 

 

DB Writer 정보 

** DBWR 정보

SELECT spid, program, username, serial#, terminal
FROM   v$process
WHERE  program LIKE '%DB%';

** 대기상태

SELECT event, total_waits, total_timeouts, time_waited, average_wait
FROM   v$system_event
WHERE  event = 'free buffer waits';

 

CKPT 정보 

** CKPT  정보

SELECT spid, program, username, serial#, terminal
FROM   v$process
WHERE  program LIKE '%CKPT%';

 

** 대기상태

SELECT event, total_waits, time_waited, average_wait
FROM   v$system_event
WHERE  event LIKE 'log file switch (checkpoint%';

 

LGWR 정보 

** LGWR  정보

SELECT spid, program, username, serial#, terminal
FROM   v$process
WHERE  program LIKE '%LGWR%';

** 대기상태

SELECT sid, event, seconds_in_wait, state
FROM   v$session_wait
WHERE  event = 'log buffer space%'; 

PMON 정보 

** PMON  정보

SELECT spid, program, username, serial#, terminal
FROM   v$process
WHERE  program LIKE '%PMON%';

** 대기상태

SELECT event, total_waits, total_timeouts, time_waited, average_wait
FROM   v$system_event
WHERE  event = 'pmon timer';

 

SMON 정보 

** SMON  정보

SELECT spid, program, username, serial#, terminal
FROM   v$process
WHERE  program LIKE '%SMON%'; 

 

** 대기상태

SELECT event, total_waits, total_timeouts, time_waited, average_wait
FROM   v$system_event
WHERE  event = 'smon timer';

Data Files 

** Data-File 구조

SELECT B.file_id "File #", B.file_name,
       B.tablespace_name, B.bytes "Bytes",
       ((B.bytes - sum(nvl(A.bytes,0)))) "Used Space",
       (SUM(NVL(A.bytes,0)))  "Free Space",
       (SUM(NVL(A.bytes,0)) / (B.bytes)) * 100 "FreeSpace Ratio"
FROM   sys.dba_free_space A, sys.dba_data_files B
WHERE  A.file_id(+) = B.file_id
GROUP BY B.tablespace_name, B.file_id, B.file_name, B.bytes
ORDER BY B.file_id;

** Disk I/O 상태

select name, phyrds, phywrts
FROM   v$datafile DF, v$filestat FS
WHERE  DF.file# = FS.file#;

** Object 종류

SELECT A.owner, A.object_id, A.object_name, B.partition_name,
       B.tablespace_name, B.bytes, B.blocks, B.extents,
       B.initial_extent, B.next_extent, B.min_extents,
       B.max_extents, B.pct_increase, B.freelists,
       B.relative_fno, B.buffer_pool, A.created, A.status
FROM   dba_objects A, dba_segments B
WHERE  A.owner = 'SCOTT'
   AND A.object_type = 'TABLE'
ORDER BY A.object_name;

 

** 롤백 세그먼트(경합 상태)

 

SELECT SUM(waits) "Waits", SUM(gets) "Gets",
       100 * SUM(waits)/SUM(gets) "히트율"
FROM   v$rollstat;

** 롤백 세그먼트(대기 상태)

 

SELECT (SELECT count FROM   v$waitstat WHERE  class = 'undo header') "Undo Header",
       (SELECT count FROM   v$waitstat WHERE  class = 'undo block')  "Undo Block",
       (SELECT count FROM   v$waitstat WHERE  class = 'system undo header') "System Undo Header",
       (SELECT count FROM   v$waitstat WHERE  class = 'system undo block') "System Undo block"
FROM dual;

 

**  TEMP 세그먼트(경합 상태)

SELECT username, user, contents, segtype,
       extents, blocks
FROM   v$sort_usage;

 

** Lock 상태 (Holder & Waiter)

SELECT LPAD(' ',DECODE(request,0,0,1))||sid sess,
       id1, id2, lmode, request, type
FROM   v$lock
WHERE  id1 IN (SELECT id1 FROM v$lock WHERE lmode = 0)
ORDER BY id1, request;

 

** Lock 상태 (Waiters)

SELECT LPAD(' ',DECODE(C.request,0,0,1))||C.sid sess, B.username,
       B.program, C.type, A.sql_text SQL
FROM   v$sqlarea A,v$session B, v$lock C, v$access D
WHERE  C.id1 IN (SELECT id1 FROM v$lock WHERE lmode = 0 OR lmode = 6)
   AND A.address(+) = B.sql_address
   AND A.hash_value(+) = B.sql_hash_value
   AND B.sid = D.sid
   AND B.sid = C.sid
   AND D.sid = C.sid
   AND D.owner != 'SYS'
ORDER BY C.id1, C.request;

 

** DB 사용자

 

SELECT username, default_tablespace, temporary_tablespace,
       account_status, expiry_date, lock_date, profile
FROM   dba_users;

 

 Control-file 구조

SELECT *
FROM   v$controlfile; 

 

 Redo log files

** Redo-Log Files 구조

SELECT A.group# col1, bytes / 1024 col2,
       members col3, member col4 ,
       A.status col5, sequence#
FROM   v$log A, v$logfile B
WHERE  A.group# = B.group#;

 

** I/O 대기상태

SELECT event, total_waits, time_waited, average_wait
FROM   v$system_event
WHERE  event LIKE 'log file switch completion%';

Archived log files

SELECT value
FROM   v$parameter
WHERE  name = 'log_archive_start';
위의 쿼리값이 true이면 다음 문장을 실행한다.

SELECT name, sequence#, first_change#, first_time, 
       next_change#, next_time, archived, status 
FROM   v$archived_log;

 

Parameter file

SELECT name, type, value, isdefault
FROM   v$parameter;


 

Password file

SELECT value
FROM   v$parameter
WHERE  name = 'remote_login_passwordfile'
   AND (value = 'EXCLUSIVE' OR value = 'SHARED');

 

사용자 프로세스 

SELECT sid, serial#, osuser, process, machine, program, 
       to_char(logon_time, 'yyyy/mm/dd hh:mi:ss') as Logon_Time
FROM   v$session 
WHERE  (upper(server) <> 'PSEUDO' AND UPPER(program) NOT LIKE 'oracle.exe%')
       and serial# <> 1;
반응형
반응형

아래와 같이 간단히 SQL PLUS 상에서 설정하면

출력이 이쁘게 나온다

REM
REM Pretty SQLPLUS
REM

SET PAGES 200 LINES 200
SET FEEDBACK OFF

COL OBJECT_TYPE FORMAT A12
COL NAME FORMAT A30




 

 

반응형

'Database > ORACLE' 카테고리의 다른 글

테이블의 주석을 변경해 보자  (0) 2009.03.07
오라클 시스템 모니터링 (Monitoring for Oracle)  (0) 2009.03.07
UNDO TABLESPACE SIZE  (0) 2009.03.07
테이블 스페이스 조회 쿼리  (0) 2009.03.07
SQLPLUS 환경 설정 하기  (0) 2009.03.07
반응형

얼마전 UNDO TABLESPACE SIZE 가 비대하게 늘어나 ONLINE 중에 이를 줄이는 작업이 있었습니다.

다음과 같이 UNDO TABLESPACE 를 추가로 하나 만들고 SWITCH 하는 방법으로 ONLINE 에 영향 없이 UNOD SIZE 를 줄일수 있습니다.

참고하세요

1. UNDO TABLESPACE 생성

create undo tablespace UNDOTBS2 datafile '/dev/vx/rdsk/dg_us2db06/df_pusdb2_16g_0085' size 16384m;

 

2. UNDO DATAFILE 추가

alter tablespace UNDOTBS2 add datafile  '/dev/vx/rdsk/dg_us2db06/df_pusdb2_16g_0085' size 16384m ;

 

3. AUTOEXTED ON 으로 변경

alter database datafile /dev/vx/rdsk/dg_us2db06/df_pusdb2_16g_0085' autoextend on maxsize 16384m;

4. UNDO TABLESPACE SWITCH  

alter system set undo_tablespace = UNDOTBS2

5. 기존 UNDO TABLESPACE 삭제

drop tablespace UNDOTBS1;

6. 기존 이름으로 UNDO TABLESPACE RENAME  ( TABLESPACE RENAME 은 10G 이후에서 가능 )

 alter tablespace UNDOTBS2 rename to  UNDOTBS1;

PS : 만약 기존UNDO TABLESPACE 명이 새로운 UNDO TABLESPACE 로 변경이된다면 반드시 INIT 파라미터에서 UNDO 파라미터값 변경해야합니다.

반응형
반응형

- 테이블 스페이스 별 공간 조회

SELECT
     a.tablespace_name, ROUND(SUM(a.total)/1024/1024, 2) "Total(M)",
     ROUND((SUM(a.total) - SUM(NVL(b.free, 0)))/1024/1024, 2) "Used(M)",
     ROUND(SUM(NVL(b.free, 0))/1024/1024,2) "Free(M)",
     ROUND((SUM(a.total) - SUM(NVL(b.free, 0))) / SUM(a.total) * 100 , 2) "Used(%)"
FROM
     (
       SELECT d.tablespace_name, d.file_id, sum(d.bytes) total
       FROM dba_data_files d
       GROUP BY d.tablespace_name, d.file_id
      ) a,
     (
       SELECT f.file_id, sum(f.bytes) free
       FROM dba_free_space f
       GROUP BY f.file_id
     ) b
WHERE
     a.file_id = b.file_id(+)
GROUP BY a.tablespace_name;

 

- 물리적 위치 조회

SELECT
          TABLESPACE_NAME,FILE_NAME
FROM
          DBA_DATA_FILES;


 

반응형

'Database > ORACLE' 카테고리의 다른 글

SQLPLUS 환경에서 이쁘게 출력하기 ~  (0) 2009.03.07
UNDO TABLESPACE SIZE  (0) 2009.03.07
SQLPLUS 환경 설정 하기  (0) 2009.03.07
ORA-01659 해결방법  (1) 2009.03.07
ORA-12541 오류 대처 방법  (0) 2009.03.07
반응형

-- linesize도 record 길이만큼 지정하여 아래로 구분되지 않도록 합니다.
SQL>SET LINESIZE 300

-- 명령이 display되지 않도록 합니다.
SQL>SET ECHO OFF

-- 조회 결과가 화면에 나오지 않도록 합니다.
SQL>SET TERM OFF

-- data가 들어가는 화일 이름을 지정 합니다.
SQL>SPOOL C:\test.txt

-- 스크립트 파일을 실행 시킵니다.
SQL>@C:\SpoolSelect.sql

SQL>SPOOL Off

test.txt file이 생성 되었는지 확인 합니다.


2. 필드 값 구분하기.

1-1.select empno||' '||ename from emp; <== Tab으로 구분

1-2.select empno||','||ename from emp; <== 콤마로 구분

2-1.select empno||'"'||ename from emp; <== 필드 값에 큰따옴표 붙이는 방법
(작은 따옴표는 예약어 이기 때문에 에러 남)
반응형

'Database > ORACLE' 카테고리의 다른 글

UNDO TABLESPACE SIZE  (0) 2009.03.07
테이블 스페이스 조회 쿼리  (0) 2009.03.07
ORA-01659 해결방법  (1) 2009.03.07
ORA-12541 오류 대처 방법  (0) 2009.03.07
오라클 IMP 사용방법  (0) 2009.03.07
반응형


IMP-00003: ORACLE 오류 1659 가 발생했습니다.
ORA-01659: 146 을(를) 넘어서 테이블스페이스 USERS에 MINEXTENTS를 할당할 수 없습니다.


=====  상    황  =====

발생 : 대용량의 오라클백업파일(10기가이상)을 복구(import)하는 중 위와같은 에러가 발생하였다

오라클버젼 : oracle9i

OS : window xp pro sp2

작업자 : 오라클 만진지 3주 접어들어가는 쭈우...


===== 해 결 방 법 =====

1. oracleclub.com에 검색해도 별다른것을 찾지 못함..

2. - Oracle Enterprise Manager Console > 데이터베이스 > 저장영역 > 테이블스페이드

    - USERS 더블클릭!

    - USERS01.DBF의 저장영역이 ' 값 : 32767MB'로 설정되어있음

    - 해당 파일은 이미 32기가가 풀로 가득 차 버린 상태...

3. 저 저장영역을 '무제한'으로 풀어버림

ALTER DATABASE
DATAFILE 'D:\ORADATA\CHINA\USERS01.DBF' AUTOEXTEND
ON MAXSIZE UNLIMITED
 

4. 무제한으로 풀은 후 다시 봐도 값이 32767MB임... 

5. 그럼 숫자를 강제로 64기가로 조절해버림

 ALTER DATABASE
DATAFILE 'D:\ORADATA\CHINA\USERS01.DBF' AUTOEXTEND
ON MAXSIZE  64767M

 

5. 에러발생

ORA-03206: maximum file size of (8290176) blocks in AUTOEXTEND clause is out of range

ORA-03206: AUTOEXTEN절에 (8290176)블록의 최대 파일 크기가 범위를 넘었습니다

6. 아..오라클의 데이터 파일은 32기가가 안넘나보군..


7. 데이터파일을 하나 더 등록해줌

   USERS01.DBF는 32기가로 가득 차 있고 USERS02.DBF파일을 하나 더 만들어줌

 ALTER TABLESPACE "USERS"
    ADD
    DATAFILE 'D:\ORADATA\CHINA\USERS02.DBF' SIZE 5M AUTOEXTEND
    ON MAXSIZE UNLIMITED


8. 완료..

[출처] 오라클 : ORA-01659 에러|작성자 쭈우

* 여담으로...

일반적으로 tablespace에 붙이는 각 DBF 파일의 크기는 약 20GB정도가 적당한 것 같다....

또한 인덱스 공간은 약 10GB으로 쪼개는 것이 적당하다고 생각한다.

이유는 너무 작으면 연속된 데이터를 쓰는데 부적합하며

너무 크다면 관리하기가 어렵고, i/o 속도 저하가 발생한다 (작은것에 비례하여 물론 너무 작다면 마찬가지다...)

반응형

'Database > ORACLE' 카테고리의 다른 글

테이블 스페이스 조회 쿼리  (0) 2009.03.07
SQLPLUS 환경 설정 하기  (0) 2009.03.07
ORA-12541 오류 대처 방법  (0) 2009.03.07
오라클 IMP 사용방법  (0) 2009.03.07
오라클 EXP 사용하기  (0) 2009.03.07
반응형

ORA-12541: TNS:리스너가 아닙니다


확인사항 ~

1. tnsnames.ora에 접속정보(ip,port,sid)를 저장후 tnsping을 시도해본다

   ping이 안된다면 원격DB의 리스너가 작동이 안된것이다.

   tnsping -> 1521 포트가 열려있는지 확인하는 명령
 
  

2. 원격지의 DB서버에 접근한다.

    telnet or ssh 방식으로 오라클이 설치된 서버에 접근한다.
  

3. lsnrctl status 
   상태를 조회하고 멈춰 있다면

    lsnrctl start 리스너명  <- 리스너를 가동시킨다

    보통 lsnrctl start를 통해 실행한다

    물론 fedora 방식에서는 selinux 방식을 풀어주는것으로도 작동하는 경우도 잇음.    

4. 정상적으로 리스너가 올라왔다면

    lsnrctl status 를 통해 조회하면 알수 있다.

    자 이제 내 컴퓨터 tnsping을 재시도

반응형

'Database > ORACLE' 카테고리의 다른 글

SQLPLUS 환경 설정 하기  (0) 2009.03.07
ORA-01659 해결방법  (1) 2009.03.07
오라클 IMP 사용방법  (0) 2009.03.07
오라클 EXP 사용하기  (0) 2009.03.07
오라클 강제 제거하는 방법  (0) 2009.03.07
반응형

imp userid/passwd file=/dmp/file.dmp tables=table_name1,table_name2, ... , table_nameN fromuser=abc touser=new_abc

imp userid(오라클 id)/passwd(오라클 id의 사용암호) file=(exp를 통해 백업받은 덤프 파일) tables=덤프파일내에 있는 테이블중 입력시킬 테이블들 fromuser=(dmp를 받았던 계정) touser=(입력시킬 계정)


매개 변수

  - userid : IMPORT를 실행시키는 계정의 사용자이름/암호명

  - buffer : 행 데이터를 가지고 오는데 사용되는 Buffer의 Bytes 값

  - file : Import(입력)시킬 파일명

  - show : dmp 파일 내용이 화면에 표시되는 여부를 선택
               선택 값 : Y/N

  - ignore : IMPORT중 CREATE명령을 실행시 에러가 발생하면 무시할 것인지 선택
                선택 값 : Y/N

  - indexes : 테이블 INDEX의 IMPORT여부 선택

                 선택 값 : Y/N

  - rows : 테이블 데이터를 IMPORT할 것인가 여부 선택

              선택 값 : Y/N 

              만약 "N"로 설정하면 데이터베이스 객체들에 대한 DDL만이 실행

  - full : FULL엑스포트 덤프 파일이 IMPORT 할때 사용

            선택 값 : Y/N

  - tables : IMPORT될 테이블 리스트

  - commit : 배열(배열의 크기는 BUFFER에 의해 설정됩니다) 단위로 COMMIT을 할것인가 결정
                 기본적으로는 테이블 단위로 COMMIT

  - fromuser : EXPORT덤프 파일로 부터 읽혀져야 하는 객체들을 갖고 있는 테이터베이스 계정

  - touser : EXPORT덤프 안에 있는 객체들이 IMPORT될 데이터베이스 계정

반응형

'Database > ORACLE' 카테고리의 다른 글

ORA-01659 해결방법  (1) 2009.03.07
ORA-12541 오류 대처 방법  (0) 2009.03.07
오라클 EXP 사용하기  (0) 2009.03.07
오라클 강제 제거하는 방법  (0) 2009.03.07
오라클 설치시 발생할수 있는 오류 해결방법  (0) 2009.03.07
반응형

10g 이상에서는 expdp를 사용하면 좋음....

단 속도가 빠른만큼 별도로 약간(?)의 작업은 필요함...

물론 exp 자체는 다른 서버 작업이 불필요하다 ㅎㅎ;



exp test/testpwd@test1 tables=CNG_INFO, MBR file=20080519_table_backup.dmp log=20080519_table_backup.log  rows=y

분석 : exp(구조 및 데이터 출력 명령으로) test(아이디)/testpwd(암호)@test1(오라클 Sid값) 으로 tables=... (포함하는 테이블들을) file=...dmp (..dmp으로 파일을 백업하고) log=..log(log로그를 남기며) rows=y (데이터 행들을 포함한다.)

 

기본 형식

exp userid/passwd tables=table_name file=/tmp/file.dmp

 

매개 변수

 

  - userid : EXPORT를 실행시키고 있는 username/password명.

 

   - buffer : 데이터 행들을 가져오는데 사용되는 버퍼의 크기.

 

   - file : 생성되는 EXPORT덤프 파일명.

 

   - filesize : EXPORT덤프 파일의 최대 크기

 

   - grants : 데이터베이스 객체에 대한 권한 정보의 EXPORT여부 (Y/N 플래그)

 

   - indexes : 테이블에 대한 INDEXES의 EXPORT여부 (Y/N 플래그)

 

   - rows : 행들에 대한 EXPORT여부. (Y/N 플래그)
               만약 “no”이면 데이터는 EXPORT되지않고 테이블의 정의만 EXPORT

 

   - constraints : 테이블에 대한 제약조건 정보의 EXPORT여부 (Y/N 플래그)

 

   - compress : IMPORT에 대비하여 테이블의 데이터를 한 extent로 압축 할것인가의 여부
                      (Y/N 플래그)

 

   - full : 전체 데이터베이스를 EXPORT할것인가의 여부 (Full Level Export) (Y/N 플래그)

 

   - owner : EXPORT될 데이터베이스의 소유자명 (User Level Export)[owner=user]

 

   - tables : export될 테이블의 리스트(Table Level Export) [tables=(table1, table2, ...)]

반응형
반응형

오라클은 설치 화면상에서 설치 삭제를 할수 있습니다.

단, 가끔은 여러가지 이유로 오라클이 강제 삭제가 되지 않는 경우가 발생하는데

아래와 같은 해결책을 사용하면 좋습니다. ~. ~


1. 서비스 중지

윈도우 2000 이전 버젼 : 제어판 -> 서비스

윈도우 2000 이후 : 관리도구 -> 서비스

 

Oracle 시작되는 모든 서비스 명을 중지 시킴

 

2. 레지스트리 정보 삭제

시작 -> 실행 ->  regedit

 

2.1 첫번째 삭제 레지스트리 위치

HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Services

 

밑의 Oracle로 시작하는 모든 레지스트리 삭제

 

2.2 두번째 삭제 레지스트리 위치

HKEY_LOCAL_MACHINE -> SOFOTWARE -> ORACLE

모두 삭제

 

3. 시스템 리부팅

 

4. 오라클 디렉토리 삭제

반응형

+ Recent posts