觸發器實現記錄對某張表做刪除修改操作的用戶信息
數據庫觸發器是一個與表關聯的存儲下來的可以自動執行的PL/SQL程序。每當一個特定的數據操作語句在指定的表上發出時,Oracle自動的執行觸發器中定義的語句序列。比如我們可以使用觸發器實現讓用戶在週末無法對數據庫表進行修改。
下面的例子是建立一個信息表,用來存儲對某張表做了刪除操作的用戶的相關信息。
#觸發器監控表的修改和刪除操作
#1 創建接收刪除用戶的表信息
SQL> create tabletab_mon_midify as (select sid,username,program,machine,'000.000.000.000' ipadd,sysdate moditime from v$session where0=1);
該表分別記錄了,刪除的用戶、機器名、ip及刪除時間等
#2 創建觸發器
SQL>create or replacetrigger tab_mon_mod_tr
before delete on Md_Accountsubject
for each row
begin
insert into tab_mon_midify
selectsid,username,program,machine,sys_context('userenv','ip_address'),sysdate
from v$session where audsid =userenv('sessionid');
end;
#3 做完以上操作,一旦修改,記錄會自動插入監控表裏面
觸發器實現禁止對某張表做修改
# 創建觸發器,指定字段變化時,彈出報錯不允許修改
create or replace triggerForbidUpdate_COM_LINE_B
before update on HSS_TASK_ITEM_COM_LINE_B
for each row
begin
if
updating('STATUS_CODE') or updating('LAST_UPDATE_DATE') or updating('BATCH_NUM')
then
return;
else
Raise_application_error(-20527, 'thetrigger is added by HAND, Exception: In order to ensure the bill rowsinformation is correct, HSS_TASK_ITEM_COM_LINE_B can not be updated!!! ');
end if;
end;
--error_number是範圍在-20000到-20999之間的負整數
----刪除觸發器
drop triggerForbidUpdate_COM_LINE_B;
當對錶HSS_TASK_ITEM_COM_LINE_B裏面除了STATUS_COD,LAST_UPDATE_DATE,BATCH_NUM這三個字段以外的字段進行修改時,彈出報錯-20527, 'thetrigger is added by HAND, Exception: In order to ensure the bill rowsinformation is correct, HSS_TASK_ITEM_COM_LINE_B can not be updated!!!,並會讓當前的修改操作失效。
ORACLE導入與導出
導出與導入分別都有三種方式:
--完全模式導出
將整個數據庫內容導出,但是操作時需要有特殊權限。
命令格式:
exp 用戶名/密碼@實例名buffer=32000 導出路徑 full=y;
例如:
exp dna/dna@orcl buffer=1024 file=d:/97back1121.dmp full=y;
--用戶模式導出
將指定用戶的所有對象進行導出:
exp dna/dna@orcl buffer=32000file=d:/test.dmp owner=dna
--表模式導出
將用戶的所有表數據進行導出:
exp dna/dna@orcl buffer=32000file=d:/dna.dmp owner=dna tables=(dna)
--導入
imp dna/dna@orcl file= d:/dna.dmp log= d:/oracle/dna.log full=y ignore=y;
注意,在出時最好使用dba權限,不然可能會出錯。
在導入時,要注意表空間是否夠用,否則也有可能導致失敗。
ORACLE查看鎖表情況
執行以下語句,可以查看當前數據庫裏的鎖表情況,而且還有相應的解鎖語句在裏面。
SELECTdob.object_name table_name,
lo.locked_mode,
lo.session_id,
vss.serial#,
vps.spid,
vss.action,
vss.osuser,
vss.process,
vps.spid db_pid,
'alter system kill session ' || '''' ||lo.session_id || ',' || vss.serial# || ''';' kill_command
FROM v$locked_object lo, dba_objects dob,v$session vss, v$process vps
WHERE lo.object_id = dob.object_id
AND lo.session_id = vss.sid
AND vss.paddr = vps.addr
ORDER BY 2, 3, dob.object_name;
新建用戶,賦權,設置表空間
sqlplus/nolog
conn/as sysdba
--創建表空間
createtablespace dna_htqc datafile 'D:\oracle\dna_uat\dna_htqc.ora' size 500M;
--新建用戶並設置默認表空間
createuser dna_htqc identified by "dna_htqc" default tablespace dna_htqc;
--賦權
grant create session to dna_htqc;
grant create table to dna_htqc;
grant create tablespace to dna_htqc;
grant create view to dna_htqc;
grant resource to dna_htqc;
--修改表空間自動增長屬性:
alter database datafile'D:\ORACLE\HX_UAT\HX_UAT.ORA' autoextend on;
--修改表空間大小:
alterdatabase datafile 'D:\ORACLE\AISINOFSSC.ORA' resize 1500m;
--修改用戶的默認表空間
alteruser dna_uat default tablespace dna_uat;
--查看用戶表空間使用情況,以及是否有自動擴展能力
SELECTT.TABLESPACE_NAME,D.FILE_NAME,
D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS
FROMDBA_TABLESPACES T,DBA_DATA_FILES D
WHERET.TABLESPACE_NAME =D.TABLESPACE_NAME
ORDER BY TABLESPACE_NAME,FILE_NAME;
--查看用戶
selectusername,default_tablespace from user_users;
--某個用戶在哪個表空間下:
selecttablespace_name,file_name,autoextensible from dba_data_files;
--該用戶下所有的表:
select * from user_tables;
數據庫連接相關
--當前連接數
selectcount(*) from v$process where program='Oracle.EXE(SHAD)';
selectcount(*) from v$process;
--最大連接數
selectvalue from v$parameter where name ='processes';
--修改最大連接數
altersystem set processes = 300 scope = spfile;
--最大連接
showparameter processes;
--併發連接數
selectcount(*) from v$session where status='ACTIVE';
--當前的session連接數
selectcount(*) from v$session;
--查看當前有哪些用戶正在使用數據
SELECTosuser, a.username,cpu_time/executions/1000000||'s',b.sql_text,machine
fromv$session a, v$sqlarea b
wherea.sql_address =b.address order by cpu_time/executionsdesc;