Oracle跟蹤文件、事件

壹、oracle跟蹤文件
    Oracle跟蹤文件分為三種類型。
    1.  壹種是後臺報警日誌文件,記錄數據庫在啟動、關閉和運行期間後臺進程的活動情況,如表空間創建、回滾段創建、某些alter命令、日誌切換、錯誤消息等。
    在數據庫出現故障時,應首先查看該文件,但文件中的信息與任何錯誤狀態沒有必然的聯系。後臺報警日誌文件保存BACKGROUND_DUMP_DEST參數指定的目錄中,文件格式為SIDALRT.LOG。
    2. 另壹種類型是DBWR、LGWR、SMON等後臺進程創建的後臺跟蹤文件。
    後臺跟蹤文件根據後臺進程運行情況產生,後臺跟蹤文件也保存在BACKGROUND_DUMP_DEST參數指定的目錄中,文件格式為siddbwr.trc、sidsmon.trc等。
    3. 還有壹種類型是由連接到Oracle的用戶進程(Server Processes)生成的用戶跟蹤文件。
    這些文件僅在用戶會話期間遇到錯誤時產生。此外,用戶可以通過執行oracle跟蹤事件(見後面)來生成該類文件,用戶跟蹤文件保存在USER_DUMP_DEST參數指定的目錄中,文件格式為oraxxxxx.trc,xxxxx為創建文件的進程號(或線程號)。
    二、Oracle跟蹤事件
    Oracle提供了壹類命令,可以將Oracle各類內部結構中所包含的信息轉儲(dump)到跟蹤文件中,以便用戶能根據文件內容來解決各種故障。
    設置跟蹤事件有兩種方法,壹種是在init.ora文件中設置事件,這樣open數據庫後,將影響到所有的會話。設置格式如下:
    EVENT=”eventnumber trace name eventname [forever,] [level levelnumber] : ……” 通過:符號,可以連續設置多個事件,也可以通過連續使用event來設置多個事件。
    另壹種方法是在會話過程中使用alter session set events命令,只對當前會話有影響。設置格式如下:
    alter session set events ‘[eventnumber|immediate] trace name eventname [forever] [, level levelnumber] : ……’
    通過:符號,可以連續設置多個事件,也可以通過連續使用alter session set events 來設置多個事件。
    格式說明:eventnumber指觸發dump的事件號,事件號可以是Oracle錯誤號(出現相應錯誤時跟蹤指定的事件)或oralce內部事件號,內部事件號在10000到10999之間,不能與immediate關鍵字同用。
    immediate關鍵字表示命令發出後,立即將指定的結構dump到跟蹤文件中,這個關鍵字只用在alter session語句中,並且不能與 eventnumber、forever關鍵字同用。
    trace name 是關鍵字。
    eventname指事件名稱(見後面),即要進行dump的實際結構名。若eventname為context,則指根據內部事件號進行跟蹤。
    forever關鍵字表示事件在實例或會話的周期內保持有效狀態,不能與immediate同用。
    levelnumber表示事件級別號,壹般從1到10,1表示只dump結構頭部信息,10表示dump結構的所有信息。
    跟蹤事件說明:
    1、buffers事件:dump SGA緩沖區中的db buffer結構
    alter session set events ‘immediate trace name buffers level 1’; –表示dump緩沖區的頭部。
    2、blockdump事件:dump數據文件、索引文件、回滾段文件結構
    alter session set events ‘immediate trace name blockdump level 66666’; –表示dump塊地址為6666的數據塊。
    在Oracle 8i以後該命令已改為:
    alter system dump datafile 11 block 9; –表示dump數據文件號為11中的第9個數據塊。
    3、controlf事件:dump控制文件結構
    alter session set events ‘immediate trace name controlf level 10’; –表示dump控制文件的所有內容。
    4、locks事件:dump LCK進程的鎖信息
    alter session set events ‘immediate trace name locks level 5’;
    5、redohdr事件:dump redo日誌的頭部信息
    alter session set events ‘immediate trace name redohdr level 1’; –表示dump redo日誌頭部的控制文件項。
    alter session set events ‘immediate trace name redohdr level 2’; –表示dump redo日誌的通用文件頭。
    alter session set events ‘immediate trace name redohdr level 10’; –表示dump redo日誌的完整文件頭。
    註意:redo日誌的內容dump可以采用下面的語句:
    alter system dump logfile ‘logfilename’;
    6、loghist事件:dump控制文件中的日誌歷史項
    alter session set events ‘immediate trace name loghist level 1’; –表示只dump最早和最遲的日誌歷史項。
    levelnumber大於等於2時,表示2的levelnumber次方個日誌歷史項。
    alter session set events ‘immediate trace name loghist level 4’; –表示dump 16個日誌歷史項。
    7、file_hdrs事件:dump 所有數據文件的頭部信息
    alter session set events ‘immediate trace name file_hdrs level 1’; –表示dump 所有數據文件頭部的控制文件項。
    alter session set events ‘immediate trace name file_hdrs level 2’; –表示dump 所有數據文件的通用文件頭。
    alter session set events ‘immediate trace name file_hdrs level 10’; –表示dump 所有數據文件的完整文件頭。
    8、errorstack事件:dump 錯誤棧信息,通常Oracle發生錯誤時前臺進程將得到壹條錯誤信息,但某些情況下得不到錯誤信息,可以采用這種方式得到Oracle錯誤。
    alter session set events ‘604 trace name errorstack forever’; –表示當出現604錯誤時,dump 錯誤棧和進程棧。
    9、systemstate事件:dump所有系統狀態和進程狀態
    alter session set events ‘immediate trace name systemstate level 10’; –表示dump 所有系統狀態和進程狀態。
    10、coalesec事件:dump指定表空間中的自由區間
    levelnumber以十六進制表示時,兩個高位字節表示自由區間數目,兩個低位字節表示表空間號,如0x00050000表示dump系統表空間中的5個自由區間,轉換成十進制就是327680,即:
    alter session set events ‘immediate trace name coalesec level 327680’;
    11、processsate事件:dump進程狀態
    alter session set events ‘immediate trace name processsate level 10’;
    12、library_cache事件:dump library cache信息
    alter session set events ‘immediate trace name library_cache level 10’;
    13、heapdump事件:dump PGA、SGA、UGA中的信息
    alter session set events ‘immediate trace name heapdump level 1’;
    14、row_cache事件:dump數據字典緩沖區中的信息
    alter session set events ‘immediate trace name row_cache level 1’;

