[오라클 DB관리]23.09.25

망구씨·2023년 9월 25일
0

오라클DB관리

목록 보기
14/19
post-thumbnail

수업전에 용량 없어서 진행

SYS @ orcl > show parameter db_recovery

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +FRA
db_recovery_file_dest_size           big integer 3852M
SYS @ orcl > alter system set db_recovery_file_dest_size = 10G;

System altered.

SYS @ orcl > show parameter db_recovery

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +FRA
db_recovery_file_dest_size           big integer 10G
SYS @ orcl > alter system set undo_tablespace=undotbs1 scope=spfile;

System altered.

📖 12장. 데이터 베이스 자동화 유지 관리

2400건
5400건

오라클은 스스로 자기의 문제를 진단하고 그 문제점에 대한 해결 방법 스크립트(ADVISOR) 도 생성해서 가지고 있습니다. 오라클이 스스로 진단한 문제점을 확인하고 해결하는 책임자는 DBA 자신이고 DBA 가 이 내용을 알아야 오라클이 스스로 알려주는 문제점을 해결해 나가면서 더 풍성한 데이터베이스 관리를 할 수 있습니다.

  문제가 생기면 ---> 중간에서 전달 ---> 업체 
                               ( DBA )

P12-4. 현재 데이터베이스에서 발생하고 있는 큰 이슈들을 확인하는 방법

1. EM 을 통해서 확인하는 것 !

2. SQL 로 확인하는것 !

SQL> select   *
           from  dba_outstanding_alerts; 

➡️ 지난 시간에 snap shot too old 에러를 발생시키려고 update 문을 1000 x 10000 번 실행했습니다. 그러면 archive log file이 엄청 생성되어서 아카이브 로그 파일이 생성되고 저장되는 그 위치가 공간이 부족해집니다. fast recovery area 의 저장공간 사용율 확인하는 쿼리문이 다음과 같습니다.

col name for a32
col size_m for 999,999,999
col used_m for 999,999,999
col pct_used for 999

SELECT name
, ceil( space_limit / 1024 / 1024) SIZE_M
, ceil( space_used  / 1024 / 1024) USED_M
, decode( nvl( space_used, 0),
0, 0
, ceil ( ( space_used / space_limit) * 100) ) PCT_USED
FROM v$recovery_file_dest
ORDER BY name;

P12-6. 옵티마이져 개요

SQL> select  ename, sal               ※  SELECT 문의 처리과정
      from  emp                           
      where  ename='SCOTT';           1. parsing (문법검사, 의미검사)
                                      2. execute (실행계획으로 실행해서 데이터 찾는 과정)
                                      3. fetch  ( 결과를 유져 프로세서 에게 전달)

   SQL -----> 파싱(문법검사) ---> 옵티마이져가 실행계획을 생성 
                       ↓                           ↓
                  서버 프로세서             책 12-6 쪽에 나오는 단계

아래의 방법을 통해서 확인한 실행계획은 실제 실행계획이 아니라 예상 실행계획입니다.

SCOTT @ orcl >   explain plan for
     select ename, sal
       from emp
      where ename='SCOTT';

SCOTT @ orcl > select * from table(dbms_xplan.display);

실제 실행계획은 다음과 같이 확인합니다.

SQL> select  /*+ gather_plan_statistics */  ename, sal
       from  emp
       where   ename='SCOTT'; 

SQL> SELECT * FROM 
       TABLE(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); 

P12-7. 옵티마이져 통계정보

실습1. 매일밤 10시에 자동으로 수집하는 테이블에 대한 옵티마이져 통계정보를 확인합니다.

SQL> alter  session set nls_date_format='RRRR/MM/DD HH24:MI:SS';

SCOTT> select  table_name, last_analyzed
         from  user_tables;

-- 테이블 분석작업(통계정보 수집) 을 수동으로 수행하시오 !

SCOTT> analyze  table  emp  compute  statistics;

SCOTT> select  table_name, last_analyzed
         from  user_tables;

-- 테이블에 대해서 통계정보를 수집하면 다음과 같은 정보가 데이터 베이스에 저장됩니다.

  1. 테이블 크기와 인덱스 크기
  2. 테이블 행수
  3. 평균 행의 수와 row migration 발생 행 수
  4. 인덱스의 지워진 행의 수(목차에는 있는데 실제 책의 페이지는 없는것)
