分类: Oracle

甲骨文Oracle

  • Oracle收購Sun之後:有關Java未來的三個關鍵問題

    我們都已經聽說了有關為什麼Oracle收購Sun的一些猜測:
         Oracle一直都想和IBM站在同一水平線上。他們想要被看作是一個完整的供應商,提供應用程序,平台和數據庫。如果你想要,那就是一站式服務。

         Oracle已經佔據了應用程序和數據庫的大部分市場。為了保持在這一領域的主要地位,他們想要擴展並深入到硬件業務中。

        收購是一項長期的防禦舉動以回應微軟收購SAP的謠言。

        雖然收購的原因對很多人來說是很重要的,但是對於我來說最重要的是會在Sun這15年中所創建和服務的Java技術上發生什麼事情。我經常會寫到”Java is COBOL” ,因為今天幾乎所有的商業都有一些Java要做的事情。謠言在應用程序開發行業中漫天飛,但是我們早知道塵埃會落定,故事將會結束。這不意味著我們不能用歷史來引導我們預測未來。 Ruby能否成為第二個Java?

        從純粹的Java角度來看一看Oracle所得到的,這三個關鍵問題是:

         Java Community Process (JCP)會繼續存在嗎?

         Apache Software Foundation (ASF)和Sun之間的爭端會解決嗎?

         Oracle會通過為JDK扣交TCKs而取得Java IP嗎?

         JCP會繼續存在嗎?

         Oracle是JCP的高級成員,而且他們已經提交了80多個Java Specification Requests (JSRs)。儘管有這個長期的參與承諾,Oracle表示——和其他的供應商和參與者一起——JCP過程需要變得更開放,透明並且廠商中立。特別是在2007年12月12日的時候,Oracle提出了這個:Resolution 1 (由Oracle提議,第二個是由BEA提出) .

         “Executive Committee感覺到JCP變成一個開放獨立並且是廠商中立的標準組織,那裡所有的成員都參與公平競爭,具體有以下特點:

        成員基金開發和管理費用

        一個法人實體,有法律,理事會和董事成員等等。

        一個新的,簡單的IPR Policy(知識產權政策)允許更大範圍的執行。

        嚴格的兼容性要求

        致力於促進Java編程模式

        此外,EC將在對Java Community干預最小的情況下,盡快實施這個計劃以確保這樣的過渡盡快的實施。 “

        所以我們希望Oracle能繼續JCP,但是它可能變成一個完全不同的JCP.如果Oracle成功的實施了所期望的轉變,結果會是非常有趣的而且具有廣泛的影響。特別有趣的是看到Oracle如何實施這些變革。那將是第一個跡象表明Oracle將如何同Java工作。

         Apache Software Foundation (ASF)和Sun之間的爭端會解決嗎?客戶端Java的革命性飛躍圍繞Apache和Sun爭論的主要問題是多種多樣的,但是這裡有一個對這些事件的簡短總結:

         Apache Harmony Project目的是創建一個ASF授權的模塊化虛擬機(VM)和基於Java SE 5.0版本的JDK.

         Sun的JDK開源和OpenJDK項目。

        要成為一個認證的JDK,Harmony需要通過Sun的Technology Compatibility Kits(TCKs)。

         Sun說到Harmony是基於舊的JDK5.0而且不是在最新的JDK6.0上,所以認證過程停滯了,Harmony Project也懸而未決。

        到今天,OpenJDK管理委員會也沒有解決這個爭端。 Oracle如何處理這個情況是他們如何管理Java程序的第二個晴雨表。

         Oracle會通過為JDK扣交TCKs而取得Java IP嗎?

        在JDK認證中涉及了很多法律問題會成為Java的大量蠕蟲。例如,除非你為OpenJDK通過TCK,否則你不獲得Java Intellectual Property (IP)的權力——即你沒有認證的JDK.

        由於你沒有Java SE7的一套規範,而且Sun也沒有購買一個,所有沒有辦法擁有一個官方的OpenJDK 7.Oracle會採取同樣的辦法,而且不會發布一個規範或是TCKs,這樣將IP在內部保持。

        總結

        如你所見,這三個問題都有所關聯,每個答案本身有不同的水平和層次,例如:

         JCP肯能會繼續存在,但是它可能在指定技術方向上承擔不同的作用。

        管理上的這種差異為ASF問題提供一個簡單的解決方案,讓它們成為泛黃的記憶。

         Oracle可能會推出一個新的JDK規範連同TCKs一起,完全實現一個開放的JDK承諾。

        如何發揮這些因素將讓Java developmer community清楚的知道Oracle如何運行Java.

  • Oracle數據庫命令速查

    1.日誌管理

    1.1.強制日誌切換(forcing log switches)

    sql> alter system switch logfile;

    1.2.強制執行檢查點(forcing checkpoints)

    sql> alter system checkpoint;

    1.3.增加一個重做日誌組(adding online redo log groups)

    sql> alter database add logfile [group 4]sql> (‘/disk3/log4a.rdo’,’/disk4/log4b.rdo’) size 1m;

    1.4.增加一個重做日誌文件(adding online redo log members)

    sql> alter database add logfile member

    sql> ‘/disk3/log1b.rdo’ to group 1,

    sql> ‘/disk4/log2b.rdo’ to group 2;

    1.5.改變重做日誌文件名(changes the name of the online redo logfile)

    sql> alter database rename file ‘c:/oracle/oradata/oradb/redo01.log’

    sql> to ‘c:/oracle/oradata/redo01.log’;

    1.6.刪除重做日誌組(drop online redo log groups)

    sql> alter database drop logfile group 3;

    1.7.刪除重做日誌文件(drop online redo log members)

    sql> alter database drop logfile member ‘c:/oracle/oradata/redo01.log’;

    1.8.清空重做日誌文件(clearing online redo log files)

    sql> alter database clear [unarchived] logfile ‘c:/oracle/log2a.rdo’;

    1.9.使用logminer分析重做日誌文件(using logminer analyzing redo logfiles)

    a. in the init.ora specify utl_file_dir = ‘ ‘

    b. sql> execute dbms_logmnr_d.build(‘oradb.ora’,’c:\oracle\oradb\log’);

    c. sql> execute dbms_logmnr_add_logfile(‘c:\oracle\oradata\oradb\redo01.log’,

    sql> dbms_logmnr.new);

    d. sql> execute dbms_logmnr.add_logfile(‘c:\oracle\oradata\oradb\redo02.log’,

    sql> dbms_logmnr.addfile);

    e. sql> execute dbms_logmnr.start_logmnr(dictfilename=>’c:\oracle\oradb\log\oradb.ora’);

    f. sql> select * from v$logmnr_contents(v$logmnr_dictionary,v$logmnr_parameters

    sql> v$logmnr_logs);

    g. sql> execute dbms_logmnr.end_logmnr;

    2.表空間管理

    2.1.創造表空間(create tablespaces)

    sql> create tablespace ts_name datafile ‘c:\oracle\oradata\file1.dbf’ size 100m ,

    sql>’c:\oracle\oradata\file2.dbf’ size 100m minimum extent 550k [logging/nologging]sql> default storage (initial 500k next 500k maxextents 500 pctinccease 0)

    sql> [online/offline] [permanent/temporary] [extent_management_clause]

    2.2.創建本地管理的表空間(locally managed tablespace)

    sql> create tablespace user_data datafile ‘c:\oracle\oradata\user_data01.dbf’

    sql> size 500m extent management local uniform size 10m;

    2.3.創建臨時表空間(temporary tablespace)

    sql> create temporary tablespace temp tempfile ‘c:\oracle\oradata\temp01.dbf’

    sql> size 500m extent management local uniform size 10m;

    2.4.改變表空間的存儲參數(change the storage setting)

    sql> alter tablespace app_data minimum extent 2m;

    sql> alter tablespace app_data default storage(initial 2m next 2m maxextents 999);

    2.5.使表空間離線或連線(taking tablespace offline or online)

    sql> alter tablespace app_data offline;

    sql> alter tablespace app_data online;

    2.6.設置表空間為只讀/可寫模式(read_only tablespace)

    sql> alter tablespace app_data read only|write;

    2.7.刪除表空間(droping tablespace)

    sql> drop tablespace app_data including contents;

    2.8.允許數據文件自動擴展(enableing automatic extension of data files)

    sql> alter tablespace app_data add datafile ‘c:\oracle\oradata\app_data01.dbf’ size 200m

    sql> autoextend on next 10m maxsize 500m;

    2.9.手工改變數據文件的大小(change the size fo data files manually)

    sql> alter database datafile ‘c:\oracle\oradata\app_data.dbf’ resize 200m;

    2.10.改名表空間中的數據文件(Moving data files: alter tablespace)

    sql> alter tablespace app_data rename datafile ‘c:\oracle\oradata\app_data.dbf

    sql> to ‘c:\oracle\app_data.dbf’;

    2.11.改變數據庫中的數據文件(moving data files:alter database)

    sql> alter database rename file ‘c:\oracle\oradata\app_data.dbf’ to ‘c:\oracle\app_data.dbf’;

    3.表

    3.1.創建表(create a table)

    sql> create table table_name (column datatype,column datatype]….)

    sql> tablespace tablespace_name [pctfree integer] [pctused integer]

    sql> [initrans integer] [maxtrans integer]sql> storage(initial 200k next 200k pctincrease 0 maxextents 50)

    sql> [logging|nologging] [cache|nocache]

    3.2.複製一個已存在的表(copy an existing table)

    sql> create table table_name [logging|nologging] as subquery

    3.3.創建一個臨時表(create temporary table)

    sql> create global temporary table xay_temp as select * from xay;

    on commit preserve rows/on commit delete rows

    3.4. pctfree和pctused參數計算公式

    pctfree = (average row size – initial row size) *100 /average row size

    pctused = 100-pctfree- (average row size*100/available data space)

    這是標準的計算公式。

    PCTFREE:指定表內每個數據塊中空間的百分比。 PCTFREE的值必須介於0和99之間。如果值為零,表示可以通過插入新行來填充整個塊。缺省值為10。此值表示每個塊中保留著10%的空間,用於更新現有的行以及插入新行,每個塊最多可填充到90%。

    PCTUSED:指定為表內每個數據塊維護的已用空間的最小百分比。如果一個塊的已用空間低於PCTUSED,則可在該塊中插入行。 PCTUSED的值為介於0和99之間的整數,缺省值為40。

    結合PCTFREE和PCTUSED就可以確定將新行插入到現有數據塊中,還是插入到新塊中。這兩個參數值的和必須小於或等於100。使用這兩個參數可以更有效地利用表內的空間。

    設置PCTFREE和PCTUSED

    設置PCTFREE

    PCTFREE值越高,可為數據庫塊內的更新提供的空間就越大。如果表存在下面兩種情況,則應設置一個更高的值:

    ?某些列最初為NULL,後來更新為某個值

    ?某些列由於更新,大小可能增加

    PCTFREE的值越高,塊密度就越低,即每個塊容納的行數就越少。

    上面的公式確保塊中有足夠的空閒空間供行增長使用。

    設置PCTUSED

    設置PCTUSED以確保只有在具備足夠空間來容納一個平均大小的行時才將塊返回到空閒列表中。如果空閒列表中的某個塊沒有足夠的空間來插入一行,Oracle服務器將查找空閒列表中的下一個塊。直到找到具備足夠空間的塊或者到達列表的末尾,這種線性掃描才會結束。使用給定的公式可以增加找到具有所需空閒空間的塊的概率,從而縮短掃描空閒列表的時間。

    注:可以使用ANALYZE TABLE命令估算平均行大小的值。

    注:Oracle9i “自動段空間管理”功能可替代PCTUSED、FREELISTS和FREELIST GROUPS。

    3.5.改變存儲和塊利用率參數(change storage and block utilization parameter)

    sql> alter table table_name pctfree=30 pctused=50 storage(next 500k minextents 2 maxextents 100);

    3.6.手工分配區間(extents)(manually allocating extents)

    sql> alter table table_name allocate extent(size 500k datafile ‘c:/oracle/data.dbf’);

    3.7.改變表的所屬表空間(move tablespace)

    sql> alter table employee move tablespace users;

    3.8.釋放表中未用空間(deallocate of unused space)

    sql> alter table table_name deallocate unused [keep integer]

    3.9.截斷表(truncate)(truncate a table)

    sql> truncate table table_name;

    截斷一個表將刪除表中所有行,從而釋放已使用的空間。

    對應的索引將被截斷。

    (注:truncate table不是DML語句,是DDL語句

    另外,truncate與delete的區別是,delelte不釋放空間,truncate釋放空間。 )

    3.10.刪除表(drop a table)

    sql> drop table table_name [cascade constraints];

    3.11.刪除列(drop a column)

    sql> alter table table_name drop column comments cascade constraints checkpoint 1000;

    alter table table_name drop columns continue;

    3.12.標識某一列為未使用(unused)(mark a column as unused)

    sql> alter table table_name set unused column comments cascade constraints;

    alter table table_name drop unused columns checkpoint 1000;

    alter table orders drop columns continue checkpoint 1000

    data_dictionary : dba_unused_col_tabs

    除將列從表中刪除以外,還可以先將列標記為“未使用”,以後再刪除。因為沒有刪除數據,所以此操作不回收磁盤空間,因而具有速度比較快的優點。被標為“未使用”的列可在以後系統活動較少時從表中刪除。

    未使用的列就像不屬於表一樣。查詢時看不到未使用列中的數據。此外,在執行DESCRIBE命令時,也不會顯示這些列的名稱和數據類型。用戶可以添加與未使用的列同名的新列。

    如果想刪除同一表中的兩列,則可先將列設置為“未使用”然後再刪除。在刪除兩列時,表中的所有行都會更新兩次;但如果將這些列設置為“未使用”然後再刪除,則所有的行僅更新一次。

    4.索引

    4.1.創建一個基於函數的索引(creating function-based indexes)

    sql> create index summit.item_quantity on summit.item(quantity-quantity_shipped);

    基於函數的索引(Function-based indexes):

    如果在表中要建立索引的一列或多列上使用了函數或表達式,則創建的是基於函數的索引。基於函數的索引預先計算函數或表達式的值,並將結果存儲在索引中。可以將基於函數的索引創建為B樹或位圖索引。

    4.2.創建一個B樹索引(create a B-tree index)

    sql> create [unique] index index_name on table_name(column,.. asc/desc) tablespace

    sql> tablespace_name [pctfree integer] [initrans integer] [maxtrans integer]

    sql> [logging | nologging] [nosort] storage(initial 200k next 200k pctincrease 0 maxextents 50);

    B樹:平衡二叉樹,oracle中用的最多的索引模式,適用於取值唯一性高的情況。只有兩層,非葉級、葉級(指針所在級)

    4.3.索引中pctfree參數計算公式

    pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows

    4.4.創建一個反向鍵索引(creating reverse key indexes)

    sql> create unique index xay_id on xay(a) reverse pctfree 30 storage(initial 200k next 200k pctincrease 0 maxextents 50) tablespace indx;

    4.5.創建位圖索引(create bitmap index)

    sql> create bitmap index xay_id on xay(a) pctfree 30 storage( initial 200k next 200k pctincrease 0 maxextents 50) tablespace indx;

    在下列情況中,位圖索引比B樹索引更有利:

    ?當表包含數百萬行且鍵列的基數很低(即,該列中重複的值很多)時。例如,對於包含護照記錄的表的性別列和婚姻狀況列而言,位圖索引比B樹索引更適合

    ?當查詢經常使用涉及OR運算符的多個WHERE條件組合時

    ?當鍵列上存在只讀或很少的更新操作時

    (位圖索引適用於取值的唯一性很低的情況)

    4.6.改變索引的存儲參數(change storage parameter of index)

    sql> alter index xay_id storage (next 400k maxextents 100);

    4.7.為索引分配空間(allocating index space)

    sql> alter index xay_id allocate extent(size 200k datafile ‘c:/oracle/index.dbf’);8.alter index xay_id deallocate unused;

    手動分配索引空間:

    在表上進行頻繁的插入操作前,可能需要向索引添加區。添加區可防止索引動態擴展並導致性能降低。

    (其中指定的數據文件一定是索引所在表空間的數據文件)

    5.約束(constraints)

    5.1.將約束定義為立即(immediate)或延遲(deferred)(define constraints as immediate or deferred)

    sql> alter session set constraint[s] = immediate/deferred/default;

    set constraint[s] constraint_name/all immediate/deferred;

    SET CONSTRAINTS語句用於將特定事務處理的約束設置為DEFERRED或IMMEDIATE。可以使用此語句設置約束名稱列表或約束的模式。 SET CONSTRAINTS模式將一直持續到事務處理完成或者另一個SET CONSTRAINTS語句重置模式。 SET CONSTRAINTS語句不允許在觸發器內部使用。

    ALTER SESSION語句還包含將約束設置為IMMEDIATE或DEFERRED的子句SET CONSTRAINTS。此命令缺省為設置所有(ALL)可延遲的約束(不能指定約束名稱列表)。 ALTER SESSION SET CONSTRAINTS語句僅適用於當前的會話。

    5.2.刪除表或表空間時連帶刪除其上的外鍵(約束)

    sql> drop table table_name cascade constraints

    sql> drop tablespace tablespace_name including contents cascade constraints

    在刪除父表之前,必須先刪除外鍵。可以使用以下一條語句同時執行這兩個操作:

             DROP TABLE table CASCADE CONSTRAINTS

    在未刪除或禁用外鍵之前無法截斷(truncated)父表。

    在刪除包含父表的表空間之前,必須先刪除外鍵。可使用下列命令完成該操作:

             DROP TABLESPACE tablespace INCLUDING CONTENTS

             CASCADE CONSTRAINTS

    如果從父表中刪除行時沒有使用DELETE CASCADE選項,Oracle服務器必須確保子表中的行不包含相應的外鍵。同樣,僅當子行中不包含舊鍵值時,才允許更新父鍵。如果子表的外鍵上沒有索引,則Oracle服務器鎖定子表並禁止更改以確保引用完整性。如果表上有索引,則可通過鎖定索引項並避免子表上有更具限制性的鎖來維護引用完整性。如果必須從不同的事務處理同時更新兩個表,則在外鍵列上創建索引。

    5.3.在創建表時定義約束(define constraints while create a table)

    sql> create table xay(id number(7) constraint xay_id primary key deferrable

    sql> using index storage(initial 100k next 100k) tablespace indx);

    primary key/unique/references table(column)/check

    5.4.啟用當前禁用的約束(enable constraints)

    sql> alter table xay enable novalidate constraint xay_id;

    啟用NOVALIDATE:

    對於當前已有索引的PRIMARY KEY和UNIQUE約束,啟用NOVALIDATE約束比啟用VALIDATE約束要快得多,這是因為,如果約束是可延遲的,則不檢查現有數據是否違反約束。如果使用該選項啟用約束,則不要求鎖定表。這種方法適合表上有許多DML活動的情況,如在OLTP環境中。

    但是,如果需要創建索引,使用這種啟用約束的方法並不能比ENABLE VALIDATE帶來更多的好處,因為Oracle服務器在建立索引時鎖定表。

    5.5.啟用約束(enable constraints)

    sql> alter table xay enable validate constraint xay_id;

    6.加載(load)數據

    6.1.使用insert語句從另一張表中“直接加載”數據到新表(loading data using direct_load insert)

    sql> insert /*+append */ into emp nologging

    sql> select * from emp_old;

    6.2.使用insert方式的“並行直接加載”數據(parallel direct-load insert)

    sql> alter session enable parallel dml;

    sql> insert /*+parallel(emp,2) */ into emp nologging

    sql> select * from emp_old;

    6.3.使用sql*loader加載數據(using sql*loader)

    sql> sqlldr scott/tiger \

    sql> control = ulcase6.ctl \

    sql> log = ulcase6.log direct=true

    7.重整數據(reorganizing data)

    7.1.使用export倒出數據(using export)

    $exp scott/tiger tables(dept,emp) file=c:\emp.dmp log=exp.log compress=n direct=y

    7.2.使用import倒入數據(using import)

    $imp scott/tiger tables(dept,emp) file=emp.dmp log=imp.log ignore=y

    7.3.以移動表空間(transporting)方式導入導出一個表(transporting a tablespace)

    sql>alter tablespace sales_ts read only;

    $exp sys/.. file=xay.dmp transport_tablespace=y tablespace=sales_ts

    triggers=n constraints=n

    $copy datafile

    $imp sys/.. file=xay.dmp transport_tablespace=y datafiles=(/disk1/sles01.dbf,/disk2

    /sles02.dbf)

    sql> alter tablespace sales_ts read write;

    7.4. checking transport set

    sql> DBMS_tts.transport_set_check(ts_list =>’sales_ts’ ..,incl_constraints=>true);

    在表transport_set_violations中查看

    sql> dbms_tts.isselfcontained為true是,表示自包含

    8.管理口令及相關資源(managing password security and resources)

    8.1.修改用戶帳號加/解鎖及口令(controlling account lock and password)

    sql> alter user juncky identified by oracle account unlock;

    8.2. user_provided password function

    sql> function_name(userid in varchar2(30),password in varchar2(30),

    old_password in varchar2(30)) return boolean

    8.3.創建概要文件:設置口令參數(create a profile : password setting)

    sql> create profile grace_5 limit failed_login_attempts 3

    sql> password_lock_time unlimited password_life_time 30

    sql>password_reuse_time 30 password_verify_function verify_function

    sql> password_grace_time 5;

    8.4.修改概要文件(altering a profile)

    sql> alter profile default limit

    sql> failed_login_attempts 3

    sql> password_life_time 60;

    8.5.刪除概要文件(drop a profile)

    sql> drop profile grace_5 [cascade];

    8.6.創建概要文件:設置資源限額(create a profile : resource limit)

    sql> create profile developer_prof limit sessions_per_user 2

    sql> cpu_per_session 10000 idle_time 60 connect_time 480;

    8.7. view => resource_cost : alter resource cost

    dba_Users,dba_profiles

    8.8.允許資源限額(enable resource limits)

    sql> alter system set resource_limit=true;

    9.管理用戶(Managing users)

    9.1.創建用戶(數據庫認證方式)(create a user: database authentication)

    sql> create user juncky identified by oracle default tablespace users temporary tablespace temp quota 10m/unlimited on data password expire [account lock|unlock] [profile profilename|default];

    9.2.修改用戶的表空間限額(change user quota on tablespace)

    sql> alter user juncky quota 0 on users;

    9.3.刪除用戶(drop a user)

    sql> drop user juncky [cascade];

    9.4.監控用戶的視圖(monitor user)

    view: dba_users , dba_ts_quotas

    10.管理權限(managing privileges)

    10.1.系統權限視圖(system privileges:)

    view => system_privilege_map ,dba_sys_privs,session_privs

    10.2.授權系統權限(grant system privilege)

    sql> grant create session,create table to managers;

    sql> grant create session to scott with admin option;

    with admin option can grant or revoke privilege from any user or role;

    10.3. sysdba和sysoper的權限(sysdba and sysoper privileges:)

    sysoper: startup,shutdown,alter database open|mount,alter database backup controlfile,alter tablespace begin/end backup,recover database,alter database archivelog,restricted session

    sysdba:sysoper privileges with admin option,create database,recover database until

    10.4.口令文件成員視圖(password file members:)

    view:=> v$pwfile_users

    10.5. O7_dictionary_accessibility =true

       restriction access to view or tables in other schema

    10.6.撤銷系統權限(revoke system privilege)

    sql> revoke create table from karen;

    sql> revoke create session from scott;

    10.7.授權對象權限(grant object privilege)

    sql> grant execute on dbms_pipe to public;

    sql> grant update(first_name,salary) on employee to karen with grant option;

    10.8.顯示對象權限的視圖(display object privilege ):

    view => dba_tab_privs, dba_col_privs

    10.9.撤銷用戶的對象權限(revoke object privilege)

    sql> revoke execute on dbms_pipe from scott [cascade constraints];

    10.10.審計記錄視圖(audit record view) :

    => sys. aud$

    10.11.保護審計線索(protecting the audit trail)

    sql> audit delete on sys.aud$ by access;

    保護審計線索:

    應保護審計線索,以防添加、修改或刪除審計信息。發出以下命令:

             SQL> AUDIT delete ON sys.aud$ BY ACCESS;

    可防止審計線索未經授權即被刪除;只有DBA才擁有DELETE_CATALOG_ROLE角色。

    10.12.語句審計(statement auditing)

    sql> audit user;

    語句審計:該種審計對SQL語句進行選擇性審計,而並不審計語句針對的特定方案對象。例如,AUDIT TABLE跟踪多個DDL語句,而與這些語句針對的表無關。可以設置語句審計,以便對數據庫中的所選用戶或每個用戶進行審計。

    10.13.權限審計(privilege auditing)

    sql> audit select any table by summit by access;

    權限審計:

    該種審計對執行操作應具有的相應系統權限進行選擇性審計,如AUDIT CREATE ANY TRIGGER。可以設置權限審計對數據庫中的所選用戶或每個用戶進行審計。

    10.14.方案對象審計(schema object auditing)

    sql> audit lock on summit.employee by access whenever successful;

    方案對象審計:

    該種審計對特定方案對像上的特定語句進行選擇性審計,如AUDIT SELECT ON HR.EMPLOYEES。方案對象審計始終適用於所有數據庫用戶。

    11.審計選項視圖(view audit option) :

    view=> all_def_audit_opts,dba_stmt_audit_opts,dba_priv_audit_opts,dba_obj_audit_opts

    12.審計結果視圖(view audit result):

    view=> dba_audit_trail,dba_audit_exists,dba_audit_object,dba_audit_session,dba_audit_statement

    13.管理角色(manager role)

    13.1.創建角色(create roles)

    sql> create role sales_clerk;

    sql> create role hr_clerk identified by bonus;

    sql> create role hr_manager identified externally;

    13.2.修改角色(modify role)

    sql> alter role sales_clerk identified by commission;

    sql> alter role hr_clerk identified externally;

    sql>alter role hr_manager not identified;

    13.3.分配角色給用戶(assigning roles)

    sql> grant sales_clerk to scott;

    sql> grant hr_clerk to hr_manager;

    sql> grant hr_manager to scott with admin option;

    13.4.建立缺省角色(establish default role)

    sql> alter user scott default role hr_clerk,sales_clerk;

    sql> alter user scott default role all;

    sql> alter user scott default role all except hr_clerk;

    sql> alter user scott default role none;

    13.5.允許和禁止角色(enable and disable roles)

    sql> set role hr_clerk;

    sql> set role sales_clerk identified by commission;

    sql> set role all except sales_clerk;

    sql> set role none;

    13.6.撤銷用戶的角色(remove role from user)

    sql> revoke sales_clerk from scott;

    sql> revoke hr_manager from public;

    13.7.刪除角色(remove role)

    sql> drop role hr_manager;

    13.8.顯示角色信息的視圖(display role information)

    view: =>dba_roles,dba_role_privs,role_role_privs,dba_sys_privs,role_sys_privs,role_tab_privs,session_roles

    14.備份和恢復(BACKUP and RECOVERY)

    14.1.備份恢復用相關視圖

    v$sga,v$instance,v$process,v$bgprocess,v$database,v$datafile,v$sgastat

    14.2.為Rman設置初始化參數

    Rman need set dbwr_IO_slaves or backup_tape_IO_slaves and large_pool_size

    14.3.監控並行回滾的視圖(Monitoring Parallel Rollback)

    > v$fast_start_servers , v$fast_start_transactions

    14.4.執行一個冷備份(perform a closed database backup (noarchivelog))

    > shutdown immediate

    > cp files /backup/

    > startup

    14.5.改變數據文件的位置(restore to a different location)

    > connect system/manager as sysdba

    > startup mount

    > alter database rename file ‘/disk1/../user.dbf’ to ‘/disk2/../user.dbf’;

    > alter database open;

    14.6.恢復命令(recover)語法(recover syntax)

    –recover a mounted database

    >recover database;

    >recover datafile ‘/disk1/data/df2.dbf’;

    >alter database recover database;

    –recover an opened database

    >recover tablespace user_data;

    >recover datafile 2;

    >alter database recover datafile 2;

    14.7.設置自動應用重做日誌文件(how to apply redo log files automatically)

    >set autorecovery on

    >recover automatic datafile 4;

    14.8.完全恢復(complete recovery:)

    –method 1(mounted databae)

    >copy c:\backup\user.dbf c:\oradata\user.dbf

    >startup mount

    >recover datafile ‘c:\oradata\user.dbf;

    >alter database open;

    –method 2(opened database,initially opened,not system or rollback datafile)

    >copy c:\backup\user.dbf c:\oradata\user.dbf (alter tablespace offline)

    >recover datafile ‘c:\oradata\user.dbf’ or

    >recover tablespace user_data;

    >alter database datafile ‘c:\oradata\user.dbf’ online or

    >alter tablespace user_data online;

    –method 3(opened database,initially closed not system or rollback datafile)

    >startup mount

    >alter database datafile ‘c:\oradata\user.dbf’ offline;

    >alter database open

    >copy c:\backup\user.dbf d:\oradata\user.dbf

    >alter database rename file ‘c:\oradata\user.dbf’ to ‘d:\oradata\user.dbf’

    >recover datafile ‘e:\oradata\user.dbf’ or recover tablespace user_data;

    >alter tablespace user_data online;

    –method 4(loss of data file with no backup and have all archive log)

    >alter tablespace user_data offline immediate;

    >alter database create datafile ‘d:\oradata\user.dbf’ as ‘c:\oradata\user.dbf”

    >recover tablespace user_data;

    >alter tablespace user_data online

    14.9.對一個打開的數據庫進行備份(perform an open database backup)

    > alter tablespace user_data begin backup;

    > copy files /backup/

    > alter database datafile ‘/c:/../data.dbf’ end backup;

    > alter system switch logfile;

    14.10.備份一個控製文件(backup a control file)

    > alter database backup controlfile to ‘control1.bkp’;

    > alter database backup controlfile to trace;

    14.11.非歸檔模式下的恢復(recovery (noarchivelog mode))

    > shutdown abort

    > cp files

    > startup

    14.12.備份模式下的文件恢復(recovery of file in backup mode)

    >alter database datafile 2 end backup;

    14.13.清空重做日誌文件(clearing redo log file)

    >alter database clear unarchived logfile group 1;

    >alter database clear unarchived logfile group 1 unrecoverable datafile;

    14.14.重做日誌的恢復(刪除與重建)(redo log recovery)

    >alter database add logfile group 3 ‘c:\oradata\redo03.log’ size 1000k;

    >alter database drop logfile group 1;

    >alter database open;

    or >cp c:\oradata\redo02.log’ c:\oradata\redo01.log

    >alter database clear logfile ‘c:\oradata\log01.log’;

  • 常用的Oracle命令

    一、ORACLE的啟動和關閉
    1、在單機環境下
    要想啟動或關閉ORACLE系統必須首先切換到ORACLE用戶,如下
    su – oracle
    
    a、啟動ORACLE系統
    oracle>svrmgrl
    SVRMGR>connect internal
    SVRMGR>startup
    SVRMGR>quit
    
    b、關閉ORACLE系統
    oracle>svrmgrl
    SVRMGR>connect internal
    SVRMGR>shutdown
    SVRMGR>quit
    
    啟動oracle9i數據庫命令:
    $ sqlplus /nolog
    
    SQL*Plus: Release 9.2.0.1.0 – Production on Fri Oct 31 13:53:53 2003
    
    Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
    
    SQL> connect / as sysdba
    Connected to an idle instance.
    SQL> startup^C
    
    SQL> startup
    ORACLE instance started.
    
    
    2、在雙機環境下
    要想啟動或關閉ORACLE系統必須首先切換到root用戶,如下
    su - root
    
    a、啟動ORACLE系統
    hareg -y oracle
    
    b、關閉ORACLE系統
    hareg -n oracle
    
    Oracle數據庫有哪幾種啟動方式
    
    
    說明:
    
    有以下幾種啟動方式:
    1、startup nomount
    非安裝啟動,這種方式啟動下可執行:重建控製文件、重建數據庫
    
    讀取init.ora文件,啟動instance,即啟動SGA和後台進程,這種啟動只需要init.ora文件。
    
    
    2、startup mount dbname
    安裝啟動,這種方式啟動下可執行:
    數據庫日誌歸檔、
    數據庫介質恢復、
    使數據文件聯機或脫機,
    重新定位數據文件、重做日誌文件。
    
    執行“nomount”,然後打開控製文件,確認數據文件和聯機日誌文件的位置,
    但此時不對數據文件和日誌文件進行校驗檢查。
    
    
    3、startup open dbname
    先執行“nomount”,然後執行“mount”,再打開包括Redo log文件在內的所有數據庫文件,
    這種方式下可訪問數據庫中的數據。
    
    
    4、startup,等於以下三個命令
    startup nomount
    alter database mount
    alter database open
    
    
    5、startup restrict
    約束方式啟動
    這種方式能夠啟動數據庫,但只允許具有一定特權的用戶訪問
    非特權用戶訪問時,會出現以下提示:
    ERROR:
    ORA-01035: ORACLE只允許具有RESTRICTED SESSION權限的用戶使用
    
    
    6、startup force
    強制啟動方式
    當不能關閉數據庫時,可以用startup force來完成數據庫的關閉
    先關閉數據庫,再執行正常啟動數據庫命令
    
    
    7、startup pfile=參數文件名
    帶初始化參數文件的啟動方式
    先讀取參數文件,再按參數文件中的設置啟動數據庫
    例:startup pfile=E:Oracleadminoradbpfileinit.ora
    
    
    8、startup EXCLUSIVE
    二、用戶如何有效地利用數據字典
     ORACLE的數據字典是數據庫的重要組成部分之一,它隨著數據庫的產生而產生,隨著數據庫的變化而變化,
    體現為sys用戶下的一些表和視圖。數據字典名稱是大寫的英文字符。
    
    數據字典裡存有用戶信息、用戶的權限信息、所有數據對象信息、表的約束條件、統計分析數據庫的視圖等。
    我們不能手工修改數據字典裡的信息。
    
    很多時候,一般的ORACLE用戶不知道如何有效地利用它。
    
     dictionary全部數據字典表的名稱和解釋,它有一個同義詞dict
     dict_column全部數據字典表裡字段名稱和解釋
    
    如果我們想查詢跟索引有關的數據字典時,可以用下面這條SQL語句:
    
     SQL>select * from dictionary where instr(comments,’index’)>0;
    
    如果我們想知道user_indexes表各字段名稱的詳細含義,可以用下面這條SQL語句:
    
     SQL>select column_name,comments from dict_columns where table_name=’USER_INDEXES’;
    
    依此類推,就可以輕鬆知道數據字典的詳細名稱和解釋,不用查看ORACLE的其它文檔資料了。
    
    下面按類別列出一些ORACLE用戶常用數據字典的查詢使用方法。
    
     1、用戶
    
    查看當前用戶的缺省表空間
     SQL>select username,default_tablespace from user_users;
    
    查看當前用戶的角色
     SQL>select * from user_role_privs;
    
    查看當前用戶的系統權限和表級權限
     SQL>select * from user_sys_privs;
     SQL>select * from user_tab_privs;
    
     2、表
    
    查看用戶下所有的表
     SQL>select * from user_tables;
    
    查看名稱包含log字符的表
     SQL>select object_name,object_id from user_objects
     where instr(object_name,’LOG’)>0;
    
    查看某表的創建時間
     SQL>select object_name,created from user_objects where object_name=upper(‘&table_name’);
    
    查看某表的大小
     SQL>select sum(bytes)/(1024*1024) as “size(M)” from user_segments
     where segment_name=upper(‘&table_name’);
    
    查看放在ORACLE的內存區裡的表
     SQL>select table_name,cache from user_tables where instr(cache,’Y’)>0;
    
     3、索引
    
    查看索引個數和類別
     SQL>select index_name,index_type,table_name from user_indexes order by table_name;
    
    查看索引被索引的字段
     SQL>select * from user_ind_columns where index_name=upper(‘&index_name’);
    
    查看索引的大小
     SQL>select sum(bytes)/(1024*1024) as “size(M)” from user_segments
     where segment_name=upper(‘&index_name’);
    
     4、序列號
    
    查看序列號,last_number是當前值
     SQL>select * from user_sequences;
    
     5、視圖
    
    查看視圖的名稱
     SQL>select view_name from user_views;
    
    查看創建視圖的select語句
     SQL>set view_name,text_length from user_views;
     SQL>set long 2000;說明:可以根據視圖的text_length值設定set long的大小
     SQL>select text from user_views where view_name=upper(‘&view_name’);
    
     6、同義詞
    
    查看同義詞的名稱
     SQL>select * from user_synonyms;
    
     7、約束條件
    
    查看某表的約束條件
     SQL>select constraint_name, constraint_type,search_condition, r_constraint_name
     from user_constraints where table_name = upper(‘&table_name’);
    
     SQL>select c.constraint_name,c.constraint_type,cc.column_name
     from user_constraints c,user_cons_columns cc
     where c.owner = upper(‘&table_owner’) and c.table_name = upper(‘&table_name’)
     and c.owner = cc.owner and c.constraint_name = cc.constraint_name
     order by cc.position;
    
     8、存儲函數和過程
    
    查看函數和過程的狀態
     SQL>select object_name,status from user_objects where object_type=’FUNCTION’;
     SQL>select object_name,status from user_objects where object_type=’PROCEDURE’;
    
    查看函數和過程的源代碼
     SQL>select text from all_source where owner=user and name=upper(‘&plsql_name’);
    
    
    三、查看數據庫的SQL
    1、查看表空間的名稱及大小
    
     select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
     from dba_tablespaces t, dba_data_files d
     where t.tablespace_name = d.tablespace_name
     group by t.tablespace_name;
    
    2、查看表空間物理文件的名稱及大小
    
     select tablespace_name, file_id, file_name,
     round(bytes/(1024*1024),0) total_space
     from dba_data_files
     order by tablespace_name;
    
    3、查看回滾段名稱及大小
    
     select segment_name, tablespace_name, r.status,
     (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,
     max_extents, v.curext CurExtent
     From dba_rollback_segs r, v$ro

    請保存好.以備後用

  • Oracle命令全集

    第一章:日誌管理
    第二章:表空間管理
    第三章:表
    第四章:索引
    第五章:約束
    第六章:LOAD數據
    第七章:reorganizing data
    第八章: managing password security and resources
    第九章:Managing users
    第十章:managing privileges
    第十一章: manager role
    第十二章: BACKUP and RECOVERY
    Oracle命令全集
    第一章:日誌管理
    1.forcing log switches
         sql> alter system switch logfile;
         2.forcing checkpoints
         sql> alter system checkpoint;
         3.adding online redo log groups
         sql> alter database add logfile [group 4]
         sql> (‘/disk3/log4a.rdo’,’/disk4/log4b.rdo’) size 1m;
         4.adding online redo log members
         sql> alter database add logfile member
         sql> ‘/disk3/log1b.rdo’ to group 1,
         sql> ‘/disk4/log2b.rdo’ to group 2;
         5.changes the name of the online redo logfile
         sql> alter database rename file ‘c:/oracle/oradata/oradb/redo01.log’
         sql> to ‘c:/oracle/oradata/redo01.log’;
         6.drop online redo log groups
         sql> alter database drop logfile group 3;
         7.drop online redo log members
         sql> alter database drop logfile member ‘c:/oracle/oradata/redo01.log’;
         8.clearing online redo log files
         sql> alter database clear [unarchived] logfile ‘c:/oracle/log2a.rdo’;
         9.using logminer analyzing redo logfiles
         a. in the init.ora specify utl_file_dir = ‘ ‘
         b. sql> execute dbms_logmnr_d.build(‘oradb.ora’,’c:oracleoradblog’);
         c. sql> execute dbms_logmnr_add_logfile(‘c:oracleoradataoradbredo01.log’,
         sql> dbms_logmnr.new);
         d. sql> execute dbms_logmnr.add_logfile(‘c:oracleoradataoradbredo02.log’,
         sql> dbms_logmnr.addfile);
         e. sql> execute dbms_logmnr.start_logmnr(dictfilename=>’c:oracleoradblogoradb.ora’);
         f. sql> select * from v$logmnr_contents(v$logmnr_dictionary,v$logmnr_parameters
         sql> v$logmnr_logs);
         g. sql> execute dbms_logmnr.end_logmnr;
    第二章:表空間管理
         1.create tablespaces
         sql> create tablespace tablespace_name datafile ‘c:oracleoradatafile1.dbf’ size 100m,
         sql> ‘c:oracleoradatafile2.dbf’ size 100m minimum extent 550k [logging/nologging]
         sql> default storage (initial 500k next 500k maxextents 500 pctinccease 0)
         sql> [online/offline] [permanent/temporary] [extent_management_clause]
         2.locally managed tablespace
         sql> create tablespace user_data datafile ‘c:oracleoradatauser_data01.dbf’
         sql> size 500m extent management local uniform. size 10m;
         3.temporary tablespace
         sql> create temporary tablespace temp tempfile ‘c:oracleoradatatemp01.dbf’
         sql> size 500m extent management local uniform. size 10m;
         4.change the storage setting
         sql> alter tablespace app_data minimum extent 2m;
         sql> alter tablespace app_data default storage(initial 2m next 2m maxextents 999);
         5.taking tablespace offline or online
         sql> alter tablespace app_data offline;
         sql> alter tablespace app_data online;
         6.read_only tablespace
         sql> alter tablespace app_data read only|write;
         7.droping tablespace
         sql> drop tablespace app_data including contents;
         8.enableing automatic extension of data files
         sql> alter tablespace app_data add datafile ‘c:oracleoradataapp_data01.dbf’size 200m
         sql> autoextend on next 10m maxsize 500m;
         9.change the size fo data files manually
         sql> alter database datafile ‘c:oracleoradataapp_data.dbf’resize 200m;
         10.Moving data files: alter tablespace
         sql> alter tablespace app_data rename datafile ‘c:oracleoradataapp_data.dbf’
         sql> to ‘c:oracleapp_data.dbf’;
         11.moving data files:alter database
         sql> alter database rename file ‘c:oracleoradataapp_data.dbf’
         sql> to ‘c:oracleapp_data.dbf’;
    第三章:表
         1.create a table
         sql> create table table_name (column datatype,column datatype]….)
         sql> tablespace tablespace_name [pctfree integer] [pctused integer]
         sql> [initrans integer] [maxtrans integer]
         sql> storage(initial 200k next 200k pctincrease 0 maxextents 50)
         sql> [logging|nologging] [cache|nocache]
         2.copy an existing table
         sql> create table table_name [logging|nologging] as subquery
         3.create temporary table
         sql> create global temporary table xay_temp as select * from xay;
         on commit preserve rows/on commit delete rows
         4.pctfree = (average row size – initial row size) *100 /average row size
         pctused = 100-pctfree- (average row size*100/available data space)
         5.change storage and block utilization parameter
         sql> alter table table_name pctfree=30 pctused=50 storage(next 500k
         sql> minextents 2 maxextents 100);
         6.manually allocating extents
         sql> alter table table_name allocate extent(size 500k datafile ‘c:/oracle/data.dbf’);
         7.move tablespace
         sql> alter table employee move tablespace users;
         8.deallocate of unused space
         sql> alter table table_name deallocate unused [keep integer]
         9.truncate a table
         sql> truncate table table_name;
         10.drop a table
         sql> drop table table_name [cascade constraints];
         11.drop a column
         sql> alter table table_name drop column comments cascade constraints checkpoint 1000;
         alter table table_name drop columns continue;
         12.mark a column as unused
         sql> alter table table_name set unused column comments cascade constraints;
         alter table table_name drop unused columns checkpoint 1000;
         alter table orders drop columns continue checkpoint 1000
         data_dictionary : dba_unused_col_tabs
    第四章:索引
         1.creating function-based indexes
         sql> create index summit.item_quantity on summit.item(quantity-quantity_shipped);
         2.create a B-tree index
         sql> create [unique] index index_name on table_name(column,.. asc/desc) tablespace
         sql> tablespace_name [pctfree integer] [initrans integer] [maxtrans integer]
         sql> [logging | nologging] [nosort] storage(initial 200k next 200k pctincrease 0
         sql> maxextents 50);
         3.pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows
         4.creating reverse key indexes
         sql> create unique index xay_id on xay(a) reverse pctfree 30 storage(initial 200k
         sql> next 200k pctincrease 0 maxextents 50) tablespace indx;
         5.create bitmap index
         sql> create bitmap index xay_id on xay(a) pctfree 30 storage( initial 200k next 200k
         sql> pctincrease 0 maxextents 50) tablespace indx;
         6.change storage parameter of index
         sql> alter index xay_id storage (next 400k maxextents 100);
         7.allocating index space
         sql> alter index xay_id allocate extent(size 200k datafile ‘c:/oracle/index.dbf’);
         8.alter index xay_id deallocate unused;
    第五章:約束
         1.define constraints as immediate or deferred
         sql> alter session set constraint[s] = immediate/deferred/default;
         set constraint[s] constraint_name/all immediate/deferred;
         2. sql> drop table table_name cascade constraints
         sql> drop tablespace tablespace_name including contents cascade constraints
         3. define constraints while create a table
         sql> create table xay(id number(7) constraint xay_id primary key deferrable
         sql> using index storage(initial 100k next 100k) tablespace indx);
         primary key/unique/references table(column)/check
         4.enable constraints
         sql> alter table xay enable novalidate constraint xay_id;
         5.enable constraints
         sql> alter table xay enable validate constraint xay_id;
    第六章:LOAD數據
         1.loading data using direct_load insert
         sql> insert into emp nologging
         sql> select * from emp_old;
         2.parallel direct-load insert
         sql> alter session enable parallel dml;
         sql> insert into emp nologging
         sql> select * from emp_old;
         3.using sql*loader
         sql> sqlldr scott/tiger
         sql> control = ulcase6.ctl
         sql> log = ulcase6.log direct=true
    第七章:reorganizing data
         1.using expoty
         $exp scott/tiger tables(dept,emp) file=c:emp.dmp log=exp.log compress=n direct=y
         2.using import
         $imp scott/tiger tables(dept,emp) file=emp.dmp log=imp.log ignore=y
         3.transporting a tablespace
         sql>alter tablespace sales_ts read only;
         $exp sys/.. file=xay.dmp transport_tablespace=y tablespace=sales_ts
         triggers=n constraints=n
         $copy datafile
         $imp sys/.. file=xay.dmp transport_tablespace=y datafiles=(/disk1/sles01.dbf,/disk2
         /sles02.dbf)
         sql> alter tablespace sales_ts read write;
         4.checking transport set
         sql> DBMS_tts.transport_set_check(ts_list =>’sales_ts’ ..,incl_constraints=>true);
        在表transport_set_violations中查看
         sql> dbms_tts.isselfcontained為true是,表示自包含
    第八章: managing password security and resources
         1.controlling account lock and password
         sql> alter user juncky identified by oracle account unlock;
         2.user_provided password function
         sql> function_name(userid in varchar2(30),password in varchar2(30),
         old_password in varchar2(30)) return boolean
         3.create a profile : password setting
         sql> create profile grace_5 limit failed_login_attempts 3
         sql> password_lock_time unlimited password_life_time 30
         sql>password_reuse_time 30 password_verify_function verify_function
         sql> password_grace_time 5;
         4.altering a profile
         sql> alter profile default failed_login_attempts 3
         sql> password_life_time 60 password_grace_time 10;
         5.drop a profile
         sql> drop profile grace_5 [cascade];
         6.create a profile : resource limit
         sql> create profile developer_prof limit sessions_per_user 2
         sql> cpu_per_session 10000 idle_time 60 connect_time 480;
         7. view => resource_cost : alter resource cost
         dba_Users,dba_profiles
         8. enable resource limits
         sql> alter system set resource_limit=true;
    第九章:Managing users
         1.create a user: database authentication
         sql> create user juncky identified by oracle default tablespace users
         sql> temporary tablespace temp quota 10m on data password expire
         sql> [account lock|unlock] [profile profilename|default];
         2.change user quota on tablespace
         sql> alter user juncky quota 0 on users;
         3.drop a user
         sql> drop user juncky [cascade];
         4. monitor user
         view: dba_users , dba_ts_quotas
     
    第十章:managing privileges
         1.system privileges: view => system_privilege_map ,dba_sys_privs,session_privs
         2.grant system privilege
         sql> grant create session,create table to managers;
         sql> grant create session to scott with admin option;
         with admin option can grant or revoke privilege from any user or role;
         3.sysdba and sysoper privileges:
         sysoper: startup,shutdown,alter database open|mount,alter database backup controlfile,
         alter tablespace begin/end backup,recover database
         alter database archivelog,restricted session
         sysdba: sysoper privileges with admin option,create database,recover database until
         4.password file members: view:=> v$pwfile_users
         5.O7_dictionary_accessibility =true restriction access to view or tables in other schema
         6.revoke system privilege
         sql> revoke create table from karen;
         sql> revoke create session from scott;
         7.grant object privilege
         sql> grant execute on dbms_pipe to public;
         sql> grant update(first_name,salary) on employee to karen with grant option;
         8.display object privilege : view => dba_tab_privs, dba_col_privs
         9.revoke object privilege
         sql> revoke execute on dbms_pipe from scott [cascade constraints];
         10.audit record view :=> sys.aud$
         11. protecting the audit trail
         sql> audit delete on sys.aud$ by access;
         12.statement auditing
         sql> audit user;
         13.privilege auditing
         sql> audit select any table by summit by access;
         14.schema object auditing
         sql> audit lock on summit.employee by access whenever successful;
         15.view audit option : view=> all_def_audit_opts,dba_stmt_audit_opts,dba_priv_audit_opts,
    dba_obj_audit_opts
         16.view audit result: view=> dba_audit_trail,dba_audit_exists,dba_audit_object,
    dba_audit_session,dba_audit_statement
     
    第十一章: manager role
         1.create roles
         sql> create role sales_clerk;
         sql> create role hr_clerk identified by bonus;
         sql> create role hr_manager identified externally;
         2.modify role
         sql> alter role sales_clerk identified by commission;
         sql> alter role hr_clerk identified externally;
         sql> alter role hr_manager not identified;
         3.assigning roles
         sql> grant sales_clerk to scott;
         sql> grant hr_clerk to hr_manager;
         sql> grant hr_manager to scott with admin option;
         4.establish default role
         sql> alter user scott default role hr_clerk,sales_clerk;
         sql> alter user scott default role all;
         sql> alter user scott default role all except hr_clerk;
         sql> alter user scott default role none;
         5.enable and disable roles
         sql> set role hr_clerk;
         sql> set role sales_clerk identified by commission;
         sql> set role all except sales_clerk;
         sql> set role none;
         6.remove role from user
         sql> revoke sales_clerk from scott;
         sql> revoke hr_manager from public;
         7.remove role
         sql> drop role hr_manager;
         8.display role information
         view: =>dba_roles,dba_role_privs,role_role_privs,dba_sys_privs,
    role_sys_privs,role_tab_privs,session_roles
    第十二章: BACKUP and RECOVERY
         1. v$sga,v$instance,v$process,v$bgprocess,v$database,v$datafile,v$sgastat
         2. Rman need set dbwr_IO_slaves or backup_tape_IO_slaves and large_pool_size
         3. Monitoring Parallel Rollback
         > v$fast_start_servers , v$fast_start_transactions
         4.perform. a closed database backup (noarchivelog)
         > shutdown immediate
         > cp files /backup/
         > startup
         5.restore to a different location
         > connect system/manager as sysdba
         > startup mount
         > alter database rename file ‘/disk1/../user.dbf’to ‘/disk2/../user.dbf’;
         > alter database open;
         6.recover syntax
         –recover a mounted database
         >recover database;
         >recover datafile ‘/disk1/data/df2.dbf’;
         >alter database recover database;
         –recover an opened database
         >recover tablespace user_data;
         >recover datafile 2;
         >alter database recover datafile 2;
         7.how to apply redo log files automatically
         >set autorecovery on
         >recover automatic datafile 4;
         8.complete recovery:
         –method 1(mounted databae)
         >copy c:backupuser.dbf c:oradatauser.dbf
         >startup mount
         >recover datafile ‘c:oradatauser.dbf;
         >alter database open;
         –method 2(opened database,initially opened,not system or rollback datafile)
    >copy c:backupuser.dbf c:oradatauser.dbf (alter tablespace offline)
         >recover datafile ‘c:oradatauser.dbf’ or
         >recover tablespace user_data;
         >alter database datafile ‘c:oradatauser.dbf’ online or
         >alter tablespace user_data online;
         –method 3(opened database,initially closed not system or rollback datafile)
         >startup mount
         >alter database datafile ‘c:oradatauser.dbf’ offline;
         >alter database open
         >copy c:backupuser.dbf d:oradatauser.dbf
         >alter database rename file ‘c:oradatauser.dbf’to ‘d:oradatauser.dbf’
         >recover datafile ‘e:oradatauser.dbf’ or recover tablespace user_data;
         >alter tablespace user_data online;
         –method 4(loss of data file with no backup and have all archive log)
         >alter tablespace user_data offline immediate;
         >alter database create datafile ‘d:oradatauser.dbf’as ‘c:oradatauser.dbf”
         >recover tablespace user_data;
         >alter tablespace user_data online
         5.perform. an open database backup
         > alter tablespace user_data begin backup;
         > copy files /backup/
         > alter database datafile ‘/c:/../data.dbf’ end backup;
         > alter system switch logfile;
         6.backup a control file
         > alter database backup controlfile to ‘control1.bkp’;
         > alter database backup controlfile to trace;
         7.recovery (noarchivelog mode)
         > shutdown abort
         > cp files
         > startup
         8.recovery of file in backup mode
         >alter database datafile 2 end backup;
         9.clearing redo log file
         >alter database clear unarchived logfile group 1;
         >alter database clear unarchived logfile group 1 unrecoverable datafile;
         10.redo log recovery
         >alter database add logfile group 3 ‘c:oradataredo03.log’size 1000k;
         >alter database drop logfile group 1;
         >alter database open;
         or >cp c:oradataredo02.log’ c:oradataredo01.log
         >alter database clear logfile ‘c:oradatalog01.log’;
  • 數據庫初始化參數更改的注意事項

    一般只有在大型應用中或者數據據庫性能明顯下降時才需要修改這個初始化參數。所以從這個角度來講,初始化參數的調整算是Oracle數據庫中的一個高級應用。但是這也是一個Oracle數據庫管理員必須要掌握的內容。為了更高的調整數據庫的初始化參數,筆者認為管理員在了解各個初始化參數的用途以及調整規則之前,需要先了解一些初始化參數調整的一些共性的內容。具體來說,主要有以下幾個方面。
    一、需要了解哪些參數不用重新啟動即可生效。

    在Oracle數據庫中,根據生效的時間不同,可以把參數大致分為兩類。一類是必須重新啟動後才能夠修改或者生效的參數;另外一類就是修改後不用重新啟動即生效的參數。一般來說,數據庫管理員比較喜歡第二類參數,即修改後不需要重新啟動立即生效的參數。為什麼呢?因為數據庫服務器投入生產使用之後,不能夠隨意重新啟動。如果修改後需要重新啟動才能夠生效,或者需要重新啟動後才能夠修改參數,那麼在調整參數的過程中顯然需要中斷用戶的訪問,會增加停機時間。這對於數據庫部署來說,打擊會非常的大。因為從穩定性與可用性出發,數據庫管理員是以最小的停機時間為目標的。而此時人為的增加停機時間,顯然跟這個目標有衝突。所以,數據庫管理員就需要知道哪些參數是不用重新啟動就可以修改與生效的;而哪些參數則必須重新啟動才可以。這是數據庫管理員再調整參數之前首先需要知道的內容。一方面管理員可以根據這個特性,來評估停機的損失與調整參數可能帶來的收益。如果收益大於損失的話,那麼仍然有調整初始化參數的必要。二是來確定參數調整的時間。哪些不需要重新啟動,即調整參數不會導致停機的情況下,則參數的調整時間相對來說靈活一點,限制不多。但是如果需要調整重新啟動才能夠生效或者修改的參數,那麼就需要選擇一個合適的時機了。如需要選擇晚上12點以後的時間,這個時段往往使用數據庫的用戶並不是很多。當然這個時間每個起夜都可能不同。總之就是選擇一個使用數據庫用戶盡量少的時候。如此的話,才能夠在最大程度上降低數據庫停機造成的損失。

    那麼哪些參數不需用重新啟動就可以被修改呢?其實,數據庫管理員只需要查詢動態視圖,即可以知道哪些參數不用關閉或者重新啟動就可以更改。如在動態視同v$parameter中,存儲著初始化參數的值。一般來說,可以在查詢語句中加入條件issys_modifiable<>’FALSE’ or isses_modifiable<>’FALSE'(注意他們之間是or的關係,而不是and關係),最後查詢出來的參數就是不用關閉或者重新啟動數據庫就可以設置的初始化參數。同時這些參數也是可以利用ALTER SYSTEM與ALTER SESSION命令可以更改的部分初始化參數。也就是說,不用關閉或者重新啟動數據庫就可以修改的參數都可以使用上面兩個命令來進行重新設置。但是並不是說,利用這兩個命令都可以在不用重新啟動或者關閉數據庫的情況更改初始化參數。簡單的說,就是可以利用這兩個命令來更改的參數,有些需要重新啟動或者關閉數據庫,而有些則不用。

    二、根據20/80原則來確定需要更改的參數。

    Oracle數據庫中的初始化參數有上百個。無論出於什麼目的,去一一調整這些參數往往是不現實的。一個優秀的數據庫管理員,只需要掌握其中少數幾個參數的修改即可。往往掌握這幾個參數的修改方法、原則以注意事項,就可以完成大部分的數據庫維護任務。這就是20/80的規律在其作用。也就是說,只需要掌握20%的參數(其實還遠遠不到這個比例),就可以完成80%的任務(其實遠遠高於這個比例)。也就是說,10/90規則對這個Oracle初始化參數來說,可能更加的適用。總之筆者要說的就是,只需要掌握眾多初始化參數中的少數幾個即可。即使需要通過調整初始化參數來提高數據庫性能或者其他目的的,也就是在這幾個少數的初始化參數中。對於其他的參數,數據庫管理員只需要了解其用途,而不需要了解該如何調整這些參數。因為遇到的機率可以說基本沒有。

    那麼這些重要的參數到底有哪些呢?主要有以下幾個參數。最重要的一個參數就是DB_CACHE_SIZE。這是一個用來調整數據庫緩存大小的參數。在必要的時候,調整這個參數的大小,可以提高數據緩存的命中率,從而大幅度的提高數據庫的性能。第二個參數是DB_BLOCK_SIZE。這個參數主要是用來指定數據庫在建立時所默認的塊大小。如果塊設置的比較小,則有可能會發生行鏈化現象,從而降低數據庫的性能;也有可能增加數據庫的碎片,浪費表空間的存儲空間以及降低數據庫的查詢性能等等。所以根據需要有時候也要調整這個塊大小來改善數據庫的性能。第三個參數是SHARED_POOL_SIZE參數。這個參數主要是為那些數據字典緩存和共享SQL語句指定了在SGA裡所分配的內存。簡單的來說,合理配置這個參數,能夠同等的共享SQL語句。調整這個參數,也是一種優化數據庫性能的常用手段。第四個參數為SGA_MAX_SIZE參數,這個參數指定了SGA可以動態增長的最大內存。在SQLServer數據庫中也有類似的參數。一般來說,在同台數據庫服務器中若部署有多個應用服務的話,則往往需要合理配置這個參數來避免多個應用服務之間爭用內存。如果這個參數設置的不合適的話,則有時候會導致另外一種應用服務由於沒有足夠的內存而停止服務。第五個參數為LOG_CHECKPOINT_INTERVAL。這個參數主要用來設置檢查點的頻率。在每個檢查點中,數據庫系統執行數據寫出,將所有臟塊(已經修改還沒有保存到硬盤中的數據)寫入到數據庫中對應的數據文件中。默認情況下,如果在數據庫緩存中有1/4的數據緩衝區是臟緩衝區,則數據庫系統會自動執行檢查點。另外一個強制的原則就是在進行日誌切換時,也會執行檢查點。在一些特定的情況下,如建立數據倉庫,需要調整這個參數以滿足特定場合的需要。

    這五個參數是筆者這幾年工作以上遇到的最頻繁的初始化參數。基本上數據庫維護與性能調優就是圍繞著這幾個參數來的。為此筆者建議,各位數據庫管理員在學習數據庫初始化參數的調整技巧時,可以從這幾個參數出發。或者說,這幾個參數是數據庫管理員必須要掌握的。不只是簡單的了解,而是需要吃透它。只有如此,在遇到情況時,才可以判斷是否需要進行更改,以及應對在更改過程中可能出現的問題。對於其他的一些參數,筆者認為數據庫管理員只需要了解其基本用途即可。或許筆者在總結這些參數的時候,有漏掉的地方,歡迎大家來補充。以後若有機會,筆者也會像大家詳細介紹在什麼情況下該調整什麼參數;以及在調整過程中可能會遇到的麻煩。大家若對這方面的話題感興趣,可以關注筆者後面的文章。

    三、使用SPFILE來動態修改參數。

    在Oracle10G以後的版本中,還允許數據庫管理員使用一個SPFILE來存儲實例參數的動態修改。在10G以前的版本中,除非將參數手動的添加到初始參數文件中,否則動態的修改參數在數據庫重新啟動後都會丟失。這跟環境變量的設置有些類似。但是在10G以後的版本中,在這方面有了很大的改善。如開啟SPFILE機制的話,則係統就會啟用一個服務器參數文件,在內存中動態改變某些參數的時候,同時將這些改變記錄到這個服務器參數文件中。等到下次重新啟動時,服務器會讀取喜歡個服務器參數文件中的值,用來初始化數據庫系統。也就是說,從現在開始一些動態修改的參數也可以永久生效了。這對於數據庫管理員來說,無疑是一個福音。

    從以上的分析中可以看出,這個數據庫參數的調整還是一個比較複雜的工作。筆者認為,管理員在學習如何調整這個參數之前,需要先了解上面這些共性的內容。即參數修改的時間限制、最可能需要調整的參數以及如何讓動態參數永遠生效等等。這些是做好參數優化工作的基礎。

  • Oracle OCM認證資深專家考試方法和要求

    對參加OCM考試的人員的要求:

     
    主要有兩個要求。一、首先必須是OCP;二、參考人員應參加過Oracle原廠的至少兩門的OCM相關課程的培訓。
     
    OCM-參加OCM認證考試需要必備的知識:
     
    1、精通Oracle9i的SQL
     
    2、RedHat Advanced Server
     
    LINUX的一些操作知識,如格式並執行基本的操作系統的命令;創建並遍歷目錄;使用cp,mv及rm來拷貝、移動及刪除文件;linux環境下的文本編輯器的使用;設置環境變量。
     
    3、定位和執行Oracle一些應用程序的能力,
     
    它包括:RMAN應用程序;Oracle Net Manager;Oracle Net Configuration Assistant;OEM;Listener Utility;OMS;Oracle Password Utility;Database Creation Assistant(DBCA)。
     
    4、要熟練使用Oracle Enterprise Manager(OEM)
     
    5、熟練使用Oracle Net Manager和Oracle NetConfiguration Assistant來進行網絡配置。
     
    6、熟悉Oracle9i(v9.0.1.3)的高級知識
     
    7、熟悉使用瀏覽器(netscape)來查閱oracle的幫助文檔。
     
    8、熟練使用Konqueror 2.2 browser軟件
     
    實踐課考試環境:
     
    實踐課的考試在oracle統一專用的教室內進行。由一個oracle的教授來負責監考、佈置場景、收集考試的結果。考生將被隨意指定一個坐位來完成當天的實踐考試。考生不允許使用自帶私人的文檔和筆記,不許與其它的考生商量。移動電話,自帶紙張和PDA都不允許在考試教室內使用。每個考生都將提供一個安裝在redhat Advanced Server 2.1 LINUX環境上的Oracle的server軟件,一個完備的Oracle聯機文檔。

  • Oracle數據庫Decode函數的使用方法

    DECODE函數的作用:它可以將輸入數值與函數中的參數列表相比較,根據輸入值返回一個對應值。函數的參數列表是由若干數值及其對應結果值組成的若干序偶形式。當然,如果未能與任何一個實參序偶匹配成功,則函數也有默認的返回值。

    區別於SQL的其它函數,DECODE函數還能識別和操作空值。

    語法如下:

    DECODE(control_value,value1,result1[,value2,result2…][,default_result]);

    control _value

    試圖處理的數值。 DECODE函數將該數值與後面的一系列的偶序相比較,以決定返回值。

    value1

    是一組成序偶的數值。如果輸入數值與之匹配成功,則相應的結果將被返回。對應一個空的返回值,可以使用關鍵字NULL於之對應

    result1

    是一組成序偶的結果值。

    default_result未能與任何一個值匹配時,函數返回的默認值。

    示例如下:

    select decode( x , 1 , ‘x is 1 ‘, 2 , ‘x is 2 ‘, ‘others’) from dual

    當x等於1時,則返回‘x is 1’。

    當x等於2時,則返回‘x is 2’。

    否則,返回others’。

    在需要比較2個值的時候,我們可以配合SIGN()函數一起使用。

    SELECT DECODE( SIGN(5 -6), 1 ‘Is Positive’, -1, ‘Is Nagative’, ‘Is Zero’)

    同樣,也可以用CASE實現:

    SELECT CASE SIGN(5 – 6)

    WHEN 1 THEN ‘Is Positive’

    WHEN-1 THEN ‘Is Nagative’

    ELSE’Is Zero’ END

    FROM DUAL

    另外,大家還可以在Order by中使用Decode。

    例:表table_subject,有subject_name列。要求按照:語、數、外的順序進行排序。這時,就可以非常輕鬆的使用Decode完成要求了。

    select * from table_subject order by decode(subject_name, ‘語文’, 1, ‘數學’, 2, , ‘外語’,3)

  • Oracle官方教材下載

    Oracle 9i教材:
    20000GC10:Data Modeling and Relational Database Design
    40054GC10 – Introduction to Oracle9i:PL/SQL
    40054GC11 – Oracle9i:Program with PL/SQL
    40055GC11 – Oracle9i:PL/SQL Fundamentals
    40056GC11 – Oracle9i:Develop PL/SQL Program Units
    40058GC11 – Oracle 9i :Advanced SQL
    40060GC10 – Oracle9i:SQL for End Users
    40061GC10 – Oracle9i:Advanced PL/SQL [PPT]
    D11299GC21 – Oracle9i Performance Tuning Version 2.1(1Z0-033)
    D11318GC20 – Oracle9i:New Features for Administrators第二版(1Z0-030)
    Introduction to Oracle9i:SQL Version 2.0(1Z0-007)
    Oracle9i Database Administration Fundamentals II Version 2.0[含中文版1.1](1Z0-032)
    Oracle9i Database Administration Fundamentals I Version 2.0[含中文版1.1](1Z0-031)

    Oracle 9i高級培訓:
    D16001GC10 – Oracle9i Database:Using OLAP
    D13289GC10 – Oracle9i:Data Warehouse Administration
    D12204CN10 – Oracle9iAS:基本管理[中文版](1Z0-301)
    D12210GC10 – Oracle9iAS:Wireless Enable Portals and Applications
    D11803GC10 – Data Warehouse Database Design
    12837GC10 – Oracle9i:Real Application Clusters
    D12215GC20 – Oracle Enterprise Manager 9i
    D12619GC10 – Oracle9i Database:Data Guard Administration
    D12611GC10 – Oracle 9i:Implement Advanced Queuing
    D12848GC10 – Oracle9i: Spatial
    D13287GC10 – Oracle9i Database:Implement Partitioning
    D16442GC10 – Oracle9i Database:Advanced Instance Tuning
    D16335GC10 – Oracle9i Database:Real Application Clusters on Linux

    Oracle 10g教材:
    D17079GC20 – Oracle Database 10g:New Features for Administrators Version 2(1Z0-040)
    D17389GC10 – Oracle Database 10g:New Features for Oracle8i DBAs(1Z0-045)
    Oracle Database 10g:Administration Workshop I(1Z0-042)
    Oracle Database 10g:Administration Workshop II(1Z0-043)(PDF格式)

    Oracle 10G高級培訓:
    D17276GC10 – Oracle Database 10g:Real Application Clusters
    D17244GC11 – Oracle Enterprise Manager 10g Grid Control

    Java相關教材:
    40003GC50 – Java Programming
    D11678GC31 – Oracle9i:Access the Database with Java and JDBC
    D12867GC10 – Oracle9i JDeveloper:Develop Applications with BC4J
    D12871GC10 – Oracle9i:Create Servlets and JavaServer Pages

    其它
    其它一些文檔,無法歸類
    EClass

    APP 11i系列:
    14217GC10 – Installing Oracle Applications,Release 11i
    14226GC10 – 11i Extend:Customization Standards
    14431GC20 – R11i Oracle Applications AD Utilities
    14433GC10 – Oracle Applications Architecture,Release 11i & 14433GC21 – R11i Oracle Applications Architecture
    14437GC20 – R11i Patching and Maintaining Oracle Applications
    14464GC11 – R11i Extend Oracle Applications:Forms
    14465GC11 – R11i System Administration
    14466GC11 – R11i Defining Flexfields
    14468GC11 – R11i Navigating Oracle Applications
    14889GC30 – 11i Implement and Administer Marketing Online
    14491GC10 – R11i Oracle Account Generator
    14492GC11 – R11i Oracle Alert
    15001GC10 – 11i e-Commerce Gateway
    D11101GC10 – 11i 2.6 Workflow Business Event System
    D11102GC10 – 11i Extend:CUSTOM Library
    14263GC20(PPT)
    14433GC30 – 11i Oracle Applications Architecture(PPT)
    14440GC30及14440GC40 – 11i Upgrade Oracle Applications(PPT)
    14452GC21 – E-BI(PPT)
    14468CN20 -使用Oracle Applications 11i(PPT)
    14468GC11及14468GC20 – 11i Navigating Oracle Applications(PPT)
    14566GC10(PPT)
    14590GC31 – 11i HRMS System Administration(PPT)
    14591GC10(PPT)
    14676GC40 – Implement Oracle Configurator(PPT)
    14677GC40 – Oracle iStore(PPT)
    14801GC40 – 11i Implement and Administer CRM Application Foundation(PPT)
    14805GC20 – Work Structures HRMS Release 11i(PPT)
    14815GC30(PPT)
    14828GC30 – 11i Implement and Administer iSupport(PPT)
    14834GC10 – Oracle Project:Project Billing(含中文版)(PPT)
    14846GC20 – 11i Oracle Receivables(PPT)
    14848GC10 – Oracle Cash Management R11i(PPT)
    14854GC40 – 11i Implement Scripting(PPT)
    14858CN10 – R11i實施和使用Oracle Engineering和Bills of Material(含英文版)(PPT)
    14859GC10 – Work In Process(PPT)

    點擊下載