Oracle 通過alter table增刪改列的語法

alter table tablename add (column datatype [default value][null/not null],…);
    alter table tablename modify (column datatype [default value][null/not null],…);
    alter table tablename drop (column);
    這裏分別是使用alter table 來增加、刪除和修改壹個列。
    下面是具體的例子:
    create table test1
    (id varchar2(20) not null);
    alter table test1
    add (name varchar2(30) default ‘無名氏’ not null);
    alter table test1
    modify (name varchar2(16) default ‘unknown’);
    alter table test1
    drop column name;
    以上分別建立壹個表,增加,更改,刪除壹個列。其中需要註意的是如果某壹列中已經存在值,如果妳要修改的為比這些值還要窄的列寬這樣將會出現壹個錯誤。
    例如前面如果我們插入壹個值
    insert into test1
    values (’1′,’我們很愛妳’);
    然後曾修改列: alter table test1
    modify (name varchar2(8));
    將會得到以下錯誤:
    ERROR 位於第 2 行:
    ORA-01441: 無法減小列長度, 因為壹些值過大
    PS:改變已存在的表的列名
    alter table table_name rename column col_old to col_new

Oracle密碼文件的使用和維護

概要:Oracle關系數據庫系統以其卓越的性能獲得了廣泛的應用,而保證數據庫的安全性是數據庫管理工作的重要內容。本文是筆者在總結Oracle數據庫安全管理工作的基礎上,對Oracle數據庫系統密碼文件的創建、使用和維護作了詳細的介紹,供大家參考。
    在Oracle數據庫系統中,用戶如果要以特權用戶身份(INTERNAL/SYSDBA/SYSOPER)登錄Oracle數據庫可以有兩種身份驗證的方法:即使用與操作系統集成的身份驗證或使用Oracle數據庫的密碼文件進行身份驗證。因此,管理好密碼文件,對於控制授權用戶從遠端或本機登錄Oracle數據庫系統,執行數據庫管理工作,具有重要的意義。
    Oracle數據庫的密碼文件存放有超級用戶INTERNAL/SYS的口令及其他特權用戶的用戶名/口令,它壹般存放在ORACLE_HOME\DATABASE目錄下。
    壹、密碼文件的創建:
    在使用Oracle Instance Manager創建壹數據庫實例的時侯,在ORACLE_HOME\DATABASE目錄下還自動創建了壹個與之對應的密碼文件,文件名為PWDSID.ORA,其中SID代表相應的Oracle數據庫系統標識符。此密碼文件是進行初始數據庫管理工作的基礎。在此之後,管理員也可以根據需要,使用工具ORAPWD.EXE手工創建密碼文件,命令格式如下:
    C:\ >ORAPWD FILE=< FILENAME > PASSWORD
    =< PASSWORD > ENTRIES=< MAX_USERS >
    各命令參數的含義為:
    FILENAME:密碼文件名;
    PASSWORD:設置INTERNAL/SYS帳號的口令;
    MAX_USERS:密碼文件中可以存放的最大用戶數,對應於允許以SYSDBA/SYSOPER權限登錄數據庫的最大用戶數。由於在以後的維護中,若用戶數超出了此限制,則需要重建密碼文件,所以此參數可以根據需要設置得大壹些。
    有了密碼文件之後,需要設置初始化參數REMOTE_LOGIN_PASSWORDFILE來控制密碼文件的使用狀態。[page]  二、設置初始化參數REMOTE_LOGIN_PASSWORDFILE:
    在Oracle數據庫實例的初始化參數文件中,此參數控制著密碼文件的使用及其狀態。它可以有以下幾個選項:
    NONE:指示Oracle系統不使用密碼文件,特權用戶的登錄通過操作系統進行身份驗證;
    EXCLUSIVE:指示只有壹個數據庫實例可以使用此密碼文件。只有在此設置下的密碼文件可以包含有除INTERNAL/SYS以外的用戶信息,即允許將系統權限SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用戶。
    SHARED:指示可有多個數據庫實例可以使用此密碼文件。在此設置下只有INTERNAL/SYS帳號能被密碼文件識別,即使文件中存有其他用戶的信息,也不允許他們以SYSOPER/SYSDBA的權限登錄。此設置為缺省值。
    在REMOTE_LOGIN_PASSWORDFILE參數設置為EXCLUSIVE、SHARED情況下,Oracle系統搜索密碼文件的次序為:在系統註冊庫中查找ORA_SID_PWFILE參數值(它為密碼文件的全路徑名);若未找到,則查找ORA_PWFILE參數值;若仍未找到,則使用缺省值ORACLE_HOME\DATABASE\PWDSID.ORA;其中的SID代表相應的Oracle數據庫系統標識符。
    三、向密碼文件中增加、刪除用戶:
    當初始化參數REMOTE_LOGIN_PASSWORDFILE設置為EXCLUSIVE時,系統允許除INTERNAL/SYS以外的其他用戶以管理員身份從遠端或本機登錄到Oracle數據庫系統,執行數據庫管理工作;這些用戶名必須存在於密碼文件中,系統才能識別他們。由於不管是在創建數據庫實例時自動創建的密碼文件,還是使用工具ORAPWD.EXE手工創建的密碼文件,都只包含INTERNAL/SYS用戶的信息;為此,在實際操作中,可能需要向密碼文件添加或刪除其他用戶帳號。
    由於僅被授予SYSOPER/SYSDBA系統權限的用戶才存在於密碼文件中,所以當向某壹用戶授予或收回SYSOPER/SYSDBA系統權限時,他們的帳號也將相應地被加入到密碼文件或從密碼文件中刪除。由此,向密碼文件中增加或刪除某壹用戶,實際上也就是對某壹用戶授予或收回SYSOPER/SYSDBA系統權限。
    要進行此項授權操作,需使用SYSDBA權限(或INTERNAL帳號)連入數據庫,且初始化參數REMOTE_LOGIN_PASSWORDFILE的設置必須為EXCLUSIVE。具體操作步驟如下:
    創建相應的密碼文件;
    設置初始化參數REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;
    使用SYSDBA權限登錄:
    CONNECT SYS/internal_user_passsword AS SYSDBA;
    啟動數據庫實例並打開數據庫;
    創建相應用戶帳號,對其授權(包括SYSOPER和SYSDBA):
    授予權限:GRANT SYSDBA TO user_name;
    收回權限:REVOKE SYSDBA FROM user_name;
    現在這些用戶可以以管理員身份登錄數據庫系統了; [page]