예제: select  table_name, num_rows, last_analyzed
          from  user_tables;
  • 밤 10시에 테이블 통계정보가 자동으로 수집되고 있는지
    SQL로 확인하는 방법
select w.window_name, w.repeat_interval, w.duration
     , cast(w.last_start_date as timestamp with local time zone) last_start_date
     , cast(w.next_start_date as timestamp with local time zone) next_start_date
 from   dba_scheduler_wingroup_members m
     , dba_scheduler_windows w
where  m.window_group_name = 'MAINTENANCE_WINDOW_GROUP'
and    w.window_name = m.window_name;
  • 오라클에서 어떤 기능이 자동으로 수행되고 있는지 확인하시오 !
 select client_name, status
  from dba_autotask_client;

auto optimizer stats collection	ENABLED
auto space advisor	ENABLED
sql tuning advisor	ENABLED
  • 밤10시에 테이블 통계수집을 자동 수집되게하는것을 끄고 싶다.
begin
   dbms_auto_task_admin.disable(
    client_name =>'auto optimizer stats collection',
    operation => null,
    window_name => null );
 end;
/

 select client_name, status
  from dba_autotask_client;

문제. 그럼 다시 밤 10시에 도는 통계정보 수집 기능을 켜시오 !

begin
   dbms_auto_task_admin.enable(
    client_name =>'auto optimizer stats collection',
    operation => null,
    window_name => null );
 end;
/

 select client_name, status
  from dba_autotask_client;

통계정보를 수집하는 방법

  1. em 을 통해서 수집 : p12-9

  2. SQL을 통해서 수집:

  3. table 레벨:

SQL> exec  dbms_stats.gather_table_stats('SCOTT','DEPT');

SQL>  select  table_name, num_rows, last_analyzed
          from  user_tables; 

2.스키마 레벨

SQL> exec  dbms_stats.gather_schema_stats('SCOTT');

SCOTT>  select  table_name, num_rows, last_analyzed
          from  user_tables; 
          
SYS>  select  table_name, num_rows, last_analyzed
          from  dba_tables
          where owner='SCOTT'
          order by num_sows desc nulls last; --scott이 가지고 있는 테이블중 무엇이 제일 큰지?

3. database 레벨 (시간이 오래걸리므로 할 때 주의하셔야합니다.)

SQL> exec  dbms_stats.gather_database_stats;

4. 인덱스의 통계정보 수집

SQL> create  index  emp_sal  on  emp(sal);

SQL> exec dbms_stats.gather_index_stats('SCOTT', 'EMP_SAL');

✅ 현업에서 주로 사용하는 방법은 매일 밤 돌게 한다면 중요한 테이블만 선별해서 따로 테이블 통계정보만 수집하게 합니다. 또는 유져(스키마) 레벨로 통계정보를 수집하게 합니다.

아래의 스크립트를 쉘로 만들어서 리눅스의 crontab 을 이용해서 밤 특정 시간에 자동으로 수행되게끔 하거나

SQL> exec  dbms_stats.gather_schema_stats('SCOTT');

또는 위의 명령어를 오라클의 dbms_job 또는 dbms_scheduler를 이용해서 자동으로 수행되게 합니다.

통계정보 수집환경 설정하기

오라클이 매일밤 10시에 데이터베이스에 있는 모든 테이블들에 대해서 자동으로 통계정보를 수집하는데 모든 테이블들에 대해서 다 수집하는것은 아니고 데이터가 10% 이상 변경된 테이블에 대해서만 수집을 합니다.

실습1. scott 의 emp 테이블은 10%가 아니라 20% 변경되었을때 자동으로 수집되게 하고 싶다면 ?

SYS> exec dbms_stats.set_table_prefs('SCOTT','EMP','STALE_PERCENT', 20);

점심시간 문제. scott 의 dept 테이블은 10% 가 아니라 30% 변경되어야지만 밤10시에 테이블 통계정보가 자동 수집되게 하시오 !

SYS> exec dbms_stats.set_table_prefs('SCOTT','DEPT','STALE_PERCENT', 30);

위에서 에러났던 것 다시 수행함

SYS> @?rdbms/admin/catalog.sql
SYS> @?rdbms/admin/catproc.sql

➡️ 데이터 딕셔너리 및 각종 패키지들을 생성하는 스크립트 입니다. db를 스크립트로 생성하면 반드시 위 2개의 스크립트를 돌려야합니다.

