ORACLE審計DDL語句
建立儲存DDL語句的表
create table audit_ddl
(
opertime timestamp PRIMARY KEY,
ip varchar2(20),
hostname varchar2(30),
operation varchar2(30),
object_type varchar2(30),
object_name varchar2(30),
sql_stmt clob,
db_schema varchar2(30)
);
建立 捕獲DDL語句的觸發器
create or replace trigger trg_audit_ddl
after ddl on database
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
n NUMBER;
stmt clob := NULL;
sql_text ora_name_list_t;
BEGIN
n := ora_sql_txt(sql_text);
FOR i IN 1 .. n LOOP
stmt := stmt || sql_text(i);
END LOOP;
INSERT INTO audit_ddl
(opertime, ip, hostname, operation, object_type, object_name, sql_stmt,db_schema)
VALUES
(systimestamp,
sys_context('userenv', 'ip_address'),
sys_context('userenv', 'terminal'),
ora_sysevent,
ora_dict_obj_type,
ora_dict_obj_name,
stmt,
user
);
COMMIT;
END;
/
建立審計DDL的觸發器成功,並且是生效的
[email protected] >select t.object_name,t.object_type,t.status,t.last_ddl_time from dba_objects t where t.object_type='TRIGGER' and t.object_name='TRG_AUDIT_DDL';
OBJECT_NAME OBJECT_TYPE STATUS LAST_DDL_TIME
-------------------- ------------------- ------- ------------------
TRG_AUDIT_DDL TRIGGER VALID 03-MAY-18
檢視並確認隱藏引數_system_trig_enabled 為 true:
[email protected] >SELECT ksppinm, ksppstvl, ksppdesc FROM x$ksppi x, x$ksppcv y WHERE x.indx = y.indx AND ksppinm = '_system_trig_enabled';
KSPPINM KSPPSTVL KSPPDESC
-------------------- -------------------- ----------------------------------------
_system_trig_enabled TRUE are system triggers enabled
建立測試賬戶test 進行測試
[email protected] >create user test identified by 123456;
User created.
[email protected] >grant connect,resource to test;
Grant succeeded.
[email protected] >conn test/123456;
Connected.
[email protected] >create table audit_ddl_test(id number,name varchar2(20));
Table created.
[email protected] >insert into audit_ddl_test values(1,'wwww');
1 row created.
[email protected] >commit;
Commit complete.
[email protected] >truncate table audit_ddl_test;
Table truncated.
[email protected] >alter table audit_ddl_test add (insert_date date default(sysdate));
Table altered.
[email protected]>desc audit_ddl_test
Name Null? Type
----------------------------------------------------------------------------------------- -------- ------------------------------------------------------------
ID NUMBER
NAME VARCHAR2(20)
INSERT_DATE DATE
[email protected] >drop table audit_ddl_test;
Table dropped.
[email protected] >select * from audit_ddl where db_schema='TEST';
OPERTIME IP HOSTNAME OPERATION OBJECT_TYPE OBJECT_NAME
--------------- --------------- --------------- ------------------------------ ------------------------------ --------------------
SQL_STMT DB_SCHEMA
-------------------------------------------------------------------------------- ---------------
03-MAY-18 04.12 pts/1 CREATE TABLE AUDIT_DDL_TEST
.13.072252 PM
create table audit_ddl_test(id number,name varchar2(20)) TEST
03-MAY-18 04.14 pts/1 TRUNCATE TABLE AUDIT_DDL_TEST
.27.000973 PM
truncate table audit_ddl_test TEST
03-MAY-18 04.16 pts/1 ALTER TABLE AUDIT_DDL_TEST
.48.211531 PM
alter table audit_ddl_test add (insert_date date default(sys TEST
date))
03-MAY-18 04.17 pts/1 ALTER TABLE AUDIT_DDL_TEST
.20.898208 PM
ALTER TABLE "TEST"."AUDIT_DDL_TEST" RENAME TO "BIN$a0nVHhtJf TEST
kTgU5cAAArVkA==$0"
03-MAY-18 04.17 pts/1 DROP TABLE AUDIT_DDL_TEST
.20.900534 PM
drop table audit_ddl_test TEST
相關推薦
ORACLE審計DDL語句
建立儲存DDL語句的表 create table audit_ddl ( opertime timestamp PRIMARY KEY, ip varchar2(20), hostname varchar2(30), operation varc
檢視oracle的DDL語句
使用dbms_metadata.get_ddl遇到ORA-31603 建了一個外部表,想看看這個表的資訊,一查就報錯了: SQL> select dbms_metadata.get_ddl('TABLE','ext_case1') from dual; ER
Oracle的DDL語句為什麼不能回滾
在ITPUB上看到有人提出了這個問題。在Sqlserver或一些其他的資料庫中,DDL語句也是可以回滾的,那麼Oracle為什麼不能回滾DDL語句呢。 要說明這個問題,首先需要說明什麼是DDL語句。DDL語句是資料定義語句,包括各種資料物件的建立、修改和刪除,以及授權等操作。 在Oracle中DDL
oracle監控DDL語句
就是一個未做任何歸檔備份的9i資料庫老是被出現一個表被莫名drop,並在回收站不留任何痕跡,最後只得建立觸發器的方法,來跟蹤執行這個操作的時間和主機資訊,問題予以解決,記錄在此: -- Create tablecreate table T_WCDMA_AUDIT_DDL(DD
oracle常用DDL語句
--DDL(database define ) create table t_student( f_id int, f_name varchar2(10), f_sex char(2), f_age int,
Oracle與SQLSERVER 批處理執行 DDL 語句
1. 公司裡面的 很多同名的資料庫 的一個表都錯誤的多了一個列 要是每個都用資料庫連線工具開啟 感覺太廢時間了. 比如寫個sql命令來執行. 具體方法: Oracle 使用 sqlplus sqlplus lcoe739999/Test6530 @runora.sql 相同目錄下面放一個名
Oracle DB 使用DDL語句建立和管理表
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
oracle DML、DDL語句區別
DML:資料操作語言,SQL中處理資料等操作統稱為資料操縱語言 它們是SELECT、UPDATE、INSERT、DELETE,就象它的名字一樣,這4條命令是用來對資料庫裡的資料進行操作的語言,不修改表的結構,只修改表的內容 需要commit 才能真正被執行
Oracle操作語句之DDL語句
DDL:資料庫定義語言,可以自動提交事物。(create alter drop rename truncate comment) 資料庫三大正規化 第一正規化:列中的值不能再分割 第二正規化:在滿足第一正規化的基礎上,設計的表中的每個列都要依賴於主鍵列。 第三正規化:在滿
Oracle 儲存過程中的DDL語句
Oracle的儲存過程,是我們使用資料庫應用開發的重要工具手段。在儲存過程中,我們大部分應用場景都是使用DML語句進行資料增刪改操作。本篇中,我們一起探討一下資料定義語句DDL在儲存過程中使用的細節和要點。 1、“借道而行”的DDL 從Oracle PL/SQL和儲存過
ORACLE如何使用DBMS_METADATA.GET_DDL獲取表,表空間,使用者,檢視等的DDL語句
1.顯示設定: /*建立DBMS_METADATA: @?/rdbms/admin/catmeta.sql */ SETSERVEROUTPUTON SETLINESIZE1000 SETFEEDBACKOFF setlong999999 S
oracle之 獲取建表ddl語句
第一種方法是使用工具,如: pl/sql developer,在【工具】--【匯出使用者物件】出現就可以得到建表指令碼。 第二種方法是,sql語句。 DBMS_METADATA.GET_DDL包可以得到資料庫的物件的ddl指令碼。如下(SQLPLUS中執行): 1.得 到
ORACLE 檢視完整DDL語句
通過SQLPLUS方式檢視ORACLE的某個表完整的建表語句set line 200 set pagesize 0 set long 99999 select dbms_metadata.get_ddl
Oracle 觸發器實現DDL語句監控
前言 建立此觸發器的主要目的是為了控制資料庫的版本,雖然會將DDL語句保留但難免會出現遺漏,所以建立DDl觸發器記錄DDL操作,主要是用來核對資料庫變更的SQL語句 建立使用者並授權 #需要使用sys使用者授權 CREATE USER dbadmin IDENTIFI
Oracle 過程中執行動態 SQL 或 DDL 語句
如果你用的是 Oracle 8i 及以上的版本,那簡單,在過程中用 execute immediate sql_str 就行, sql_str 是一個拼湊的 SQL 語句,但這個動態語句中帶引數,或 Select 的結果要 into 到變數中時就要稍加留心一下了。而在
『ORACLE』 SQL語句簡單應用(四)(11g)
union times truncate sql語句 默認值 位數 lib rownum dual 排序 後加 nulls last 在降序排列中把null放在最後 select to_char(sysdate,‘q‘) from dual; dual
『ORACLE』 SQL語句簡單應用(五)(11g)
應用 11g sql cal foreign ora 每次 int pri not null 非空 字段+not null unique 唯一 primary key 主鍵(確保數據不能重復) foreign key 外鍵 check 必須
Oracle流程控制語句
控制 space reverse logs 2.3 1.2 流程控制語句 case ora 1.選擇語句 1.1 IF...THEN...END IF語句 DECLARE MY_AGE INT; IF MY_AGE IS NULL THEN DBMS
oracle 基本查詢語句及實例
空值 into microsoft clas 運算 cor select like sse 1、查詢所有列 select * from 表名; 2、查詢表結構 desc 表名; 3、查詢指定列 select ename,sal,job from 表名; 4、rac
oracle 審計(一)
分數 效果 opera run 審計 官方 導出 註意 per 一、何謂數據庫審計? 數據庫審計,就是對數據庫的活動做跟蹤記錄,主要包括數據庫連接,SQL語句執行,數據庫對象訪問這些方面的跟蹤記錄。 二、審記記錄的存儲方式 分為兩種:一種是存儲在操作系統文件中,一種是存