關於我

我的相片
用心思考、保持熱情,把工作上的經驗作分享與紀錄。希望能夠跟大家一起不斷的成長~
顯示具有 oracle 標籤的文章。 顯示所有文章
顯示具有 oracle 標籤的文章。 顯示所有文章

[Oracle][Tuning]Oracle10g效能調校參考手冊#1

    今天看到一篇相當不錯的Oracle效能調教手冊,轉帖至此收藏~

    本文轉貼自 <http://www.dotblogs.com.tw/ricochen/archive/2010/01/07/12884.aspx>

    感謝Oracle大師William的指導,如果沒有你的校正也就不會有整份手冊。

    一、文件說明

    本文件說明如何監控診斷Oracle 10g DB效能。閱讀本文件前,必須先對Oracle DB架構有所瞭解(如Memory結構、Oracle背景程序等)。而本文範圍主要在單一instance Oracle DB運作上,不包含DB備份、RAC架構以及OS層面的監控和調整。

    監控調整DB可以使用SQL指令或Enterprise Manager(簡稱EM)圖形介面來完成,由於EM圖形介面的方便性和一致性,在此將以EM進行說明。

    二、監控DB And SQL

    2.1統計資料

    DB運作和監控、效能調整都仰賴DB統計資訊,需確定統計資訊有更新。DB統計資料由GATHER_STATS_JOB這個系統的排程進行收集,其工作窗口屬於MAINTENANCE_WINDOW_GROUP,在週一~週五PM10:00開始啟動收集DB統計,有8小時工作窗口,週末工作窗口整天都可執行,請確定統計收集排程在目標DB中正常運作:

    clip_image001

    clip_image002

    統計資訊不正確, DB將無法有良好效能。

    另外,為確保DB監控程序能收集到足夠資訊,檢查初始參數與設定值符合:

    STATISTICS_LEVEL=TYPICAL or ALL(預設為TYPICAL)

    TIMED_STATISTICS=TRUE(預設為TRUE)

    設定不正確,統計資訊會收集不完全,無法進行問題診斷和調整。

    2.2 DB Time

    Oracle DB使用DB time來記錄執行所花的時間,並提供一個一致性的比較單位。DB time是由執行的CPU時間+等待時間組成:DB time = DB CPU time + DB wait time。

    當DB time中的CPU time比重太高,代表可能需要進行SQL tuning,如wait time過高,則是可能有資源爭用需進行instance/RAC tuning:

    clip_image003

    下圖顯示一個session送出request並且取得DB回應的時間。整個時間可以包含兩個部分:網路傳送/接收資料的時間,DB處理花費的時間。

    clip_image004

    因DB會同時服務許多使用者,所以DB全部的DB Time是由所有User花費的DB Time所累加。由於User可能連上DB卻沒有做任何事情(處於Idle狀態),計算DB Time時,Idle等待時間不會計算到DB Time中。此概念可以用下圖表示:

    clip_image005

    DB Time根據所執行的工作區分成不同統計項目,這些統計項目是有階層性的:

    clip_image006

    例如:SQL execute elapsed time就包含Repeated bind elapsed time,以DB time觀看統計資料或報表時,部分項目會同時顯示出來,故DB time結果可能會重複加總,導致DB time大於實際的DB time。

    2.3 Wait Event

    Oracle根據不同的等待狀況定義了許多事件來代表這些狀況,例如:不透過SGA方式直接讀取/寫入資料的方式被定義為direct path read/write。當session進行等待時,會依照等待情境對應到一個等待事件中,透過這些事件的統計可以知道系統等待時間都花在哪,是否有瓶頸存在。

    等待事件會依照特性進行分類:

    clip_image007

    這些分類會顯示在EM Performance tab的Average Active Sessions畫面

    clip_image008

    點選進入不同事件分類中,可以得到此類別中實際發生事件的名稱並列出最常發生的SQL和Session:

    CPU Used

    clip_image009

    SQL和Session都可以進一步點選進入,以不同觀點交互驗證效能瓶頸。

    clip_image010

    clip_image011

    clip_image012

    clip_image013

    2.4 Metrics and Alerts

    Metric代表累計統計值的變化率,可以是系統產生的或使用者自己定義,使用者自己定義的Metric可以用SQL方式設定,此時要監控什麼目標和警戒值都是由SQL查詢對象和結果決定。Alert為一個事件,當監控的Metric超過警戒值時產生,產生的Alert內容也會在ADDM中顯示。

    使用Metric的好處在於快速瞭解時間與統計變化,減少人工比對的麻煩:

    clip_image014

    EM中All Merics連結可以查看所有的Metrics:

    clip_image015

    Metrics會依照分類顯示,展開可以看到實際的項目:

    clip_image016

    Thresholds欄位顯示項目是否可以設定警戒值,Collection Scheduler說明多久收集一次資訊。點選項目連結可以查看每項Metric詳細內容:

    clip_image017

    圖表中呈現Metric的值變化率、最高、最低、平均值,如有設定警戒值還會顯示不同顏色區間,而超過警戒值的Alert也會顯示在此, ADDM的警告中也能看到。

    Metric需與警戒值搭配才能產生Alert,警戒值在Manage Metrics中可以設定:

    clip_image018

    clip_image019

    clip_image020

    使用Metrics能得知潛在有問題的項目以及數值的變化率,但無法判斷這問題是否發生於局部session或整個系統,而Histograms圖表可以顯示這樣的資訊,Histograms圖表可以從EM中的Performance Tab的Average Active點入:

    clip_image021

    進入Wait Event的項目後,再點選想要看的事件:

    clip_image022

    Histograms圖表Y軸為該事件的等待次數,X軸為等待時間,單位為ms,每一刻度為前一刻度的2次方直到4K ms:

    clip_image023

    Histograms圖表中需要留意的是等待時間長且次數多的狀況,這類的等待會造成效能問題。

    2.5 找出問題SQL

    監控問題SQL可以由:

    1. EM Performance tab的Top Active連結中觀察:

    clip_image024

    2. ADDM整段結果:

    clip_image025

    3.使用者的回報

    4.AWR Report

    觀察得知。

    DB執行的SQL都有一個SQL ID辨別,在EM中取得的SQL可以直接點選連結進入SQL Details頁面取得詳細資訊,但由使用者回報的SQL則需要查詢SQL內容取得SQL ID,下面SQL可以由SQL字串取得SQL ID:

    select sql_id,sql_text,sql_fulltext from V$SQLAREA where sql_text like '%PODT%'--條件

    請注意,sql_text欄位只會列出SQL前1000個字元,而選出完整的SQL句子可以查看sql_fulltext(clob類型),確認是使用者回報的SQL。

    取得SQL ID後需進入SQL Details頁面,用SQL ID進行切換到該SQL的詳細內容:

    clip_image026

    SQL Details頁面中,相同的SQL句子可能因為執行的context或其它因素會導致不同的執行計畫,故在畫面上可以拉選不同的Plan:

    clip_image027

    不同的Plan對應下方的tab資訊也會不一樣,在少數狀況下,同一句SQL如果存在不同執行計畫,則必須確定發生問題SQL使用的哪一個執行計畫,通常可以由SQL來源程式碼、SQL最後載入時間與執行次數等判斷可真正造成問題的執行計畫,如果有正在使用該SQL的session,也可以透過正在執行該SQL的session內容做推測。

    SQL Details頁面下方有四個tab,內容對於診斷SQL問題十分有用,各tab說明如下:

    Statistic:執行的統計資訊,包含SQL所在程式、執行次數、耗用時間,由這些資訊可以評估SQL是否有效能問題。

    clip_image028

    Active:顯示目前執行此SQL的Session。可以反向觀察Session是否是因為這SQL執行而有問題。

    clip_image029

    Plan:顯示SQL執行計畫,可看執行計畫內的操作是否合理,例如:有無不當的Full Table Scan、Join的方式和順序是否有異常。執行計畫可以使用Cost欄位來分析計畫的成本:

    clip_image030

    Tuning Information:

    SQL句子如果有用Oracle SQL Tuning Advisor調整或建立outline(穩定執行計畫用的資訊,避免環境改變造成SQL執行計畫變異)則會在此Tab中顯示,並可以點選連結查看過去調整的細節:

    clip_image031

     