exec dbms_stats.gather_table_stats('SCOTT','DEPT');


📖 위 내용 복습

오라클은 3가지를 자동으로 돌린다.

select client_name, status
  from dba_autotask_client;

auto optimizer stats collection	ENABLED
auto space advisor	ENABLED
sql tuning advisor	ENABLED

통계정보 수집을 자신없으면 꺼야하는데, table레벨, 스키마 레벨 두가지로 직접 해야한다. 평일 돌아가는거 꺼버리고 주말에 돌아가게 하거나 그냥 다 꺼버리기.
스키마레벨은 스캇이 가지고있는 모든 테이블 통계정보 수집, 테이블 레벨은 원하는 테이블만!


문제. sh 계정의 모든 테이블들에 대해 통계정보 수집하기(스키마 레벨)

SYS> exec  dbms_stats.gather_schema_stats('SH');
          
SYS>  select  table_name, num_rows, last_analyzed
          from  dba_tables
          where owner='SH'
          order by num_rows desc nulls last; 
SYS @ orcl > select  table_name, num_rows, last_analyzed
          from  dba_tables
          where owner='SH'
          order by num_rows desc nulls last;   2    3    4

TABLE_NAME                       NUM_ROWS LAST_ANAL
------------------------------ ---------- ---------
SALES                              918843 25-SEP-23

SH @ orcl > select count(*) from sales;

  COUNT(*)
----------
    918843

p.12-13 AWR(Automatic Workload Repository)

오라클은 MMON이라는 백그라운드 프로세서가 한시간에 한번씩 인스턴스의 성능정보를 사진을 찍는다.. 그래서 사진 찍었을 당시에 성능정보를 나중에 확인할 수 있다. (AWR에 저장) 이것을 8일동안 저장함! -> 어제 오후 1시에 db느렸었는데, 원인을 알고싶다? 는 AWR를 찾아본다.
더 자주 보고싶으면 짧게 설정해서 더 많이 사진을 찍는데 너무 많이하게되면 성능이 떨어지게 된다.

AWR(Automatic Workload Repository) 레포트 생성하기

SQL> @?/rdbms/admin/awrrpt.sql;


SYS @ orcl > @?/rdbms/admin/awrrpt.sql;
SYS @ orcl >
SYS @ orcl > Rem $Header: awrrpt.sql 24-oct-2003.12:04:53 pbelknap Exp $
SYS @ orcl > Rem
SYS @ orcl > Rem awrrpt.sql
SYS @ orcl > Rem
SYS @ orcl > Rem Copyright (c) 1999, 2003, Oracle Corporation.  All rights reserved.
SYS @ orcl > Rem
SYS @ orcl > Rem    NAME
SYS @ orcl > Rem      awrrpt.sql
SYS @ orcl > Rem
SYS @ orcl > Rem    DESCRIPTION
SYS @ orcl > Rem      This script defaults the dbid and instance number to that of the
SYS @ orcl > Rem      current instance connected-to, then calls awrrpti.sql to produce
SYS @ orcl > Rem      the Workload Repository report.
SYS @ orcl > Rem
SYS @ orcl > Rem    NOTES
SYS @ orcl > Rem      Run as select_catalog privileges.
SYS @ orcl > Rem      This report is based on the Statspack report.
SYS @ orcl > Rem
SYS @ orcl > Rem      If you want to use this script in an non-interactive fashion,
SYS @ orcl > Rem      see the 'customer-customizable report settings' section in
SYS @ orcl > Rem      awrrpti.sql
SYS @ orcl > Rem
SYS @ orcl > Rem    MODIFIED   (MM/DD/YY)
SYS @ orcl > Rem    pbelknap    10/24/03 - swrfrpt to awrrpt
SYS @ orcl > Rem    pbelknap    10/14/03 - moving params to rpti
SYS @ orcl > Rem    pbelknap    10/02/03 - adding non-interactive mode cmnts
SYS @ orcl > Rem    mlfeng      09/10/03 - heading on
SYS @ orcl > Rem    aime        04/25/03 - aime_going_to_main
SYS @ orcl > Rem    mlfeng      01/27/03 - mlfeng_swrf_reporting
SYS @ orcl > Rem    mlfeng      01/13/03 - Update comments
SYS @ orcl > Rem    mlfeng      07/08/02 - swrf flushing
SYS @ orcl > Rem    mlfeng      06/12/02 - Created
SYS @ orcl > Rem
SYS @ orcl >
SYS @ orcl > --
SYS @ orcl > -- Get the current database/instance information - this will be used
SYS @ orcl > -- later in the report along with bid, eid to lookup snapshots
SYS @ orcl >
SYS @ orcl > set echo off heading on underline on;

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
 1324638472 ORCL                1 orcl

