可以通過(guò)sql語(yǔ)句跟蹤oracle數(shù)據(jù)庫(kù)中的操作狀態(tài): (1)select * from v$sqlarea; 可以跟蹤sql語(yǔ)句的執(zhí)行過(guò)程,如果想跟蹤某個(gè)時(shí)間點(diǎn)前后的語(yǔ)句,可以通過(guò)first_load_time時(shí)間進(jìn)行控制。 select * from v$sqlarea where first_load_time
創(chuàng)新互聯(lián)公司長(zhǎng)期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為景洪企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,景洪網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
給你一個(gè),你可以稍微修改一下
-- create table
CREATE table ddl_event (
timestamp date,
user_name varchar2(30),
os_user varchar2(30),
machine varchar2(20),
ip_addr varchar2(20),
program VARCHAR2(30),
event varchar2(20),
Object_name varchar2(30),
object_type varchar2(30),
object_owner varchar2(30),
statement varchar2(256) )
/
-- who changed what and when and how
create or replace trigger ddl_watcher
after ddl on database
when (user not in ('SYS', 'SYSTEM'))
declare
v_osuser varchar2(30);
v_machine varchar2(20);
v_ip_addr varchar2(20);
v_program VARCHAR2(30);
event varchar2(30);
obj_name varchar2(30);
obj_type varchar2(30);
obj_owner varchar2(30);
sql_text ora_name_list_t;
stmt VARCHAR2(256);
n number;
begin
select osuser,
machine,
nvl(program, 'sqlplus'),
sys_context('userenv','ip_address')
into
v_osuser,
v_machine,
v_program,
v_ip_addr
from v$session
where audsid = userenv('sessionid');
-- select sys_context('userenv','ip_address') into v_ip_addr from dual;
-- v_ip_addr := ora_client_ip_address;
event := ora_sysevent;
obj_name := ora_dict_obj_name;
obj_type := ora_dict_obj_type;
obj_owner := ora_dict_obj_owner;
n := ora_sql_txt(sql_text);
if n 256 then
n:= 256;
end if;
FOR i IN 1..n LOOP
stmt := stmt || sql_text(i);
END LOOP;
insert into ddl_event (timestamp, user_name, os_user, machine, ip_addr,
program, event, object_name, object_type, object_owner, statement)
values (sysdate, user, v_osuser, v_machine, v_ip_addr, v_program,
event, obj_name, obj_type, obj_owner, stmt);
end;
/
DDL trigger
Quite often, DBAs need to know what DDL operations the users have done in a test environment. Here is the way I can know what they did.
This table and the trigger (you may name them the way you like) should be in SYS, SYSTEM or an account with DBA role. It will store who did what, when and from where (machine and IP), by what method (sqlplus, toad, sql worksheet etc).
There is a limitation: when a DDL operation has more than 2000 characters, it won't go through. For example, when a user is trying to create a new or modify an existing stored procedure, s/he may be in trouble if the code has more than 2000 characters.
I have caught follwoing DDLs:
alter,
analyze,
comment,
create,
drop,
grant,
revoke,
truncate
歸檔日志(ArchiveLog)是非活動(dòng)的重做日志備份.通過(guò)使用歸檔日志,可以保留所有重做歷史記錄,當(dāng)數(shù)據(jù)庫(kù)處于ARCHIVELOG模式并進(jìn)行日志切換式,后臺(tái)進(jìn)程ARCH會(huì)將重做日志的內(nèi)容保存到歸檔日志中.當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)介質(zhì)失敗時(shí),使用數(shù)據(jù)文件備份,歸檔日志和重做日志可以完全恢復(fù)數(shù)據(jù)庫(kù).
日志操作模式:ARCHIVELOGNOARCHIVELOG
1,改變?nèi)罩静僮髂J?
檢查當(dāng)前日志操作模式
SELECTlog_modefromv$database;
關(guān)閉數(shù)據(jù)庫(kù),然后裝載數(shù)據(jù)庫(kù)
SHUTDOWNIMMEDIATE
STARTUPMOUNT
改變?nèi)罩静僮髂J?然后打開(kāi)數(shù)據(jù)庫(kù)
ALTERDATABASEARCHIVELOG;
ALTERDATABASEOPEN;
2,執(zhí)行手工歸檔
從oracledatabase10g開(kāi)始,當(dāng)將日志操作模式轉(zhuǎn)變未ARCHIVELOG模式時(shí),oracle會(huì)自動(dòng)啟動(dòng)ARCH進(jìn)程.如果要使用手工歸檔.那么在改變?nèi)罩静僮髂J綍r(shí)必須使用命令A(yù)LTERDATABASEARCHIVELOGMANUAL.
需要注意,使用手工歸檔方式,數(shù)據(jù)庫(kù)管理員必須手工執(zhí)行歸檔命令.如果沒(méi)有執(zhí)行手工歸檔命令,日志組的原有內(nèi)容將不能被覆蓋.ALTERDATABASEARCHIVELOGMANUAL命令是為了與先前的版本兼容而保留的,.將來(lái)的oracle版本會(huì)淘汰該命令,使用手工歸檔方式是,數(shù)據(jù)庫(kù)管理員可以執(zhí)行以下命令歸檔重做日志:
SLTERSYSTEMARCHIVELOGALL;
3,配置歸檔進(jìn)程
初始化參數(shù)LOG_ARCHIVE_MAX_PROCESSES用于指定例程初始啟動(dòng)的最大歸檔進(jìn)程個(gè)數(shù),當(dāng)將數(shù)據(jù)庫(kù)轉(zhuǎn)變?yōu)锳RCHIVELOG模式時(shí),默認(rèn)情況下oracle會(huì)自動(dòng)啟動(dòng)兩個(gè)歸檔進(jìn)程.通過(guò)改變初始化參數(shù)LOG_ARCHIVE_MAX_PROCESS的值,可以動(dòng)態(tài)地增加或降低歸檔進(jìn)程的個(gè)數(shù):
ALTERSYSTEMSETLOG_ARCHIVE_MAX_PROCESSES=3;
配置歸檔位置和文件格式
當(dāng)數(shù)據(jù)庫(kù)處于ARCHIVELOG模式時(shí),如果進(jìn)行日志切換,后臺(tái)進(jìn)程將自動(dòng)生成歸檔日志,歸檔日志的默認(rèn)位置為%oracle_home%rdbms,在oracledatabase10g中,歸檔日志的默認(rèn)文件格式為ARC%S_%R.%T.為了改變歸檔日志的位置和名稱格式,必須改變相應(yīng)的初始化參數(shù),
1,初始化參數(shù)LOG_ARCHIVE_FORMAT用于指定歸檔日志的文件名格式,設(shè)置該初始化參數(shù)時(shí),可以指定以下匹配符:
%s:日志序列號(hào):
%S:日志序列號(hào)(帶有前導(dǎo)0)
%t:重做線程編號(hào).
%T:重做線程編號(hào)(帶有前導(dǎo)0)
%a:活動(dòng)ID號(hào)
%d:數(shù)據(jù)庫(kù)ID號(hào)
%rRESETLOGS的ID值.
從10g開(kāi)始,配置歸檔日志文件格式時(shí),必須帶有%s,%t和%r匹配符,配置了歸檔文件格式后,必須重啟數(shù)據(jù)庫(kù).
2,使用LOG_ARCHIVE_DEST配置歸檔位置
如果不使用備用數(shù)據(jù)庫(kù),只需要將歸檔日志存放到本地目錄.配置本地歸檔位置可以使用初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST,其中,第一個(gè)參數(shù)用于設(shè)置第一個(gè)歸檔位置,第二個(gè)參數(shù)用于指定第二個(gè)歸檔位置.
ALTERSYSTEMSETlog_archive_dest=’d:demoarchive1’;
ALTERSYSTEMSETlog_archive_duplex_dest=’d:demoarchive2’;
3,使用LOG_ARCHIVE_DEST_n配置多個(gè)歸檔位置.
初始化參數(shù)LOG_ARCHIVE_DEST_n用于指定多個(gè)歸檔位置,該參數(shù)最多可以指定10個(gè)歸檔位置.通過(guò)使用初始化參數(shù)LOG_ARCHIVE_DEST_n,不僅可以配置本地歸檔位置,還可以配置遠(yuǎn)程歸檔位置.
如果既要在主節(jié)點(diǎn)上生成歸檔日志,又要將歸檔日志傳遞到備用節(jié)點(diǎn),那么必須使用參數(shù)LOG_ARCHIVE_DEST_n.該參數(shù)與LOG_ARCHIVE_DEST具有如下區(qū)別;
初始化參數(shù)LOG_ARCHIVE_DEST_n可以配置本地歸檔位置和遠(yuǎn)程歸檔位置,而初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST只能配置本地歸檔位置.
初始化參數(shù)LOG_ARCHIVE_DEST_n可以配置多達(dá)10個(gè)歸檔位置,而初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST最多只能配置兩個(gè)歸檔位置.
初始化參數(shù)LOG_ARCHIVE_DEST_n不能與初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同時(shí)使用.
因?yàn)槌跏蓟瘏?shù)LOG_ARCHIVE_DEST_n不能與初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同時(shí)使用,所以必須禁用初始化參數(shù)LOG_ARCHVE_DEST和LOG_ARCHIVE_DUPLEX_DEST.當(dāng)使用初始化參數(shù)LOG_ARCHIVE_DEST_n配置本地歸檔位置時(shí),需要指定LOCALTION選項(xiàng).當(dāng)配置遠(yuǎn)程歸檔位置時(shí),需要指定SERVICE選項(xiàng).
示例如下:
ALTERSYSTEMSETlog_archive_duplex_dest=’’;
ALTERSYSTEMSETlog_archive_dest=’’;
ALTERSYSTEMSETlog_archive_dest_1=’location=d:demoarchive1’;
ALTERSYSTEMSETlog_archive_dest_2=’location=d:demoarchive2’;
ALTERSYSTEMSETlog_archive_dest_3=’location=d:demoarchive3’;
ALTERSYSTEMSETlog_archive_dest_4=’service=standby’;
配置遠(yuǎn)程歸檔位置時(shí),SERVICE選項(xiàng)需要指定遠(yuǎn)程數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)服務(wù)名(在tnsnames.ora文件中配置)
4,使用LOG_ARCHIVE_DEST_n選項(xiàng)
使用初始化參數(shù)LOG_ARCHIVE_DEST_n配置歸檔位置時(shí),可以在歸檔位置上指定OPTIONAL或MANDATORY選項(xiàng).指定MANDATORY選項(xiàng)時(shí),可以設(shè)置REOPEN屬性.
OPTIONAL:該選項(xiàng)是默認(rèn)選項(xiàng).使用該選項(xiàng)時(shí),無(wú)論歸檔是否成功,都可以覆蓋重做日志.
MANDATORY:強(qiáng)制歸檔.使用該選項(xiàng)時(shí),只有在歸檔成功之后,重做日志才能被覆蓋.
REOPEN:該屬性用于指定重新歸檔的時(shí)間間隔,默認(rèn)值為300秒,必須跟在MANDATORY后.
例:
Altersystemsetlog_archive_dest_1=’location=d:demoarchive1mandatory’;
Altersystemsetlog_archive_dest_2=’location=d:demoarchive2mandatoryreopen=500’;
Altersystemsetlog_archive_dest_3=’location=d:demoarchive3optional’;
5,控制本地歸檔成功的最小個(gè)數(shù).
使用初始化參數(shù)LOG_ARCHIVE_MIN_SUCCEED_DEST控制本地歸檔的最小成功個(gè)數(shù)
Altersystemsetlog_archive_min_succeed_dest=2;
6,使用初始化參數(shù)LOG_ARCHIVE_DEST_STATE_n控制歸檔位置的可用性.設(shè)置該參數(shù)為ENABLE(默認(rèn)值),表示會(huì)激活相應(yīng)的歸檔位置;設(shè)置該參數(shù)為DEFER,表示禁用相應(yīng)歸檔位置.當(dāng)歸檔日志所在磁盤損壞或填滿時(shí),DBA需要暫時(shí)禁用該歸檔位置.
Altersystemsetlog_archive_dest_state_3=defer;(禁用)
Altersystemsetlog_archive_dest_state_3=enable;(啟用)
顯示歸檔日志信息
1,使用ARCHIVELOGLIST命令可以顯示日志操作模式,歸檔位置,自動(dòng)歸檔機(jī)器要?dú)w檔的日志序列號(hào)等信息.
2顯示日志操作模式
SELECTname,log_modeFROMv$database;
3,顯示歸檔日志信息.
Colnameformata40
Selectname,swquence#,first_change#FROMv$archived_log;
Name用于表示歸檔日志文件名,sequence#用于表示歸檔日志對(duì)應(yīng)的日志序列號(hào),firs_change#用于標(biāo)識(shí)歸檔日志的起始SCN值.
4執(zhí)行介質(zhì)恢復(fù)時(shí),需要使用歸檔日志文件,此四必須準(zhǔn)確定位歸檔日志的存放位置.通過(guò)查詢動(dòng)態(tài)性能視圖v$archive_dest可以取得歸檔日志所在目錄.
SELECTdestinationFROMv$archivedest;
5,顯示日志歷史信息
SELECT*FROMv$loghist;
THREAD#用于標(biāo)識(shí)重做線程號(hào),SEQUNCE#用于標(biāo)識(shí)日志序列號(hào),FIRST_CHANGE#用于標(biāo)識(shí)日志序列號(hào)對(duì)應(yīng)的起始SCN值,FIRST_TIME用于標(biāo)識(shí)起始SCN的發(fā)生時(shí)間.SWICTH_CHANGE#用于標(biāo)識(shí)日志切換的SCN值.
6.顯示歸檔進(jìn)程信息.
進(jìn)行日志切換時(shí),ARCH進(jìn)程會(huì)自動(dòng)將重做日志內(nèi)容復(fù)制到歸檔日志中,為了加快歸檔速度,應(yīng)該啟用多個(gè)ARCH進(jìn)程.通過(guò)查詢動(dòng)態(tài)性能視圖V$ARCHIVE_PROCESSES可以顯示所有歸檔進(jìn)程的信息!
SELECT*FROMv$archive_processes;
Porcess用于標(biāo)識(shí)ARCH進(jìn)程的編號(hào),status用于標(biāo)識(shí)ARCH進(jìn)程的狀態(tài)(ACTIVE:活動(dòng),STOPPED:未啟動(dòng)),log_sequence用于標(biāo)識(shí)正在進(jìn)行歸檔的日志序列號(hào),state用于標(biāo)識(shí)ARCH進(jìn)程的工作狀態(tài)
select * from 表名 where 條件 for update
-----這樣會(huì)一直占有這張表的修改權(quán)限,不能進(jìn)行其他的操作
select t.* ,rowid from 表名 t
-----這個(gè)是以修改方式開(kāi)啟表,進(jìn)行修改
update....set ..
-----這是對(duì)表進(jìn)行更新操作