监控当前数据库谁在运行什么SQL语句
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;
也可以通过审计功能来对数据库进行审计,但对数据库的性能有一定的影响。
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;
也可以通过审计功能来对数据库进行审计,但对数据库的性能有一定的影响。
结果保存在OperationRecord表中。CREATE OR REPLACE TRIGGER TESTTRIGGER AFTER INSERT OR DELETE OR UPDATE OF "ID", "VALUE" ON Sample FOR EACH ROW
DECLARE
v_TriggerType VARCHAR2(10);
BEGIN
IF UPDATING THEN
v_TriggerType :='UpDate';
SELECT username, sql_text from v$session a, v$sqltext b;
INSERT INTO OperationRecord(CHANGETYPE, CREATETIME, USERNAME, SQLTEXT)
VALUES(v_TriggerType, SYSDATE, username, sql_text);
END IF;
IF DELETING THEN
v_TriggerType :='Delete';
SELECT username, sql_text from v$session a, v$sqltext b
INSERT INTO OperationRecord(CHANGETYPE, CREATETIME, USERNAME, SQLTEXT)
VALUES(v_TriggerType, SYSDATE, username, sql_text);
END IF;
IF INSERTING THEN
v_TriggerType :='Insert';
SELECT username, sql_text from v$session a, v$sqltext b
INSERT INTO OperationRecord(CHANGETYPE, CREATETIME, USERNAME, SQLTEXT)
VALUES(v_TriggerType, SYSDATE, username, sql_text);
END IF;
END TESTTRIGGER;看看上面的触发器错在那里???
谢谢!!
系统会给你提示
PLS-00428: an INTO clause is expected in this SELECT statement
PLS-00201: identifier 'username' must be declared
PLS-00201: identifier 'sql_text' must be declared
我是写PACKAGE的。对触发器的新用法不太了解,多多指教。
试试看
SELECT SQL_TEXT from v$sql where FIRST_LOAD_TIME = SYSDATE;
INSERT INTO temp(SQLTEXT)
VALUES(SQL_TEXT);这样写对吗?
编译有错误。