标签: Oracle

  • Oracle 10G 臨時表空間組

    Oracle 10g 引進了臨時表空間組(temporary tablespace group)的概念,它允許用戶
    在不同的會話中同時利用多個臨時表空間。

     1. 臨時表空間組的主要特徵


    一個臨時表空間組必須由至少一個臨時表空間組成,並且無明確的最大數量限制。
    如果刪除了一個臨時表空間組的所有成員,該組也自動被刪除。
    臨時表空間的名字不能與臨時表空間組的名字相同。
    在給用戶分配一個臨時表空間時,可以使用臨時表空間組的名字代替實際的臨時表空間
    名;在給數據庫分配默認臨時表空間時也可以使用臨時表空間組的名字。


    2. 臨時表空間組的優點


    使用臨時表空間組而非普通的臨時表空間,有如下好處:
    由於SQL 查詢可以並發使用幾個臨時表空間進行排序操作,因此SQL 查詢很少會出現
    排序空間超出,避免當臨時表空間不足時所引起的磁盤排序問題。
    可以在數據庫級指定多個默認臨時表空間。
    一個並行操作的並行服務器將有效地利用多個臨時表空間。
    一個用戶在不同會話中可以同時使用多個臨時表空間。

     3. 管理臨時表空間組

     

      (更多…)

  • Oracle 10G:透明數據加密技術(TDE)

    Oracle 透明數據加密提供了實施加密所必需的關鍵管理基礎架構。加密的工作原理是將明文數據以及秘密(稱作密鑰)傳遞到加密程序中。加密程序使用提供的密鑰對明文數據進行加密,然後返回加密數據。以往,創建和維護密鑰的任務由應用程序完成。 Oracle透明數據加密通過為整個數據庫自動生成一個萬能密鑰解決了此問題。在啟動 Oracle 數據庫時,管理員必須使用不同於系統口令或DBA 口令的口令打開一個Oracle Wallet 對象。然後,管理員對數據庫萬能密鑰進行初始化。萬能密鑰是自動生成的。

     
    性能:


    由於索引數據未被加密,因此加密通常會影響現有的應用程序索引。 Oracle 透明數據加密對與給定應用程序表關聯的索引值進行加密。這意味著應用程序中的相等搜索對性能的影響很小,甚至沒有任何影響。例如,假設應用程序card_id 存在一個索引,並且此應用程序執行以下語句:
    SQL> Select cash from credit_card where card_id = ‘1025023590’;
    Oracle 數據庫將使用現有的應用程序索引,儘管card_id 信息已經在數據庫中加密。
     
    準備用於加密的數據庫:

     
    在本部分內容中,您將更新sqlnet.ora、創建一個加密錢夾(ewallet.p12)、打開此錢夾並為 TDE 創建萬能密鑰。執行以下操作:
    1. 您需要更新sqlnet.ora 文件以包含一個ENCRYPTED_WALLET_LOCATION 條目。打開一個終端窗口,然後輸入以下命令:
    cd $ORACLE_HOME/network/admin
    gedit sqlnet.ora

    connect / as sysdbaalter system set key identified by “welcome1”;
    此命令的作用為:
    l 如果指定的目錄中不存在加密錢夾,則將創建加密錢夾(ewallet.p12)、打開此錢夾並創建/重新創建 TDE 的萬能密鑰。
    l 如果指定目錄中存在加密錢夾,則將打開此錢夾並創建/重新創建TDE 的萬能密鑰。
    之後,就可以測試數據了。


    下面是實驗記錄:
    alter system set key identified by “welcome1”;
    SQL> conn dodd/dodd123
    create table test (id number,credit_card_number varchar2(16) ENCRYPT NO SALT);
    SQL> insert into test values(1,’1231243242′);
    1 row created.
    SQL> insert into test values(2,’33245235′);
    SQL> commit;
    Commit complete.
    SQL> select * from test;
    ID CREDIT_CARD_NUMB
    ———- —————-
    1 1231243242
    2 33245235
    可見,數據查看是明文,因為這個時候,加密錢夾已經打開,數據可以解密。
    2. 接下來,您需要打開錢夾並創建萬能加密密鑰。從終端窗口中,輸入以下命令:
    將以下條目添加到文件末尾:
    ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DAT
    A=(DIRECTORY=/opt/oracle/admin/test97/wallet/)))
    如果不加這一項的話,則會提示下面錯誤:
    SQL>altersystemsetkeyidentifiedby”hurray”
    2;
    altersystemsetkeyidentifiedby”hurray”
    *
    ERRORatline1:
    ORA-28368:cannotauto-createwallet
    /opt/oracle/admin/test97/wallet/ 目錄是用來存放生成的錢夾的。可以為加密錢夾選擇任何目錄,但路徑不應指向在數據庫安裝過程中創建的標準模糊錢夾 (cwallet.sso)。

     

     

     
    這時,停止數據庫,再打開:
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> SQL> startup
    ORACLE instance started.
    Total System Global Area 524288000 bytes
    Fixed Size 1979968 bytes
    Variable Size 138414528 bytes
    Database Buffers 377487360 bytes
    Redo Buffers 6406144 bytes
    Database mounted.
    Database opened.
    SQL> select * from dodd.test;
    select * from dodd.test
    *
    ERROR at line 1:
    ORA-28365: wallet is not open
    SQL> select id from dodd.test;
    ID
    ———-
    1
    2
    可以看到,因為數據庫重啟後,加密錢夾處於關閉狀態,這時只要查詢到加密的列,會提示加密錢夾沒有打開。
    如果用戶想打開錢夾,必須具有alter system 權限。下面打開wallet:
    SQL> conn / as sysdba
    Connected.
    SQL> alter system set wallet open identified by “welcome1”;
    System altered.
    SQL> conn dodd/dodd123
    Connected.
    SQL> select * from test;
    ID CREDIT_CARD_NUMB
    ———- —————-
    1 1231243242
    2 33245235
    可以看到,加密錢夾打開後,數據可以被解密。
    還有一條:sys 用戶的表不能被加密。
    可見:Oracle TDE 是在數據層面上對錶裡的數據加密,而且不會影響數據庫現有的權限控制策略。

    salt 實際上就是在加密過程中引入一個隨機性。簡單的說,就是一般來說,同樣的明文產生同樣的密文,這樣就導致容易被解密者通過分析詞頻之類的方式(加解密我不太懂)來通過密文破解明文,如果指定salt,那麼即使同樣的明文加密後的密文也是不一樣的。no salt 的話,自然就是相同的明文會產生相同的密文了。對於索引來說,要求no salt 也就可以理解了
    丟失ewallet 加密錢夾的話,是不能再解密數據的。
    Oracle 10gR2 的TDE 特性,對於防止機密信息的洩漏能起到事半功倍的作用!
    –The End–

  • 如何保持Oracle數據庫的優良性能

    Oracle數據庫以其高可靠性、安全性、可兼容性,得到越來越多的企業的青睞。如何使Oracle數據庫保持優良性能,這是許多數據庫管理員關心的問題,根據筆者經驗建議不妨針對以下幾個方面加以考慮。

    一、分區
    根據實際經驗,在一個大數據庫中,數據空間的絕大多數是被少量的表所佔有。為了簡化大型數據庫的管理,改善應用的查詢性能,一般可以使用分區這種手段。所謂分區就是動態表中的記錄分離到若干不同的表空間上,使數據在物理上被分割開來,便於維護、備份、恢復、事務及查詢性能。當使用的時候可建立一個連接所有分區的視圖,使其在邏輯上仍以一個整體出現。

    1.建立分區表

    Create table Employee(
    EmpNo varchar2(10) primary key,
    Name varchar2(30),
    DeptNo Number(2)

    Partition by range(DeptNo)
    (partition PART1 values less than (11)
    tablespace PART1_TS,
    partition PART2 values less than(21)
    tablespace PART2_TS,
    partition PART3 valuse less than(31)
    tablespace PART3_TS
    partition PART4 values less than(MAXVALUE)
    tablespace PART4_TS
    );
    表Employee依據DeptNo列進行分區。

    2.分區索引

    Create index Employee_DeptNo on Employee (DeptNo)local(
    partition PART1 tablespace PART1_NDX_TS,
    partition PART2 tablespace PART2_NDX_TS,
    partition PART3 tablespace PART3_NDX_TS,
    partition PART4 tablespace PART4_NDX_TS,
    );
    當分區中出現許多事務並且要保證所有分區中的數據記錄的惟一性時採用全局索引,在建立全局索引時,Global子句允許指定索引的範圍值,這個範圍值可以不同於表分區的範圍值。只有建立局部索引才會使索引分區與表分區間建立起一一對應關係。因此,在大多數情況下,應該使用局部索引分區。若使用了此索引,分區就能夠很容易地將索引分區與表分區建立關聯,局部索引比全局索引更易於管理。

    3.分區管理

    根據實際需要,還可以使用Alter table命令來增加、刪除、交換、移動、修改、重命名、劃分、截短一個已存在分區的結構。

    二、重建索引
    如果表中記錄頻繁地被刪除或插入,儘管表中的記錄總量保持不變,索引空間的使用量會不斷增加。雖然記錄從索引中被刪除,但是該記錄索引項的使用空間不能被重新使用。因此,如果表變化不定,索引空間量會不斷增加,不論表中記錄數量是否增加,只是因為索引中無效空間會增加。
    要回收那些曾被刪除記錄使用的空間,需要使用Alter index rebuild命令。可以做一個定期運行的批處理程序,來重建最活動表的索引。這個批處理程序可以在空閒時運行,以避免該程序與其他應用程序衝突。若能堅持索引的這一程序規劃,便可以及時回收那些未使用空間,提高空間利用率。

    三、段的碎片整理
    當生成一個數據庫對象時(一個表或一個索引),通過用戶缺省值或指定值來為它指定表空間。一個在表空間中生成的段,用於存儲對象的相關數據。在段被關閉、收縮、截斷之前,段所分配的空間將不被釋放。

    一個段是由范圍組成,而范圍是由相鄰的Oracle塊組成。一旦存在的範圍不能再存儲新的數據,這個段就會去獲得新的範圍,但並不要求這些範圍是彼此相鄰的。這樣的擴展會一直繼續下去,直到表空間中的數據文件不能提供更多的自由空間,或者範圍數量已達到極限。
     
    因此,一個碎片太多的數據段,不僅會影響運行,也會引發表空間中的空間管理問題。所以,每個數據段只含有一個範圍是十分有益的。借助監控系統,可以通過檢查DBA_SEGMENTS數據字典視圖來了解哪些數據庫對象含有10個或更多範圍的段,確定其數據段碎片。

    若一個段的碎片過多,可用兩種方法解決:
    1.用正確的存儲參數建立一個新表,將舊表中的數據插入到新表中,再刪除舊表;
    2.利用Export/Import工具。

    如:exp system/manager file=exp.dmpcompress=Y grants=Y indexes=Y
    tables=(T1,T2)
    若輸出成功,進入Oracle,刪除上述表。
    注:compress=Y表示將在輸出過程中修改它們的存儲參數。
    imp system/manager file=exp.dmp commit=Y buffer=64000 full=Y

    四、自由范圍的碎片整理
    表空間中的一個自由范圍是表空間中相連的自由(空間)塊的集合。當一個段關閉時,它的範圍將被釋放,並被標記為自由范圍。然而,這些自由范圍再也不能與相鄰的自由范圍合併,它們之間的界線始終存在。但是當表空間的缺省值pctincrease設置不是0時,SMON後台進程會定期將這些相鄰的自由范圍合作。若pctincrease設置為0,那麼相鄰自由范圍不會被數據庫自動合併。但可以使用Alter table命令”coalesce”選項,來強迫進行相鄰自由范圍的合併。

    不進行自由范圍合併,在日後的空間請求中,會影響到表空間中的空間分配。當需要一個足夠大的範圍時,數據庫並不會合併相鄰的自由范圍,除非沒有其他選擇。這樣,當表空間中前面較小的自由范圍已被使用時,將使用表空間中後面部分最大的一個自由范圍。結果,會因為沒有足夠多的使用空間,從而導致表空間需求的矛盾。由於這樣的情況出現,使數據庫的空間分配距理想越來越遠。自由空間碎片常會出現在那些經常關閉又重新生成的數據庫表和索引中。

    在理想的Oracle表空間中,每一個數據庫對象存儲在一個單獨的範圍中,並且所有有效自由空間集中在一個巨大而連續的範圍中。這樣,在一個對象需要附加存儲空間時,可以在增加獲取足夠大自由空間的可能性的同時,最小化空間中的循環調用,提高自由空間使用率。

  • 怎樣選擇MCITP與Oracle的數據庫認證?

    有很多學員都來信詢問是考MCITP:數據庫認證還是Oracle認證?如今哪個數據庫系統應用的更廣泛?哪種認證更有價值? 這樣的諮詢脫離了具體的個例環境,從某種程度上講,就像是您在問別人哪種口味的口香糖更好,薄荷味還是檸檬味? 下面我們就從Oracle和SQL Server的一些應用說起。
    就操作方式看:

    Oracle操作複雜,但同時提供圖形界面和命令行2種方式,在WindowsNT和Unix下操作相同; 微軟數據庫SQL Server操作簡單,但只有圖形界面; 即使是Oracle更能適應企業級的應用,但微軟仍然在該級別所佔據的市場份額超出了人們的想像。同時看來由於微軟數據庫的工作數量與Oracle相比至少為20:1,所以SQL Server的就業機會可能更多,這對於才參加工作或轉行的新人來講工作機會相當重要,但沒有Oracle相關工作的薪水高。

    就市場份額看:

    Oracle適合企業級別,對跨平台、多用戶、多層結構有需求; 微軟數據庫SQL Server適合中小規模公司,限於Windows平台,但憑藉著操作簡單實用、費用低廉(相對而言)吸引了更多的用戶;

    MCITP:數據庫與Oracle的比較

     從職業方向分析:

    而MCITP:數據庫主要涉及Microsoft SQL Server 2005的管理和開發。

     OCP則是Oracle數據庫管理設計。

     從學習成本分析

    MCITP:數據庫認證管理和開發兩個只需要5門課程,每門考試費用450元,不強制要求參加培訓。9iOCP需要參加4門考試(007或者001、031、032、033),Oracle在全球都只要求報考9i OCP認證在其他國家只需要參加一門原廠培訓,可是惟獨在中國採取必須要求參加全部4門的原廠培訓的規定,而且每門價格高達近十几萬元(培訓僅為5天),四門考試(4×125美元)加上四門原廠培訓,所有費用總計在二十萬到三十万萬人之間,即使有半價優惠,其一門培訓的費用就已經遠遠超過了MCITP:數據庫認證所需花費的全部費用。

     從學習難度分析

    MCITP:數據庫認證的難度略低,單機實驗環境實現起來比較方便,建議學習週期一般為3-5個月;

    OCP學習難度大,一般至少為6-12個月;

     從就業環境分析

    在目前中國IT行業的大背景下,很少國內企業會僱傭專門的數據庫管理員來管理數據庫,往往需要數據庫設計、數據庫管理和數據庫開發同時兼作,所以單單把數據庫證書作為自己職業規劃的跳板是不太合適的。更明智的做法是選擇一個方向,學習它獲得相應的證書,再謀求實踐的機會,最後從實踐中找到自己真正需要的知識和能力。

    所以我們建議MCITP:數據庫認證對於才參加工作或轉行的新人來講是一個比較實際和權宜的選擇。

  • Oracle認證所有考試科目

    Oracle認證所有考試科目

    1Z0-001 9i Internet Application Developer Introduction to Oracle: SQL and PL/SQL
    1Z0-007 Introduction to Oracle9i: SQL
    1Z0-020 Oracle8l:new features for administrators
    1Z0-030 orcacle9i database:new features for administrators
    1Z0-031 orcacle9i database:fundamentals i
    1Z0-032 orcacle9l database:fundamentals ii
    1Z0-033 Oracle9i Database:Performance Tuning
    1Z0-035 orcacle9i dba new features for Oracle7.3 and Oracle9 ocps
    1Z0-036 Managing Oracle9i on linux
    1Z0-040 Oracle database 10g:new features for adminsitrators
    1Z0-042 Oracle database 10g:Administration I
    1Z0-043 Oracle database 10g:Administration ii
    1Z0-045 Oracle database 10g:new features for Oracle8i ocps
    1Z0-046 Oracle Database 10g: Managing Oracle on Linux for DBAs
    1Z0-047 Oracle Database SQL Expert
    1Z0-048 Oracle Database 10g R2: Administering RAC
    1Z0-050 Oracle Database 11g: New Features for Administrators
    1Z0-051 Oracle Database: SQL Fundamentals I
    1Z0-052 Oracle Database 11g: Administrator I : 1z1-052 Exam
    1Z0-055 Oracle Database 11g: New Features for 9i OCPs
    1Z0-101 Develop pl/sql program units
    1Z0-108 Oracle WebLogic System Administration
    1Z0-131 9i Internet Application Developer Oracle9i, Build Internet Applications I
    1Z0-132 9i Internet Application Developer Oracle9i, Build Internet Applications II
    1Z0-140 Oracle9i forms Developer:new features
    1Z0-141 Oracle9i forma Developer:build internet applications
    1Z0-147 Oracle9i program with pl/sql
    1Z0-200 Oracle 11i.E-Business Essentials
    1Z0-202 Siebel 8 Consultant Exam
    1Z0-204 Oracle EBS R12: E-Business Essentials
    1Z0-207 Oracle comm.billing & revenue mgmt:pricing
    1Z0-208 Oracle comm.billing & revenue mgmt:server Developer
    1Z0-209 Oracle comm.billing & revenue mgmt:System Administrator
    1Z0-211 Oracle 11i general ledgerfundamentals
    1Z0-212 Oracle payables 11i funfamentats
    1Z0-213 Oracle receivables 11i fundamentals
    1Z0-221 Oracle 11i inventory management fundamentals
    1Z0-222 Oracle Purchasing 11i Fundamentals
    1Z0-223 Oracle order management 11i fundamentals
    1Z0-226 Oracle EBS R12: Inventory and Order Management Fundamentals
    1Z0-231 Oracle implement workflow 11i/2.6
    1Z0-232 Oracle 11i system Administration fundamentals
    1Z0-233 Oracle 11i install. patch and maintain applications
    1Z0-235 Oracle 11i applications DBA:Fundamentals I
    1Z0-236 11i Applications DBA Fundamentals II
    1Z0-241 PeopleSoft Application Develper I: PeopleTools & PeopleCode
    1Z0-242 PeopleSoft Application Developer II: App Engine & Integration
    1Z0-255 Hyperion Essbase 7.1.2 Cnsultant
    1Z0-257 Hyperion Financial Management 4.1 Consultant
    1Z0-259 Hyperion Planning 4.1 Consultant
    1Z0-262 Hyperion Planning 4.1 Administrator
    1Z0-264 Hyperion Essbase Analytics 9.3 Developer
    1Z0-301 Oracle9ias:basic Administration
    1Z0-311 Oracle application server 10g:Administration
    1Z0-312 Oracle Application Server 10g: Administrator II
    1Z0-402 Oracle Enterprise Linux: Fundamentals
    1Z0-615 Siebel 7.7 Consultant Core Exam
    1Z0-620 Siebel7.7 Analytics App.Developer Professional Core Exam
    1Z0-630 Siebel7.7 Analytics Server Architect Professional Core Exam
    1Z0-640 Siebel7.7 Analytics DataWarehouse Dev.Prof.Core Exam
    1Z1-225 Oracle EBS R12: Inventory and Purchasing Fundamentals
    1Z1-226 Oracle EBS R12: Inventory and Order Management Fundamentals
    1Z1-238 R12 Oracle: install,Patch and Maintain Oracle Applications
    1Z0-273 Hyperion Financial Management 4.1 Administrator I&II
    1Z0-225 Oracle EBS R12: Inventory and Purchasing Fundamentals
    1Z0-238 R12 Oracle: install,Patch and Maintain Oracle Applications
    1Z0-054 Oracle Database 11g: Performance Tuning
    1Z1-054 Oracle Database 11g: Performance Tuning
    1Z1-051 Oracle Database: SQL Fundamentals I
    1Z1-051 Oracle Database: SQL Fundamentals I

    如需購買Oracle考古題請到TestPassPort官方網站購買(www.testpassport.net),TestPassPort優惠活動購買上述考題可以享受特殊優惠,購買時輸入”testpassport”即可享受九五折優惠,購買壹科優惠5% 兩科優惠10% 三科優惠15% 四科優惠20% 五科優惠… 可以累積計算,無時間限制.免費提供Demo下載,可以預覽使用考題!

  • 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

    請保存好.以備後用