1 row selected.


Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: html

Type Specified:  html


Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
* 1324638472        1 ORCL         orcl         edydr1p0.us.
                                                oracle.com

Using 1324638472 for database Id
Using          1 for instance number


Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing <return> without
specifying a number lists all completed snapshots.


Enter value for num_days:

Listing all Completed Snapshots

                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
orcl         ORCL               108 18 Sep 2023 09:40      1

                                109 18 Sep 2023 11:00      1
                                110 18 Sep 2023 12:00      1
                                111 18 Sep 2023 13:05      1
                                112 18 Sep 2023 14:00      1
                                113 18 Sep 2023 15:00      1
                                114 18 Sep 2023 16:00      1
                                115 18 Sep 2023 17:00      1
                                117 19 Sep 2023 09:37      1
                                118 19 Sep 2023 11:00      1
                                119 19 Sep 2023 12:00      1
                                120 19 Sep 2023 13:04      1
                                121 19 Sep 2023 14:00      1
                                122 19 Sep 2023 15:00      1
                                123 19 Sep 2023 16:00      1

                                124 19 Sep 2023 17:00      1
                                125 19 Sep 2023 18:23      1
                                126 20 Sep 2023 09:46      1
                                127 20 Sep 2023 11:00      1
                                128 20 Sep 2023 12:00      1
                                129 20 Sep 2023 13:18      1
                                130 20 Sep 2023 14:00      1
                                131 20 Sep 2023 15:00      1

                                132 20 Sep 2023 16:00      1
                                133 20 Sep 2023 17:00      1
                                134 20 Sep 2023 18:00      1
                                135 21 Sep 2023 09:41      1
                                136 21 Sep 2023 11:00      1
                                137 21 Sep 2023 12:00      1
                                138 21 Sep 2023 13:07      1
                                139 21 Sep 2023 14:00      1

                                140 21 Sep 2023 15:00      1
                                141 21 Sep 2023 16:00      1
                                142 21 Sep 2023 17:00      1
                                143 22 Sep 2023 09:42      1
                                144 22 Sep 2023 11:00      1
                                145 22 Sep 2023 12:00      1
                                146 22 Sep 2023 13:39      1
                                147 22 Sep 2023 14:00      1
                                148 22 Sep 2023 15:00      1
-- 이런곳 빈곳은 디비 내렸다올린거
                                149 22 Sep 2023 16:21      1

                                150 22 Sep 2023 17:00      1
                                151 25 Sep 2023 13:02      1

                                152 25 Sep 2023 14:00      1

140 ~ 148 처럼 디비 안끊긴 긴거 선택, 이름 설정할때 report03.html 하고 옆에 보면 생김. 인터넷으로 열면 됨

이거 sys AUX 에 들어가있으니까(AWR정보) 풀나지 않도록

실습2. AWR 정보를 수집하는 수집레벨을 확인하기

show parameter statistics_level;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
statistics_level                     string      TYPICAL

SYS @ orcl > @para.sql
Enter value for name: statistics_level
old   3:        where  name  like '%&name%'
new   3:        where  name  like '%statistics_level%'

NAME                           ISSYS_MOD
------------------------------ ---------
statistics_level               IMMEDIATE -- 니까 디폴트인 scope=both or memory
                                         -- false일 때 scope=spfile;

alter system set statistics_level='ALL';

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
statistics_level                     string      ALL


✅ 많은 dba들이 ALL로 설정해서 많이 사용한다. ALL로 하자 !

p.12-19 ADDM(Automatic Database Diagnostic Monitor) 레포트 생성하기

✅ AWR report는 과거 틍정 시간에 어떤 문제가 있었는지 알려준다면, ADDM report는 어떤 문제가 있었는지와 더불어 해결 방법까지 알려준다!

ADDM 레포트 사용방법

1. 수동으로 사진을 찍는다 (원래는 자동인데 우리는 실습이라 정확하게 보기위해 수동)

SQL> exec dbms_workload_repository.create_snapshot;

