수업전에 용량 없어서 진행
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.
2400건
5400건✅ 오라클은 스스로 자기의 문제를 진단하고 그 문제점에 대한 해결 방법 스크립트(ADVISOR) 도 생성해서 가지고 있습니다. 오라클이 스스로 진단한 문제점을 확인하고 해결하는 책임자는 DBA 자신이고 DBA 가 이 내용을 알아야 오라클이 스스로 알려주는 문제점을 해결해 나가면서 더 풍성한 데이터베이스 관리를 할 수 있습니다.
문제가 생기면 ---> 중간에서 전달 ---> 업체 ( DBA )
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;
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'));
실습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;
-- 테이블에 대해서 통계정보를 수집하면 다음과 같은 정보가 데이터 베이스에 저장됩니다.
- 테이블 크기와 인덱스 크기
- 테이블 행수
- 평균 행의 수와 row migration 발생 행 수
- 인덱스의 지워진 행의 수(목차에는 있는데 실제 책의 페이지는 없는것)
예제: 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;
em 을 통해서 수집 : p12-9
SQL을 통해서 수집:
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
오라클은 MMON이라는 백그라운드 프로세서가 한시간에 한번씩 인스턴스의 성능정보를 사진을 찍는다.. 그래서 사진 찍었을 당시에 성능정보를 나중에 확인할 수 있다. (AWR에 저장) 이것을 8일동안 저장함! -> 어제 오후 1시에 db느렸었는데, 원인을 알고싶다? 는 AWR를 찾아본다.
더 자주 보고싶으면 짧게 설정해서 더 많이 사진을 찍는데 너무 많이하게되면 성능이 떨어지게 된다.
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로 하자 !
✅ AWR report는 과거 틍정 시간에 어떤 문제가 있었는지 알려준다면, ADDM report는 어떤 문제가 있었는지와 더불어 해결 방법까지 알려준다!
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;
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 누르면 풀코드가 나온다. -> 개발팀에 넘기기 혹은 튜닝해서 넘기기
데이터베이스 > 성능 > 맨아래 에서 두번째 그래프 눌러서 들어가면 CPU + CPU 대기 나오는데 거기서 시간 선택하면 그시간에 나온 악성 SQL 확인가능 !
✅ADDM은 저기 버튼 눌러서 보기. 들어가보면 밑에 건전지 모양같은거 있는데 그거 누르면 그 시간대로 간다. 밑에 최상위 SQL문 클릭하고 SQL 튜닝 눌러서 지금 권고자 실행 하면 튜닝도 해준다.
아래의 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 화면이다. 찾아보자 !
서버> 오라클스케줄러 > 자동화된 유지 관리 작업 > 구성
✅ 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;