刪除oracle user,tablespace,role 等資料

下方以各user,tablespace,role為例,請參考.. 1.步驟1先刪除user cascade的用途為,一併刪除該user相關的資料! 所以會將該user擁有之table一併刪除!
drop user invoice cascade;
drop user exchange cascade;
drop user his cascade;
drop user einvoiceaccount cascade;
drop user einvoicereader cascade;
2.步驟2刪除tablespace 刪除user後,會將其擁有之table,view,procduce..等也一併刪除, 所以現在的tablespace理論上是一個空的表空間
drop tablespace invoice;
drop tablespace exchange;
drop tablespace his;
3.步驟3刪除特殊建立之role..等,如aspnet provider會建立的role!
drop ROLE ORA_ASPNET_MEM_BASICACCESS;
drop ROLE ORA_ASPNET_MEM_FULLACCESS;
drop ROLE ORA_ASPNET_MEM_REPORTACCESS;
drop ROLE ORA_ASPNET_PERS_BASICACCESS;
drop ROLE ORA_ASPNET_PERS_FULLACCES;
drop ROLE ORA_ASPNET_PERS_REPORTACCESS;
drop ROLE ORA_ASPNET_PROF_BASICACCESS;
drop ROLE ORA_ASPNET_PROF_FULLACCESS;
drop ROLE ORA_ASPNET_PROF_REPORTACCESS;
drop ROLE ORA_ASPNET_ROLES_BASICACCESS;
drop ROLE ORA_ASPNET_ROLES_FULLACCESS;
drop ROLE ORA_ASPNET_ROLES_REPORTACCESS;
drop ROLE ORA_ASPNET_SESSN_FULLACCESS;
drop ROLE ORA_ASPNET_SMAP_FULLACCESS;
drop ROLE ORA_ASPNET_WEVNT_FULLACCESS;
此資料庫只有建立自訂的tablespace 並建立user對應新建立之tablespace, 並無對應到其他原有tablespace, 因此只要刪除此兩部份,即可乾淨的環原未新增前狀態! 較特殊的是role 因為有用oracle for aspnet provider, 所以變會建立對應之role 所以也要一併刪除!