2. db 에 부하를 준다 (하드파싱을 과도하게 유발하는 스크립트를 돌리는 것) 10000번 파싱

declare
 type rc is ref cursor;
 l_rc rc;
 l_dummy all_objects.object_name%type;
 l_start number default dbms_utility.get_time;
begin
 for i in 1 .. 10000
 loop
  open l_rc for
  'select object_name from all_objects where object_id = ' || i;
  fetch l_rc into l_dummy;
  close l_rc;
 end loop;
 dbms_output.put_line ( round( (dbms_utility.get_time - l_start)/100, 2) || 'seconds');
end;
/


위 사진은 다른 세션에서 top 친건데 CPU가 엄청 높은것을 볼 수 있다. -> 부하
3. 수동으로 사진을 찍는다

SQL> exec dbms_workload_repository.create_snapshot;

4. ADDM report 를 생성한다.

SQL> @?/rdbms/admin/addmrpt.sql 


✅ 아래는 v$sql로 최근 발생했던 리터럴 sql을 찾는 쿼리!
리터럴 sql이란? : sql은 똑같은데 뒤에 상수값만 틀린(바인드변수를 쓰지 않아서) sql!

ex) select object_name from all_object where object_id =숫자;
select substr(sql_text,1,30) , count(*)
  from v$sql
  group by substr(sql_text,1,30) 
  order by 2 desc;

💡 dba에게 유용한 성능 레포트 생성하는 방법 3가지 !

1. awr report : 과거에 발생했던 성능상의 이슈

--Automatic Workload Repository
SQL> @?/rdbms/admin/awrrpt.sql

2. addm report : 과거에 발생했던 성능상의 이슈에 대한 해결책을 알려줌

--Automatic Database Diagnostic Monitor
SQL> @?/rdbms/admin/addmrpt.sql

3. ash report : 최근에 발생한 악성 SQL과 악성 SESSION에 대한 정보를 알려줌

--Active Session History
SQL> @?/rdbms/admin/ashrpt.sql
SCOTT> select count(*) 
         from emp e, emp e, emp e, emp e, emp e, emp e, emp e, emp e, emp e, emp e, emp e, emp e, emp e, emp e, emp e, emp e, emp e, emp e, emp e;



Top SQL > Top SQL with Top Events > SQL ID 누르면 풀코드가 나온다. -> 개발팀에 넘기기 혹은 튜닝해서 넘기기

em 으로 악성SQL 확인

데이터베이스 > 성능 > 맨아래 에서 두번째 그래프 눌러서 들어가면 CPU + CPU 대기 나오는데 거기서 시간 선택하면 그시간에 나온 악성 SQL 확인가능 !

✅ADDM은 저기 버튼 눌러서 보기. 들어가보면 밑에 건전지 모양같은거 있는데 그거 누르면 그 시간대로 간다. 밑에 최상위 SQL문 클릭하고 SQL 튜닝 눌러서 지금 권고자 실행 하면 튜닝도 해준다.

Advisory 프레임워크

p.19-27 자동화된 유지 관리 업무

아래의 3가지 기능이 매일 자동화 되어서 돌아가고있음

select client_name, status
  from dba_autotask_client;

auto optimizer stats collection	ENABLED
auto space advisor	ENABLED
sql tuning advisor	ENABLED

✅ 하루동안 발생했던 악성 SQL top10을 수집해서 자동 튜닝을 해서 아주 좋은 실행계획을 만들고 sql profile로 만든 후 적용한다.

실습1. 아래 이미지는 책 12-29에 나오는 em 화면이다. 찾아보자 !

서버> 오라클스케줄러 > 자동화된 유지 관리 작업 > 구성

서버 생성 Alert

✅ database에서 발생한 이슈를 확인하는 방법
1. SQL 이용 : select reason from dba_outstanding_alerts;
2. EM 이용 :

실습1. ts50 이라는 테이블 스페이스를 하나 생성하고, 이 테이블의 공간을 100% fll이 되도록 데이터를 입력하시오 !

SYS> create tablespace ts51
 datafile '/home/oracle/ts51.dbf' size 10m;
 
SCOTT> create table emp50
  (empno number(10), 
   ename varchar2(10) )
   tablespace ts51;

SCOTT> insert into emp50 values(1111,'aaa');
SCOTT> insert into emp50
        select * from emp50;

실습2. 현재 db에 어떠한 이슈가 있는지 확인

