#眉標=Oracle、Resource manager、Profile
#副標=Oracle資料庫優化實務經驗談(5)
#大標=用戶端存取Oracle Server資源的管控
#作者=文/圖 賞金獵人


==========<反灰>=============
CREATE OR REPLACE TRIGGER "SYS"."LOGIN_CONTROL" 
AFTER LOGON ON DATABASE 
BEGIN 

---只有以下這群人被控制, 其他的人不控制
  IF USER  not in('JACK','IVY','MARY')THEN
   RETURN;
  END IF;

---限制哪些 IP 可以登入
  IF sys_context('USERENV','ip_address')not in('192.168.1.101','192.168.1.102','192.168.1.104')THEN 
   RAISE_APPLICATION_ERROR(-20003, USER || ' , you can not access Oracle from ' || sys_context('USERENV','ip_address'));
  END IF;

---並且限制只有星期一與星期五可以用
  IF to_char(sysdate - 1,'d')not in('1','2','3','4','5') THEN RAISE_APPLICATION_ERROR(-20003, USER || ' , you can not access Oracle on ' || to_char(sysdate,'day'));
  END IF;

---並且只有早上 8 點到晚上 6 點
  IF to_char(sysdate,'hh24')<'08' or to_char(sysdate,'hh24')>='18' THEN 
   RAISE_APPLICATION_ERROR(-20003, USER || ' , you can not access Oracle at ' || to_char(sysdate,'hh24:mm')  );
  END IF;
END;
=========<end>==============





==========<反灰>=============
---同一帳號至多只能使用3個Session
alter profile your_profile_name limit SESSIONS_PER_USER 3;

---每一個Session只能使用60分鐘
alter profile your_profile_name limit CONNECT_TIME 60;

---Session中每一個動作最多可以使用多少1秒鐘的CPU時間(單位:0.01秒)
alter profile your_profile_name limit CPU_PER_CALL 100;
=========<end>==============





==========<反灰>=============
select tablespace_name as Tablespace, username, bytes; max_bytes from dba_ts_quotas
=========<end>==============





==========<反灰>=============
select nvl(b.grantee,' ') from dba_users a,dba_sys_privs b where a.username=b.grantee and b.privilege='UNLIMITED TABLESPACE' ";
=========<end>==============





==========<反灰>=============
ALTER SYSTEM SET RESOURCE _MANAGER_PLAN = mydb_plan; 
=========<end>==============




==========<反灰>=============
begin 
while 1=1 loop
  dbms_output.new_line;
end loop;
end;
=========<end>==============






==========<反灰>=============
SELECT 
  se.sid sess_id, sei.username, sei.osuser, sei.machine, sei.terminal, sei.program, sei.logon_time, 
  co.name consumer_group, 
  se.state, se.consumed_cpu_time cpu_time, se.cpu_wait_time, se.queued_time
FROM 
  v$rsrc_session_info se, v$rsrc_consumer_group co , v$session sei
WHERE 
  se.current_consumer_group_id = co.id and se.sid=sei.sid
=========<end>==============




==========<反灰>=============
begin
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE (PLAN => 'DEFAULT_MAINTENANCE_PLAN', GROUP_OR_SUBPLAN => 'OTHER_GROUPS', NEW_ACTIVE_SESS_POOL_P1 => 2);
DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE (PLAN => 'DEFAULT_MAINTENANCE_PLAN', GROUP_OR_SUBPLAN => 'OTHER_GROUPS', NEW_QUEUEING_P1 => 0);
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;
end;
=========<end>==============


更多細節,可來信討論:Bountyhunter.z@hotmail.com。