EXP / IMP Oracle 資料庫

EXP 資料庫
C:\>exp system/bankpro@oracle9i file=C:\invoice.exp log=C:\invoice.log owner=invoice indexes=y rows=y constraints=y feedback=1000 tts_full_check=y
IMP 資料庫 1.先以具DBA角色權限以上之使用者登入oracle資料庫
C:\>sqlplus system/bankpro@oracle9i
2.執行Script,目的建立TableSpace & User
SQL> start c:\createtablespace.sql;

CREATE TABLESPACE INVOICE DATAFILE
'C:\ORACLE\ORADATA\ORACLE9I\INVOICE.ORA' SIZE 200M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO;

CREATE USER INVOICE
IDENTIFIED BY VALUES 'CC58BA69EDD100F1'
DEFAULT TABLESPACE INVOICE
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
-- 17 Roles for INVOICE
GRANT DBA TO INVOICE;
GRANT CONNECT TO INVOICE;
GRANT ORA_ASPNET_MEM_FULLACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_MEM_BASICACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_PERS_FULLACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_PROF_FULLACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_SMAP_FULLACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_MEM_REPORTACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_PERS_BASICACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_PROF_BASICACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_ROLES_FULLACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_SESSN_FULLACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_WEVNT_FULLACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_PERS_REPORTACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_PROF_REPORTACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_ROLES_BASICACCESS TO INVOICE WITH ADMIN OPTION;
GRANT ORA_ASPNET_ROLES_REPORTACCESS TO INVOICE WITH ADMIN OPTION;
ALTER USER INVOICE DEFAULT ROLE ALL;
-- 5 System Privileges for INVOICE
GRANT CREATE SESSION TO INVOICE;
GRANT CREATE ANY TABLE TO INVOICE;
GRANT SELECT ANY TABLE TO INVOICE;
GRANT CREATE ANY PROCEDURE TO INVOICE;
GRANT UNLIMITED TABLESPACE TO INVOICE;
3.開始執行TableSpace的匯入
C:\>imp system/bankpro@oracle9i fromuser=INVOICE touser=INVOICE file=C:\invoice.exp log=C:\invoice.log ignore=y indexes=y rows=y constraints=y feedback=1000
4. 重建Role對應
-- 6 Object Privileges for INVOICE GRANT DELETE, INSERT, SELECT, UPDATE ON  EXCHANGE.COMPANY TO INVOICE;GRANT DELETE, INSERT, SELECT, UPDATE ON  EXCHANGE.SALESINVOICE TO INVOICE;GRANT DELETE, INSERT, SELECT, UPDATE ON  EXCHANGE.SALESINVOICEDETAIL TO INVOICE;GRANT DELETE, INSERT, SELECT, UPDATE ON  EXCHANGE.SALESINVOICENG TO INVOICE;GRANT DELETE, INSERT, SELECT, UPDATE ON  HIS.B2CINVOICEACTIONHISTORY TO INVOICE;GRANT DELETE, INSERT, SELECT, UPDATE ON  HIS.B2CINVOICEDETAILACTIONHISTORY TO INVOICE;
-- 3 Object Privileges for EINVOICEACCOUNT GRANT DELETE, INSERT, SELECT, UPDATE ON  EXCHANGE.COMPANY TO EINVOICEACCOUNT;GRANT DELETE, INSERT, SELECT, UPDATE ON  HIS.B2CINVOICEACTIONHISTORY TO EINVOICEACCOUNT;GRANT DELETE, INSERT, SELECT, UPDATE ON  HIS.B2CINVOICEDETAILACTIONHISTORY TO EINVOICEACCOUNT;
GRANT ORA_ASPNET_MEM_BASICACCESS TO ORA_ASPNET_MEM_FULLACCESS;GRANT ORA_ASPNET_MEM_REPORTACCESS TO ORA_ASPNET_MEM_FULLACCESS;GRANT ORA_ASPNET_PERS_BASICACCESS TO ORA_ASPNET_PERS_FULLACCESS;GRANT ORA_ASPNET_PERS_REPORTACCESS TO ORA_ASPNET_PERS_FULLACCESS;GRANT ORA_ASPNET_PROF_BASICACCESS TO ORA_ASPNET_PROF_FULLACCESS;GRANT ORA_ASPNET_PROF_REPORTACCESS TO ORA_ASPNET_PROF_FULLACCESS;GRANT ORA_ASPNET_ROLES_REPORTACCESS TO ORA_ASPNET_ROLES_FULLACCESS;GRANT ORA_ASPNET_ROLES_BASICACCESS TO ORA_ASPNET_ROLES_REPORTACCESS;
5.重建AspNet Provider
C:\>sqlplus system/bankpro@oralce9i
將建置aspnet provider之script copy至c:\aspnet\路徑下!
SQL> start c:\aspnet\InstallAllOracleASPNETProviders.sql;
6.將有錯誤之procduce & function重新編譯過後即可!