SYS> select reason from dba_outstanding_alerts;

REASON
------------------------------------------------------------------------------
Metrics "Database Time Spent Waiting (%)" is at 100 for event class "Network"

em에서는 데이터베이스 > 진단요약 > 활성장애

임계값 설정

명령어로 db 이슈에 대한 임계치를 지정하는 코드(테이블 스페이스 부분)

BEGIN
     DBMS_SERVER_ALERT.SET_THRESHOLD(
         metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL,
         warning_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
         warning_value => '60', --경고 임계치는 60퍼센트
         critical_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
         critical_value => '80', --위기 임계치는 80퍼센트
         observation_period => 1,
         consecutive_occurrences => 3,
         instance_name => 'orcl',
         object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE,
         object_name => 'TS51'
      );
 END;

실습3. 위 설정 내용을 변경해서 테이블스페이스의 사용량에 대한 경고 메세지와 위기 메세지를 출력하는 tablespace 사용량 임계치를 설정하시오 !

BEGIN
     DBMS_SERVER_ALERT.SET_THRESHOLD(
         metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL,
         warning_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
         warning_value => '60',
         critical_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
         critical_value => '80', 
         observation_period => 1,
         consecutive_occurrences => 3,
         instance_name => 'orcl',
         object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE,
         object_name => 'TS51'
      );
 END;
 
SYS> select reason, message_level from dba_outstanding_alerts; 

REASON -- 이렇게 메세지가 바뀐다 !
------------------------------------------------------------------------------
Tablespace [TS51] is [100 percent] full
Metrics "Database Time Spent Waiting (%)" is at 100 for event class "Network"


REASON
------------------------------------------------------------------------------
MESSAGE_LEVEL
-------------
Tablespace [TS51] is [100 percent] full
            1

Metrics "Database Time Spent Waiting (%)" is at 100 for event class "Network"
            5

임계치 낮춰봄



BEGIN
    DBMS_SERVER_ALERT.SET_THRESHOLD(
        metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL,
        warning_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
        warning_value => '20',
        critical_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
        critical_value => '50', 
        observation_period => 1,
        consecutive_occurrences => 3,
        instance_name => 'orcl',
        object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE,
        object_name => 'TS51'
     );
END;

SCOTT> truncate table emp50;
SYS> select reason, message_level from dba_outstanding_alerts; 

테이블 스페이스에 대한 조정한 임계치 확인하는 쿼리문

select
    object_type,
    object_name,
    metrics_name,
    warning_operator,
    warning_value,
    critical_operator,
    critical_value,
    observation_period,
    consecutive_occurrences
 from
    sys.dba_thresholds
 where
    object_type = 'TABLESPACE';
    
    
select reason, message_level from dba_outstanding_alerts;

오늘의 마지막 문제 위와 같이 일반 테이블 스페이스의 공간이 모두 찼을 때도 경고메세지와 위기 메세지를 봐야하지만 temp tablespace와 undo tablespace에 대해서도 공간이 꽉 차기전에 경고 메세지와 위기 메세지를 봐야할 필요가 있다.

아래의 TEMP tablespace 사용에 대한 임계치를 설정하고, TEMP tablespace에 과도한 정렬작업을 일으켜서 공간이 꽉 차게 만든 후에 경고 메세지와 위기 메세지가 DBA_OUTSTANDING_ALERT에 조회되는지 테스트 하세요 !

select * from database_properties;  

DEFAULT_TEMP_TABLESPACE   TEMP  <---- 확인하고 수행한다.


SYS> 
BEGIN
     DBMS_SERVER_ALERT.SET_THRESHOLD(
         metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL,
         warning_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
         warning_value => '10',
         critical_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
         critical_value => '20',
         observation_period => 1,
         consecutive_occurrences => 3,
         instance_name => 'orcl',
         object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE,
         object_name => 'TEMP'
      );
 END;
 /

* temp 의 사용율을 높이는 방법

 connect sh/sh 

 alter  session  set workarea_size_policy=manual;

 alter  session  set sort_area_size =  100;

 create  table  sales400
 as
   select * from sales;

 create  index sales400_indx1
  on   sales400(amount_sold, prod_id, promo_id);

 create  index sales400_indx2
  on   sales400(amount_sold desc, prod_id, promo_id desc);
  
 select reason, message_level from dba_outstanding_alerts; 
profile
Slow and steady wins the race.

0개의 댓글