#眉標=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; ======================= ==========<反灰>============= ---同一帳號至多只能使用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; ======================= ==========<反灰>============= select tablespace_name as Tablespace, username, bytes; max_bytes from dba_ts_quotas ======================= ==========<反灰>============= select nvl(b.grantee,' ') from dba_users a,dba_sys_privs b where a.username=b.grantee and b.privilege='UNLIMITED TABLESPACE' "; ======================= ==========<反灰>============= ALTER SYSTEM SET RESOURCE _MANAGER_PLAN = mydb_plan; ======================= ==========<反灰>============= begin while 1=1 loop dbms_output.new_line; end loop; 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 ======================= ==========<反灰>============= 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; ======================= 更多細節,可來信討論:Bountyhunter.z@hotmail.com。