Windows下管理Oracle9i服務

在Windows 作業系統下安裝Oracle 9i時會安裝很多服務—— 並且其中一些配置為在Windows 啟動時啟動。 在Oracle 運行在Windows 下時,它會消耗很多資源,並且有些服務可能我們並不總是需要。你會發現不使用Windows 圖形介面就可以快速、完全地關閉資料庫會很有用。 只要擁有管理員許可權就可以通過net start 啟動一個服務,或者通過net stop 命令停止一個服務,從而控制以下服務中的任何一個。在Windows XP 中,可以通過在控制面板的服務中改變想要禁用的服務(OracleOraHome...)的啟動類型(Startup Type)參數,雙擊某個服務查看其屬性,然後將啟動類型屬性從自動改為手動。使資料庫在本地工作唯一需要運行的服務是OracleServiceORCL 服務(其中ORCL 是SID)。這個服務會自動地啟動和停止資料庫(使用shutdown 中斷)。如果安裝了一個資料庫,它的缺省啟動類型為自動。如果主要是訪問一個遠端資料庫,那麼可以把啟動類型由自動改為手動。 OracleOraHome92HTTPServer 服務(OraHome92 是Oracle Home 的名稱)是在安裝Oracle 時自動安裝的Apache 伺服器。一般情況下我們只用它來訪問Oracle Apache 目錄下的Web 頁面,比如說JSP 或者modplsql 頁面。 OracleOraHome92TNSListener 服務只有在資料庫需要遠端存取時才需要(無論是通過另外一台主機還是在本地通過 SQL*Net 網路協定都屬於遠端存取)。不用這個服務就可以訪問本地資料庫。 OracleOraHome92ClientCache 服務緩存用於連接遠端資料庫的Oracle Names 資料。正常情況下該服務的啟動類型是配置為手動的。然而,除非有一台Oracle Names 伺服器,否則沒有必要運行這個服務。 有四個服務是Oracle 企業管理器所必須的(Oracle Enterprise Manager),這個服務分別為: OracleOraHome92Agent(智慧代理),該服務監視資料庫和企業管理器請求,缺省啟動類型為自動。 OracleOraHome92SNMPPeerEncapsulatorOracleOraHome92SNMPPeerMasterAgent,處理安全網路管理協定服務。 OracleOraHome92PagingServer 通過一個使用數據機的數位傳呼機或者電子郵件發出警告。 OracleMTSRecoveryService 是可選的,該服務允許資料庫充當一個微軟事務伺服器、COM/COM+物件和分散式環境下的事務的資源管理器。 如果只是偶爾使用一下資料庫,那麼可以創建一個簡單的腳本任務來啟動和關閉伺服器,這樣每次只要雙擊腳本就可以了,可以不使用圖形介面。 1. 保存一個快捷方式自動地裝載這些檔。 2. 將Oracle 服務設為手動避免在Windows 啟動時啟動。 REM "dbstart.cmd" @echo off set ORAHOME="OraHome92" set ORASID="ORCL" net start OracleServiceORASID REM net start OracleORAHOMEHTTPServer REM net start OracleORAHOMETNSListener REM net start OracleORAHOMEClientCache REM net start OracleORAHOMEAgent REM net start OracleORAHOMESNMPPeerEncapsulator REM net start OracleORAHOMESNMPPeerMasterAgent REM net start OracleORAHOMEPagingServer REM net start OracleMTSRecoverService REM "dbshut.cmd" @echo off set ORAHOME="OraHome92" set ORASID="ORCL" net stop OracleServiceORASID REM net stop OracleORAHOMEHTTPServer REM net stop OracleORAHOMETNSListener REM net stop OracleORAHOMEClientCache REM net stop OracleORAHOMEAgent REM net stop OracleORAHOMESNMPPeerEncapsulator REM net stop OracleORAHOMESNMPPeerMasterAgent REM net stop OracleORAHOMEPagingServer REM net stop OracleMTSRecoverService

oracle備份還原

《 備 份 》 <1>cmd視窗使用sysdba連上oracle C:\> sqlplus "sys/bankpro@oracle9i as sysdba" <2>將oracle資料庫關閉 SQL> shutdown normal; <3>將oracle資料庫資料複製一份 ( 預設於oradata內,如oracle9i資料夾 ) 《 還 原 》 <1>cmd視窗使用sysdba連上oracle C:\> sqlplus "sys/bankpro@oracle9i as sysdba" <2>將oracle資料庫關閉 SQL> shutdown normal; <3>複製備份檔案至oracle資料夾中 <4>開啟oracle資料庫至nomount模式 SQL> startup nomount; <5>提升資料庫至mount模式 SQL> alter database mount; <6>修改資料庫檔案掛載位置 SQL> alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\CWMLITE01.DBF' TO C:\ORACLE\ORADATA\ORACLE9I\CWMLITE01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\DRSYS01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\DRSYS01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\EXAMPLE01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\EXAMPLE01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\EXCHANGE.ORA' TO 'C:\ORACLE\ORADATA\ORACLE9I\EXCHANGE.ORA'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\HIS.ORA' TO 'C:\ORACLE\ORADATA\ORACLE9I\HIS.ORA'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\INDX01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\INDX01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\INVOICE.ORA' TO 'C:\ORACLE\ORADATA\ORACLE9I\INVOICE.ORA'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\ODM01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\ODM01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\TOOLS01.DBF' TO C:\ORACLE\ORADATA\ORACLE9I\TOOLS01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\UNDOTBS01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\UNDOTBS01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\USERS01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\USERS01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\XDB01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\XDB01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\SYSTEM01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\SYSTEM01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\REDO01.LOG' TO 'C:\ORACLE\ORADATA\ORACLE9I\REDO01.LOG'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\REDO02.LOG' TO 'C:\ORACLE\ORADATA\ORACLE9I\REDO02.LOG'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\REDO03.LOG' TO 'C:\ORACLE\ORADATA\ORACLE9I\REDO03.LOG'; 也可將上方Script製作成一個如Restore.txt的文字檔 再利用sqlplus執行: SQL> start c:\Restore.txt; 即可批次執行指令!! <7>提升資料庫至open模式 alter database open; <8>重新建立Temp檔 alter database tempfile 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\TEMP01.DBF' DROP; alter tablespace temp add tempfile 'C:\ORACLE\ORADATA\ORACLE9I\TEMP01.DBF' SIZE 40m reuse;