鷹翔宇空

          學習和生活

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks

          原文引自:-------------
          第一個#是改共享內存大小的
          第二個#是啟動數據庫的。

          (3)
          ftp://ftp.rpmfind.net/linux/rhcontri ... lerun9i-1.0-1.i386.rpm

          下載這個軟件包并安裝。

          里面每個文件都有一些要修改的地方。配置完成之后,就可以在系統服務配置中找到它,選中它就可能以自啟動了。

          18、回滾段不夠的處理方法

          (1)、先使回滾段脫機一個,
          如果不好用,則再脫機一個。直至好用。
             ALTER rollback segment rollbackname offline;
          (2)、增加回滾段數據文件的大小
             alter database datafile 'datafile' resize 200M;


          19、WINNT向WIN2000移植

          不用EXP和IMP的

          停掉數據庫的服務后,可以做一個數據庫的全備份。

          在WIN2000上建一個同名的數據庫,隨便建,越小越好,可以縮短時間。
          把WINNT下的數據庫備份恢復到WIN2000的數據庫上就可以了。但建庫的目錄
          必須一樣。(也可以不一樣,但需要更改數據文件的連接)

          我曾多次為用戶這樣移植數據,萬無一失的。
          注意:因為數據很重要,所以建議你先EXP備份一下。這是我們的習慣。


          20、ORACLE SQL PLUS Worksheet亂碼問題。

          dbappscfg.properties,修改該文件即可解決上述問題。$ORACLE_HOME\sysman\config目錄下,修改
          # SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
          為SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。

          對于Windows操作系統,還需要修改一項
          #SQLPLUS_SYSTEMROOT=c:\\WINNT40
          為SQLPLUS_SYSTEMROOT=C:\\WINNT

          如操作系統的主目錄在C盤的Winnt下

          對于后面一項的修改只對Windows操作系統進行,對UNIX操作系統則不需要。如果在Windows操作系統中不修改該項,在Oracle Enterprise Manager中,連接系統時,會提示如下的錯誤:
          ORA-12560 TNS:protocol adapter error 
          或者 
          ORA-12545 Connect failed because target host or object does not exist 
          重新連接SQL PLUS Worksheet


          21、DROP掉名字是小寫的表(用雙引號括起來)。

              drop table "tablename"
              select * from "tablename"

          22、日期的顯示格式
          注意:SIMPLIFIED CHINESE(簡體中文需要" "括起來)
                別的國家不用" " 例如:ENGLISH 
          select to_char(sysdate,'DAY','NLS_DATE_LANGUAGE=''SIMPLIFIED CHINESE''') from dual;
          ------------
          星期四
          ------------

          23、一個從ORACLE中讀表信息的存儲過程

          可以在vc下調用存儲過程來實現
          例子:
          先修改init.ora
          例如:
          utl_file_dir=/usr    //路徑為 oracle所在的盤:/usr
          此過程將用戶TEMP的P1過程的代碼保存到ORACLE安裝盤下/USR/TEXT.TXT中
          create or replace procedure TEST
          is
            file_handle utl_file.file_type;
            STOR_TEXT VARCHAR2(4000);
            N NUMBER;
          I NUMBER;
           begin
          I:=1;
             SELECT MAX(LINE) INTO N FROM ALL_SOURCE WHERE OWNER='TEMP' AND NAME='P1';
          file_handle:=utl_file.fopen('/usr','test.txt','a');
          WHILE I<=N LOOP
             SELECT TEXT  INTO STOR_TEXT FROM ALL_SOURCE WHERE OWNER='TEMP' AND NAME='P1' AND LINE= I;
             I:=I+1;
             utl_file.put_line(file_handle,stor_text);
          END LOOP;
             utl_file.fclose(file_handle);
          commit;
          end TEST;
          /

          24、關于修改ORACLE的列寬
          (1)、不論如何都要備份數據。
          (2)、如果沒有數據,則可以修改寬度。比如NUMBER,CHAR,VARCHAR2
          (3)、如果有數據,則可以增加寬度。比如NUMBER,CHAR,VARCHAR2
             注意:不可以減小寬度。
          (4)、語法:alter talbe tablename modify columnname columntype not null;

          25、如何查看用戶的存儲過程和函數

          select name,text from user_source where name= Procedurename and type = 'PROCEDURE' order by line;

          26、在批處理中自動啟動ORACLE服務(win2000)

          編一個批處理文件
          net start OracleServiceSID
          OracleServiceSID是ORACLE的實例名稱

          27、對行加鎖時,只對tb1加鎖

          select tb1.r1 from tb1, tb2  where tb1.r2 = tb2.r2 and tb2.r1 = xxx for update of tb1.r1 nowait

          28、得到列的信息

          desc tablename
          select cname from col where tname='TABLENAME';
          select column_name from user_tab_columns where table_name='TABLENAME';
          select column_name from ALL_tab_columns where table_name='TABLENAME';
          select column_name from dba_tab_columns where table_name='TABLENAME';
          select column_name from user_col_comments where table_name='TABLENAME';    
          select column_name from all_col_comments where table_name='TABLENAME'; 
          select column_name from dba_col_comments where table_name='TABLENAME'; 

          29、使觸發器無效(login_on)

          svrmgrl
          connect internal/oracle
          alter trigger login_on disable;

          使觸發器為無效alter trigger yourtriggername disable

          如果是對于某一個表的所有的觸發器:
          alter table yourtablename disable all triggers


          30、如在SQLPLUS中何調用存儲過程和函數。

              call只能調用存儲過程后面加上括號就可以了
              call 存儲過程名();
              exec procedurename;(可以不加())
              調用函數用sql語句
              select 函數名(參數) from dual;

          31、函數中如果調用DML語句就不可以調用SELECT語句

          32、REDO LOG BUFFER 什么時候寫到REDO LOGFILE中
              (1)、在COMMIT的時候
              (2)、重做日志緩沖區1/3滿的時候
              (3)、重做日志緩沖區大于1M的時候
              (4)、它寫信息必須是在數據寫進程前調用
              (5)、一般CHECKPOINT在日志組切換的時候進行或者由初始化參數設定
                   在CHECKPOINT的時候需要調用數據寫進程   

          33、ORACLE的http server 把原有的WEB server沖掉,如何解決?

              (1).如果你原來的http server是用IIS等其他發布工具做的,那么可以在服務中停掉         oracle http server服務,并且改為手動啟動。
              (2).如果原來的http server是用apache發布,則可以改變http.conf中的參數

          34、關于創建重建查看索引


          創建索引:
          CREATE INDEX IND_NAME ON TABLE_NAME(COL1,COL2,...);

          重建索引:
          ALTER INDEX IND_NAME REBUILD;

          查看索引:

          SELECT * FROM USER_INDEXES WHERE INDEX_NAME='IND_NAME';

          35、ORACLE如何查殺用戶的進程
            
             一|根據用戶的應用程序和SQL語句,在DBA STUDIO找到用戶的SESSION并斷開其連接
           
             二、
             
             (1)、要殺掉一個session應先應知道其sid和serial#,假設你已經知道。
             (2)、select paddr from v$session where sid=v_sid and serial#=v_serial#
             select spid from v$process where addr=paddr(以上語句所查出的);

             (3)、使用ALTER SYSTEM KILL SESSION 'v_sid,v_serial#' immediate; 試一試如不行轉    
             
             三、LINUX和UNIX下
             轉到操作系統下執行:kill -9 spid (以上語句所查出的)  
             
          36、ORACLE中檢查表是否被鎖的語句

              SELECT A.OWNER,   
                   A.OBJECT_NAME,   
                   B.XIDUSN,   
                   B.XIDSLOT,   
                   B.XIDSQN,   
                   B.SESSION_ID,   
                   B.ORACLE_USERNAME,   
                   B.OS_USER_NAME,   
                   B.PROCESS,   
                   B.LOCKED_MODE,   
                   C.MACHINE,   
                   C.STATUS,   
                   C.SERVER,   
                   C.SID,   
                   C.SERIAL#,   
                   C.PROGRAM  
              FROM ALL_OBJECTS A,   
                   V$LOCKED_OBJECT B,   
                   SYS.GV_$SESSION C 
             WHERE ( A.OBJECT_ID = B.OBJECT_ID ) 
               AND (B.PROCESS = C.PROCESS )
             ORDER BY 1,2     
          殺掉:alter system kill session 'sid, serial#' 
          37、ORACLE的登錄問題,用戶名和密碼。

          可以直接輸入:
              internal/oracle@serivce_name
            sys/change_on_install@serivce_name
            system/manager@serivce_name
            scott/tiger@serivce_name
          注意:
          9i中沒有internal/oracle
          如果選擇典型安裝則有 scott用戶
          如果自定義可以不安裝  scott用戶
          如果是本機則可以省略@serivce_name

          oem:(ORACLE ENTERPRISE MANAGER)
          sysman/oem_temp


          38、修改表的列名

          Oracle9i:
          alter table xxx rename column xx to yy;

          Oracle8i & lower version
          connect sys/passed;
          update col$ set name=xx where obj#=對象id and name = 字段
          (一般不要這樣用,會造成意想不到的結果)
          注:最好是刪除再建立新的列


          39、把用戶模式對象所在的表空間移到新的表空間
          (1). create the new tablesapce
          (2). alter user test default tablespace test_data;
          (3). alter user test quota unlimited on test_data;
          (4). alter table the_table_name move tablespace test_data;
              生成腳本:
              select 'alter table'||tname||' move tablespace test_date;' 
              from tab
             where tabtype='TABLE'
          (5). rebuild the indexes;

          40、使用OEM備份或者EXP的步驟
           WIN2000下:

          (1). 控制面板――>管理工具―― >計算機管理――>本地用戶和組――>用戶――>新建用戶sys和sysman(sys和sysman 的帳號要和登陸數據庫的帳號相同);
          (2).控制面板――>管理工具―― >本地安全策略――>本地策略――>用戶權利指派――>
          作為批處理作業登陸――>添加sys和sysman兩個帳號。
          (3).使用Enterprise Manager配置輔助工具
          開始→程序→Oracle - OraHome81→Enterprise Manager→Configuration Assistant
          a、使用Configuration Assistant工具來創建一個新的資料檔案庫。

          (4).控制面板――>管理工具―― > 服務,查看OracleOraHome81ManagementServer是否啟動,如果沒有啟動,則手動啟動該服務。
          (5).以sysman/oem_temp(default)登陸DBA Studio
          (第二個選項:登陸到Oracle Management Server),立即修改密碼為你剛才在NT下建的用戶sysman的密碼。
          (6). 以sysman/ *** (bluesky) 從開始→程序→Oracle - OraHome81→Console 登陸到 控制臺。
          在 系統→首選項→首選身份證明(我的首選身份設置如下:) 
          DEFAULT節點:name:sysman
          DEFAULT數據庫:name:sys
          (7). 在搜索/添加結點后,以sysman/ *** 登陸到該結點,以sys/ *** as sysdba登陸數據庫(也就是在首選身份設置的結果)。
          (8). 在工具→備份管理→向導→預定義備份策略(自定義備份策略)→提交備份計劃
          (9).從開始→程序→Oracle - OraHome81→Console 登陸到 控制臺,查看活動(歷史記錄)可以看到你的備份是否成功,如果不成功,可以點擊備份看明細。(我第一次也沒成功,后來我修改系統的臨時目錄C:\WINNT\Temp→c:\temp\systmp,重新啟動機器就ok了)

          41、如何修改INTERNAL的口令
            
          以下是oracle8的8i你可以仿照來做

          (1)、進入DOS下

          (2)、默認internal密碼文件在c:\orant\database下,是隱藏屬性,文件名稱與數據庫實例名有關

            如默認ORACLE實例名為ORCL,則internal密碼文件名為pwdorcl.ora

          (3)、建立新的internal密碼文件,起個新名字為pwdora8.ora

            orapwd80 file=pwdora8.ora password=B entries=5     --注:password項一定要用大寫,并且不要用單引號

          (4)、拷貝pwdora8.ora文件到c:\orant\database目錄下

          (5)、運行regedit,修改口令文件指向

          (6)、找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE項

            定位ORA_ORCL_PWFILE子項,改變其值為c:\orant\database\pwdora8.ora

          (7)、關閉ORACLE數據庫,重新啟動

          (8)、進入svrmgr30服務程序,測試internal密碼是否更改成功


          42、憑證檢索失敗的決絕方法。

          原因: 由于Oracle不能應用OS認證而導致憑證檢索失敗
              
          解決辦法: 
              
              (1).打開network/admin下的sqlnet.ora 
                  修改SQLNET.AUTHENTICATION _SERVICES=(NONE)。 
              
              (2).啟動Net8 configuration assistant-->選第三項本地網絡服務名配置 
              -->刪除...(刪除原來的本地網絡服務名) 

              (3).重復第二步 
              -->添加.. (新建本地網絡服務名) 

              (4).restart oracle
             
              注意:NTS是WinNT的認證方式

          43、命令行編譯存儲過程

              ALTER PROCEDURE procedure_name COMPILE;

          44、關于如何建立數據庫鏈接(DBlink)

          可以通過建立客戶機數據庫網絡服務名的辦法,將服務器的名字或是IP地址設置為你需要連接的那個機器就行

          如果你要在一個應用中連接它,現在做好上步工作,然后按如下處理

          建立數據庫連接
          CREATE DATABASE LINK DBaseLinkName CONNECT TO UserName IDENTIFIED BY Password USING 'NetServiceName';
          DBaseLinkName  是建立的數據連接名稱
          UserName       是可以連接到的用戶名
          Password        是可以連接到的用戶的密碼
          NetServiceName  是可以連接的數據庫網絡服務名或是數據庫名

          查詢建立數據連接的表實例
          Select * From TableName@ DBaseLinkName;

          注意:如果在CREATE DATABASE LINK DBaseLinkName CONNECT TO UserName IDENTIFIED BY Password USING 'NetServiceName';中NetServiceName  是數據庫名修改init.ora中:global_names = true
          否則global_names = false
          init.ora中:global_names = false
            
          45、Object Browser7.0中文版的破解方法

          到OBJECT BROWSER的目錄里,找到DeIsL1.isu文件,用記事本打開,看到的是亂碼吧?沒關系,將Stirling Technologies ,Inc 這個字符串前面的亂碼去掉(如果有的話),讓后在Stirling之前加一個空格(一定要加的),保存,退出,重新運行一下看看,雖然還有提示輸入驗證信息,但是不用管他,直接確定就行。是不是可以用了呢?保證好使。

          46、錯誤號ORA-01536:space quota exceeded for table space 'ALCATEL'的解決辦法
               
               三個解決辦法,任你選擇:
              (1) alter user USERNAME quota 100M on TABLESPACENAME;
              (2) alter user USERNAME quota unlimited on TABLESPACENAME;
              (3) grant unlimited tablespace to USERNAME;

          47、如何在Oracle中捕獲到SQL語句的全部操作內容

                 SELECT osuser, username, sql_text from v$session a, v$sqltext b 
                 where a.sql_address =b.address order by address, piece;   

          48、ORACLE中如何實現自增字段:

          (1)第一種方法 
          ORACLE一般的做法是同時使用序列和觸發器來生成一個自增字段.
          CREATE SEQUENCE SEQname
           INCREMENT BY  1
           START WITH  1
           MAXVALUE  99999999
          /
          CREATE TRIGGER TRGname
          BEFORE  INSERT  ON table_name
          REFERENCING
           NEW AS :NEW
          FOR EACH ROW
          Begin
             SELECT SEQname.NEXTVAL
               INTO :NEW.FIELDname
               FROM DUAL;
          End;

          (2)第二種方法:
          CREATE OR REPLACE TRIGGER TR1
            BEFORE INSERT ON temp_table
            FOR EACH ROW
          declare 
          com_num NUMBER;
          BEGIN
          SELECT MAX(ID) INTO COM_NUM FROM TEMP_TABLE; 
          :NEW.ID:=COM_NUM+1;
          END TR1;

          49、job的使用:

          修改initsid.ora參數
          job_queue_processes = 4            8i,9i  (允許同時執行的JOB數)
          job_queue_interval = 10            8i  
          job_queue_keep_connections=true       8i


          DBMS_JOB.SUBMIT(:jobno,//job號
                          'your_procedure;',//要執行的過程
                          trunc(sysdate)+1/24,//下次執行時間
                          'trunc(sysdate)+1/24+1'//每次間隔時間
                         );
          刪除job:dbms_job.remove(jobno);
          修改要執行的操作:dbms_job.what(jobno,what);
          修改下次執行時間:dbms_job.next_date(job,next_date);
          修改間隔時間:dbms_job.interval(job,interval);
          停止job:dbms.broken(job,broken,nextdate);
          啟動job:dbms_job.run(jobno);

          注意:修改后一定要COMMIT;


          例子:
          VARIABLE jobno number;
          begin
                DBMS_JOB.SUBMIT(:jobno, 
                        'Procdemo;',//Procdemo為過程名稱 
                         SYSDATE, 'SYSDATE + 1/720');
                   commit;
          end;

          50、如何配置mts

          修改初始化參數文件
          增加以下內容:
          mts_dispatchers = "(protocol=TCP)(disp=2)(con=1000)"
          mts_max_dispatchers = 50
          mts_servers = 20 
          mts_max_servers = 50

          51、取出一個表的最后一條記錄

          select * from (select rownum id,tname.* from tname) a where a.id=(select count(*) from a);

          52、重做日志(Redolog)被刪掉,通過什么方法才能恢復!

          先mount數據庫,然后再目錄下建同名文件redo01.log、redo02.log、redo03.log
          然后執行alter databse clear logfile group n
          對于current的group,執行alter databse clear unarchived logfile group n
          然后,再open,就ok了

          53、Oracle常見服務

          幾個主要的:

          OracleOraHome81TNSListener     監聽服務
          OracleServiceSID               ORACLE服務
          OracleOraHome81Agent           智能代理服務
          OracleOraHome81CMan            連接管理服務
          OracleOraHome81HTTPServer      APACHE WEB 服務
          OracleOraHome81ManagementServer ORACLE 企業管理器服務
          OracleOraHome81Names            ORACLE命名服務

          剩下的也不常用。

          54、ORACLE的熱備份

          在不關閉數據庫的時候進行ORACLE的備份。

          原理停復雜的,你去找本書看看吧。

          舉個簡單的例子:備份表空間USERS

          ALTER TABLESPACE USERS BEGIN BACKUP
          COPY USERS TABLESPACE 的數據文件到備份目錄
          ALTER TABLESPACE USERS END BACKUP

          55、導致索引不起作用的解決辦法

          你的問題我剛處理過,是由optimizer_mode參數引起的,該參數的默認值為choose,即為如表有statis則查詢走基于cost的方式,否則走基于rule的方式,因些你可以有以下幾個解決方法。
          (1)、簡單的在init<sid>.ora中設optimizer_mode=rule,重起數據庫。
          (2)、使用analyze table table_name(索引基表) delete statistics;
          (3)、最后一個萬能辦法,將表和索引drop掉,重建。

          56、關于數據庫進程的問題。

          (1).查看相關進程在數據庫中的會話
          Select a.sid,a.serial#,a.program, a.status ,
          substr(a.machine,1,20), a.terminal,b.spid
          from v$session a, v$process b
          where a.paddr=b.addr
          and b.spid = &spid;

          (2).查看數據庫中被鎖住的對象和相關會話
          select a.sid,a.serial#,a.username,a.program,
          c.owner, c.object_name 
          from v$session a, v$locked_object b, all_objects c
          where a.sid=b.session_id and
          c.object_id = b.object_id;

          (3).查看相關會話正在執行的SQL
          select sql_text from v$sqlarea where address = 
          ( select sql_address from v$session where sid = &sid );


          57、查看IP地址
          select SYS_CONTEXT('USERENV','IP_ADDRESS')  from dual;

          58、運行SQLPLUS時不用輸入用戶名和密碼,進入之后使用CONNECT
                       
                  SQLPLUS /NOLOG
                  SQL>CONNECT SCOTT/TIGER

          59、查看當前會話

                  userenv() 函數

                  select userenv('language') from dual 字符集
                  select userenv('isdba') from dual 是否DBA
                  select userenv('sessionid') from dual sessionid
                  select userenv('TERMINAL') from dual 客戶端名字
                  select userenv('INSTANCE') from dual 實例數

                  SYS_CONTEXT() 函數
               
                  select SYS_CONTEXT('USERENV','CURRENT_SCHEMA')  from dual;  當前模式
                  select SYS_CONTEXT('USERENV','CURRENT_SCHEMAID')  from dual;  當前模式ID
                  select SYS_CONTEXT('USERENV','CURRENT_USER')  from dual; 當前用戶  
                  select SYS_CONTEXT('USERENV','DB_NAME')  from dual; 數據庫 
                  select SYS_CONTEXT('USERENV','HOST')  from dual; 主機
                  ..........

          60、刪除重復列的方法

          (1) DELETE FROM table_name A WHERE ROWID > (
                 SELECT min(rowid) FROM table_name B
                  WHERE A.key_values = B.key_values);
          (2) create table table2 as select distinct * from table1;
               drop table1;
               rename table2 to table1;
          (3) Delete from mytable where rowid not in(
                 select max(rowid) from mytable
                 group by column_name );
          (4) delete from mytable t1
                where  exists (select 'x' from my_table t2
                             where t2.key_value1 = t1.key_value1
                               and t2.key_value2 = t1.key_value2
                               ...
                               and t2.rowid > t1.rowid);

          61、ORA-12571: TNS:packet writer failure(包寫入程序失敗)

             (1) 這個錯誤在客戶端遇到過,通常重新連接一下服務器就好了。
             服務器重新啟動的時候,在client也會遇到該錯誤。
             這個錯誤你是在server還是client上遇到的?最常用的辦法就是加上跟蹤,查看一下    跟蹤記錄,分析分析錯誤的原因。
             網絡問題也會出現該錯誤,比如網絡路由沒有配置好。
             (2) 安裝的殺毒軟件導致的
             (3) 服務器端的IP是否被改動
             (4) 最后不行的話,重新創建監聽器
              
          62、ORACLE服務不能自動啟動的解決辦法   

             把ORACLEHOME\network\ADMIN\sqlnet.ora
             文件中的 sqlnet.authentication_service=(nts) 
             注釋掉就可以了


          63、不完全的時間點恢復

          shutdown immediate
          copy 備份文件到需要恢復的目錄下
          startup mount
          recover database until time '2002-12-26 09:00:00'

          alter database open resetlogs

          自己仔細檢查一下,不會發生這樣的問題的。

          64、oracle如何設置查詢超時

          select  /*+  timeout  30*/  *  from  veryLargeTable  

          65、修改字符集

          (1)、ALTER DATABAE CHARACTER SET SIMPLIFIED CHINESE_CHINA.ZHS16GBK ; 

          (2)、update props$ set value$='ZHS16CGB231280' 
          where name='NLS_CHARACTERSET';
          update props$ set value$='ZHS16CGB231280' 
          where  name='NLS_NCHAR_CHARACTERSET';

          建議不使用(2)

          注意:
          (1)、執行ALTER DATABASE CHARACTER SET必須有SYSDBA權限,并且在STARTUP RESTRICT模式下執行
          (2)、原字符集必須是目標字符集的一個真子集(就是浪子所說的只能從WE8ISO8859P1轉到ZHS16GBK的原因)
          (3)、CLOB字段裝換可能有問題,建議在轉換以前把有CLOB字段的表導出后DROP,轉換以后再導回
          (4)、該轉換不可逆,所以在做這個操作以前建議做數據庫全備份

          66、修改數據庫名字

          (1)、啟動svrmgrl,以文本方式備份控制文件
           oracle>svrmgrl
           svrmgrl>connect internal
           svrmgrl>alter system backup controlfile to trace
          (2)、編輯產生的跟蹤文件,在udump目錄下
           改CREATE CONTROLFILE REUSE DATABASE "CTC" NORESETLOGS ARCHIVELOG
           中的REUSE為SET
           然后把create controlfile這段語句拷出
          (3)、正常宕庫,后啟動到nomount下
           svrmgrl>shutdown immediate
           svrmgrl>startup nomount
          (4)、執行create controlfile那段語句
          (5)、打開數據庫
           svrmgrl>alter database open
           如提示用resetlogs選項則使用
            svrmgrl>alter database open resetlogs
          (8)、相應修改初始化參數

           

          67、rownum的用法

             select * from (select t.*,rownum id from dept t)
             where id between 1 and 20


          68、oracle的內部參數

             SELECT a.ksppinm NAME,
                 b.ksppstdf default_val,
                 a.ksppdesc DESCRIPTION
            FROM x$ksppi a,
                 x$ksppcv b
           WHERE a.indx=b.indx
             AND substr(a.ksppinm,1,1)='_'
           ORDER BY a.ksppinm

          69、9i安裝時報areasqueries錯誤的解決辦法
              包括IAS 和 IDS 
              
              把安裝源文件目錄全部改為英文字母或數字
              注意:不能是中文的路徑

          70、我如何知道一個表空間還有多少可以用

          (1)、
          SELECT upper(f.tablespace_name) 表空間名,
                 d.Tot_grootte_Mb "表空間大小(M)",
                 d.Tot_grootte_Mb - f.total_bytes "已使用空間(M)",
                 round((d.Tot_grootte_Mb - f.total_bytes) / d.Tot_grootte_Mb * 100,2) "使用比",
                 f.total_bytes "空閑空間(M)",
                 f.max_bytes "最大塊(M)"
           FROM      
              (SELECT tablespace_name,
                      round(SUM(bytes)/(1024*1024),2) total_bytes,
                      round(MAX(bytes)/(1024*1024),2) max_bytes
                FROM sys.dba_free_space
               GROUP BY tablespace_name) f,
              (SELECT dd.tablespace_name, round(SUM(dd.bytes)/(1024*1024),2) Tot_grootte_Mb
                FROM   sys.dba_data_files dd
                GROUP BY dd.tablespace_name) d
          WHERE d.tablespace_name = f.tablespace_name    
          ORDER BY 4 DESC
          (2)、select tablespace_name,round(sum(bytes)/1024/1024,2) "M" from dba_free_space 
          group by tablespace_name

          71、creck pl/sql developer 的方法

          (1)、安裝pl/sql developer
          (2)、用UltraEdit將程序PLSQLDev.exe打開
          (3)、將UltraEdit設置為16進制模式
          (4)、查找串:BA 1E 00 00 00 2B D0
             修改:2B D0  為:4A 90
          (5)、存盤退出
          (6)、運行PLSQLDev.exe,如果提示你還有29天的時間可用,那就恭喜你了!

          72、使索引無效

          ALTER INDEX idx UNUSABLE;
          ALTER INDEX idx_acctno DISABLE;(only to a function based index)

          73、在SQLPLUS中給指定用戶進行 set autotrace on/off
              
              以SCOTT用戶為例:

              SQL>CONNECT scott/tiger 
              
              connected.
              
              SQL>@$ORACLE_HOME/RDBMS/ADMIN/UTLXPLAN.SQL 
              
              Table created.
              
              SQL>CONNECT / AS SYSDBA 
              
              connected.
              
              SQL>@$ORACLE_HOME/SQLPLUS/ADMIN/PLUSTRCE.SQL 
              
              drop role plustrace;
              Role dropped.
              create role plustrace;
              Role created.
              .
              grant plustrace to dba with admin option;
              Grant succeeded.

              SQL>GRANT PLUSTRACE TO SCOTT; 

              Grant succeeded.

              SQL>CONNECT SCOTT/TIGER

              connected.        

              SQL>set autotrace on

              SQL>

          74、關于約束的四種狀態

          Disabled novalidate:當約束使不能時,約束的規則不能強制在列
                 (包含在約束中)的數據之上。但約束的定義保存在數據字典中。
                 在執行數據倉庫卷起(rollup)或裝載且要加快裝載過程時該方式
                 是有用的。
          Enabled novalidate:是能無效,該狀態的表可以包含非法
                的數據,但不可能加入新的非法數據。
          Enabled validate:使能有效,一個使能的約束是強制的,表的數據檢查
                有效

          75、在SQLPLUS中調用存儲過程

          SET SERVEROUTPUT ON 
          declare
           out_param varchar2(100);
          begin
           your_proc(1,out_param);
           dbms_output.put_line(out_param);
          end;
          /
          SET SERVEROUTPUT OFF 

          75、生成系統表和存儲過程的三個文件。

               cat*.sql
               dbms*.sql
               utl*.sql

          76、JOB中日期的使用

          每個月1號:
          last_day(sysdate)+1
          每個季度的第一天:
          to_date(decode(to_char(sysdate,'q'),'1',to_char(sysdate,'yyyy')||'0101',
              '2',to_char(sysdate,'yyyy')||'0401','3',to_char(sysdate,'yyyy')||'0701',
              '4',to_char(sysdate,'yyyy')||'1001'),'yyyymmdd')
          每天:
          sysdate+1
          每個星期幾:
          decode(to_char(sysdate,'w'),'1',sysdate+7,
          to_char(sysdate,'w'),'2',sysdate+6,to_char(sysdate,'w'),'3',sysdate+5,
          to_char(sysdate,'w'),'4',sysdate+4,to_char(sysdate,'w'),'5',sysdate+3,
          to_char(sysdate,'w'),'6',sysdate+2,to_char(sysdate,'w'),'7',sysdate+1)

          每個星期x下午三點:interval(21, 'next_day(trunc(sysdate),x+1)+15/24');

          每個季度的第一個星期x:
          interval(21, 'next_day(trunc(sysdate,''Q''),3),5)');


          77、使用execute immediate 的問題

          8i以上才支持execute immediate 
          8.05只能用dbms_sql  
          最好使用execute immediate


          78、ORACLE9i中刪除表空間中數據文件的方法
           
          drop tablespace tbsname including contents 

          79、找出串中的數字

          SELECT TRANSLATE('2KRW229',
             '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789')
             "Translate example"
               FROM DUAL
          /

          2229

          --全是數字的:
          select * from 你的表 where translate(你的列,'0123456789',' ')='';

          select * from 你的表 where trim(ltrim(rtrim(replace(col_name,'0123456789',' ')))) is null

           

          80、分析表
          analyze table mzbs.db_code ESTIMATE STATISTICS SAMPLE 20 PERCENT;


          81、表空間管理和用戶管理

          --查看表空間和數據文件

          select file_name,tablespace_name,autoextensible from dba_data_files;

          --數據表空間

          CREATE TABLESPACE USER_DATA 
              LOGGING 
              DATAFILE 'D:\ORACLE\ORADATA\ORCL\test.DBF' SIZE 50m REUSE ,
                       'c:\USERS01112.DBF' SIZE 50m REUSE  
              AUTOEXTEND 
              ON NEXT  1280K MAXSIZE  16383M EXTENT MANAGEMENT LOCAL

          --臨時表空間

          CREATE TEMPORARY 
              TABLESPACE  USER_DATA_TEMP TEMPFILE 'D:\TEMP0111.DBF' 
              SIZE 50M REUSE AUTOEXTEND 
              ON NEXT  1024K MAXSIZE  16383M EXTENT MANAGEMENT LOCAL UNIFORM 
              SIZE 1024K


          --增加數據文件

          ALTER TABLESPACE  USER_DATA
            ADD DATAFILE 'c:\USERS01113.DBF' SIZE 50M;

          ALTER TABLESPACE USER_DATA
            ADD DATAFILE 'c:\USERS01114.DBF'  SIZE 50M
            AUTOEXTEND ON
          ;


          --刪除表空間

          DROP TABLESPACE USER_DATA INCLUDING CONTENTS;


          --修改數據文件大小
           ALTER DATABASE
           DATAFILE 'c:\USERS01113.DBF' RESIZE 40M;

          --創建用戶、賦予權限

          CREATE USER USER_DATA PROFILE DEFAULT IDENTIFIED BY  USER_DATA 
              DEFAULT 
              TABLESPACE USER_DATA  TEMPORARY 
              TABLESPACE USER_DATA  ACCOUNT UNLOCK;
           
          GRANT CONNECT TO USER_DATA;
          GRANT RESOURCE TO USER_DATA;

          --把表移到另一個表空間
          ALTER TABLE TABLENAME MOVE TABLESPACE TABLESPACENAME;

          --創建索引

          CREATE INDEX INDEXNAME ON TABLENAME(COLUMNNAME);

          CREATE INDEX INDEXNAME ON TABLENAME(COLUMNNAME) TABLESPACE TABLESPACENAME;

          --重新建立索引

          ALTER INDEX INDEXNAME REBUILD TABLESPACE  TABLESPACE;


          --創建表

          CREAE TABLE TABLENAME
          (COLUMN1 COLUTYPE DEFAULT(VALUE) NOT NULL)
          (COLUMN2 COLUTYPE DEFAULT(VALUE) NOT NULL);


          --建表的索引存儲分配


          CREATE TABLE summit.employee(id NUMBER(7) CONSTRAINT employee_id_pk PRIMARY KEY DEFERRABLE USING INDEX  STORAGE(INITIAL 100K NEXT 100K)
          TABLESPACE indx, 
          last_name VARCHAR2(25) CONSTRAINT employee_last_name_nn NOT NULL,
          dept_id NUMBER(7))
          TABLESPACE data;


          --建立主鍵

          ALTER TABLE TABLENAME
          ADD CONSTRAINT CONSTRAINTNAME PRIMARY KEY(COLUMN1,COLUMN2)


          --使約束無效

          ALTER TABLE TABLENAME ENABLE NOVALIDATE CONSTRAINT CONSTRANAME;

          ALTER TABLE TABLENAME ENABLE VALIDATE CONSTRAINT CONSTRANAME;

          --刪除約束

          ALTER TABLE TABLENAME  DROP CONSTRAINT constraintname;

          DROP TABLE TABLENAEM CASCADE CONSTRAINTS;(刪除表后將所用的外鍵刪除)

          --給表增加列

          ALTER TABLE TABLENAME
          ADD COLUMN COLUTYPE DEFAULT(VALUE) NOT NULL;

          --給列增加缺省值

          ALTER TABLE TABLENAME
          MODIFY COLUMNNAME  DEFAULT(VALUE) NOT NULL;


          --給表增加外鍵
           ALTER TABLE  TABLENAME
           ADD CONSTRAINT  CONSTRAINTNAME 
           FOREIGN KEY(COLUMN) REFERENCES TABLE1NAME(COLUMN1);

          1、分析表
          analyze table mzbs.db_code ESTIMATE STATISTICS SAMPLE 20 PERCENT;


          2、表空間管理和用戶管理

          --查看表空間和數據文件

          select file_name,tablespace_name,autoextensible from dba_data_files;

          --數據表空間

          CREATE TABLESPACE USER_DATA 
              LOGGING 
              DATAFILE 'D:\ORACLE\ORADATA\ORCL\test.DBF' SIZE 50m REUSE ,
                       'c:\USERS01112.DBF' SIZE 50m REUSE  
              AUTOEXTEND 
              ON NEXT  1280K MAXSIZE  16383M EXTENT MANAGEMENT LOCAL


          --修改表空間數據文件的路徑

          ALTER TABLESPACE app_data
            RENAME
              DATAFILE '/DISK4/app_data_01.dbf'
              TO   '/DISK5/app_data_01.dbf';


          ALTER DATABASE
            RENAME FILE '/DISK1/system_01.dbf'
              TO '/DISK2/system_01.dbf';


          --臨時表空間

          CREATE TEMPORARY 
              TABLESPACE  USER_DATA_TEMP TEMPFILE 'D:\TEMP0111.DBF' 
              SIZE 50M REUSE AUTOEXTEND 
              ON NEXT  1024K MAXSIZE  16383M EXTENT MANAGEMENT LOCAL UNIFORM 
              SIZE 1024K


          --增加數據文件

          ALTER TABLESPACE  USER_DATA
            ADD DATAFILE 'c:\USERS01113.DBF' SIZE 50M;

          ALTER TABLESPACE USER_DATA
            ADD DATAFILE 'c:\USERS01114.DBF'  SIZE 50M
            AUTOEXTEND ON
          ;


          --刪除表空間

          DROP TABLESPACE USER_DATA INCLUDING CONTENTS;

           

          --修改表空間的存儲參數

          ALTER TABLESPACE tablespacename 
            MINIMUM EXTENT 2M; 


          ALTER TABLESPACE tablespacename
            DEFAULT STORAGE (
              INITIAL 2M
              NEXT 2M
              MAXEXTENTS 999 );


          --表空間聯機/脫機/只讀

          ALTER TABLESPACE tablespacename OFFLINE/ONLINE/READ ONLY;

           

          --修改數據文件大小
           ALTER DATABASE
           DATAFILE 'c:\USERS01113.DBF' RESIZE 40M;

          --創建用戶、賦予權限

          CREATE USER USER_DATA PROFILE DEFAULT IDENTIFIED BY  USER_DATA 
              DEFAULT 
              TABLESPACE USER_DATA  TEMPORARY 
              TABLESPACE USER_DATA  ACCOUNT UNLOCK;
           
          GRANT CONNECT TO USER_DATA;
          GRANT RESOURCE TO USER_DATA;

           

          3、表的管理

          --創建表

          CREAE TABLE TABLENAME
          (COLUMN1 COLUTYPE DEFAULT(VALUE) NOT NULL)
          (COLUMN2 COLUTYPE DEFAULT(VALUE) NOT NULL);


          --建表的索引存儲分配


          CREATE TABLE summit.employee(id NUMBER(7) CONSTRAINT employee_id_pk PRIMARY KEY DEFERRABLE USING INDEX  STORAGE(INITIAL 100K NEXT 100K)
          TABLESPACE indx, 
          last_name VARCHAR2(25) CONSTRAINT employee_last_name_nn NOT NULL,
          dept_id NUMBER(7))
          TABLESPACE data;

          --修改表的存儲分配

          ALTER TABLE tablename
          PCTFREE 30
          PCTUSED 50
          STORAGE(NEXT 500K
          MINEXTENTS 2
          MAXEXTENTS 100);

          ALTER TABLE tablename
          ALLOCATE EXTENT(SIZE 500K
          DATAFILE '/DISK3/DATA01.DBF');

          --把表移到另一個表空間

          ALTER TABLE TABLENAME MOVE TABLESPACE TABLESPACENAME;


          --回收空閑的空間(回收到High-water mark)
            全部回收需要TRUNCATE TABLE tablename

          ALTER TABLE tablename
          DEALLOCATE UNUSED;

          --刪除表(連同所用constraint)

          DROP TABLE tablename
          CASCADE CONSTRAINTS;


          --給表增加列

          ALTER TABLE TABLENAME
          ADD COLUMN COLUTYPE DEFAULT(VALUE) NOT NULL;


          --刪除表中的列

          ALTER TABLE tablename
          DROP COLUMN columnname;


          ALTER TABLE tablename
          DROP COLUMN columnname
          CASCADE CONSTRAINTS CHECKPOINT 1000;


          --標記列不可用

          ALTER TABLE tablename
          SET UNUSED COLUMN columnname
          CASCADE CONSTRAINTS;

          --刪除標記為不可用的列

          ALTER TABLE tablename
          DROP UNUSED COLUMNS CHECKPOINT 1000;

          --繼續刪除列選項

          ALTER TABLE tablename
          DROP COLUMNS CONTINUE CHECKPOINT 1000;

          --把表放到BUFFER_POOL中去

          ALTER TABLE tablename
            STORAGE (BUFFER_POOL RECYCLE);

          --避免動態分配EXTENT

          ALTER TABLE tablename ALLOCATE EXTENT;


          --把表放到CACHE中去

          ALTER TABLE tablename ALLOCATE CACHE/NOCACHE;


          4、索引管理


          --創建索引

          CREATE INDEX indexname ON TABLENAME(COLUMNNAME);

          CREATE INDEX indexname ON TABLENAME(COLUMNNAME) TABLESPACE TABLESPACENAME;

          --重新建立索引

          ALTER INDEX indexname REBUILD TABLESPACE  TABLESPACE;


          --索引分配參數

          ALTER INDEX indexname
          STORAGE(NEXT 400K
           MAXEXTENTS 100);


          --釋放索引空間

          ALTER INDEX indexname
          ALLOCATE EXTENT (SIZE 200K
          DATAFILE '/DISK6/indx01.dbf');

          ALTER INDEX indexname
          DEALLOCATE UNUSED;

          --重新整理索引表空間碎片

          ALTER INDEX indexname COALESCE;

          --刪除索引

          DROP INDEX indexname


          --把索引放到BUFFER_POOL中

          ALTER INDEX cust_name_idx
            REBUILD
            STORAGE (BUFFER_POOL KEEP);


          5、約束管理


          --建立主鍵

          ALTER TABLE TABLENAME
          ADD CONSTRAINT CONSTRAINTNAME PRIMARY KEY(COLUMN1,COLUMN2)


          --使約束無效

          ALTER TABLE TABLENAME ENABLE NOVALIDATE CONSTRAINT constraintname;

          ALTER TABLE TABLENAME ENABLE VALIDATE CONSTRAINT constraintname;

          --刪除約束

          ALTER TABLE tablename  DROP CONSTRAINT constraintname;

          DROP TABLE tablename CASCADE CONSTRAINTS;(刪除表后將所用的外鍵刪除)


          --給列增加缺省值

          ALTER TABLE TABLENAME
          MODIFY columnname  DEFAULT(value) NOT NULL;


          --給表增加外鍵
           ALTER TABLE  tablename
           ADD CONSTRAINT  constraintname 
           FOREIGN KEY(column) REFERENCES table1name(column1);


          6、安全策略

          --加密傳輸

          把客戶端環境變量ora_encrypt_login設為true
          把服務器端參數dblink_encypt_login設為true

          --數據庫管理員安全策略

          a、建庫后立即修改SYS/SYSTEM的口令(9.2后必須修改其口令)
          b、只有數據庫管理員才能以SYSDBA登錄系統
          c、建立不同角色的管理員,分配不同的權限

             比如:對象創建于維護
                   數據庫的調整與維護
                   創建用戶分配角色
                   啟動關閉
                   恢復備份
                   
          --應用開發者的安全策略

          a、開發者的特權只能在測試開發的數據庫中賦予權限
          b、自由開發者、受控開發者
             自由開發者:create table\index\procedure\package
             受控開發者:沒有以上權限 


          7、日志文件管理

          --切換日志文件

          ALTER SYSTEM SWITCH LOGFILE;

          --增加日志文件

          ALTER DATABASE ADD LOGFILE 
          ('/DISK3/log3a.rdo',
          '/DISK4/log3b.rdo') size 1M;

          --增加日志成員

          ALTER DATABASE ADD LOGFILE MEMBER
          '/DISK4/log1b.rdo' TO GROUP 1
          '/DISK4/log2b.rdo' TO GROUP 2;

          --刪除日志文件

          ALTER DATABASE DROP LOGFILE GROUP 3;

          --刪除日志成員

          ALTER DATABASE DROP LOGFILE MEMBER '/DISK4/log2b.dbf';

          --清除日志文件內容

          ALTER DATABASE CLEAR LOGFILE '/DISK3/log2a.rdo';

          查找表以及表空間中的標的個數信息
          select owner, object_type, status, count(*) count# from all_objects where object_type='TABLE' and owner='HYQ' group by owner, object_type, status;

          posted on 2006-03-01 16:02 TrampEagle 閱讀(1433) 評論(0)  編輯  收藏 所屬分類: 技術文摘
          主站蜘蛛池模板: 武邑县| 和硕县| 镇坪县| 栾川县| 沈丘县| 自治县| 乌拉特后旗| 桦川县| 辉县市| 颍上县| 金华市| 故城县| 南部县| 福泉市| 米泉市| 邵东县| 青冈县| 大姚县| 肃南| 象州县| 井陉县| 临桂县| 黑河市| 罗平县| 科尔| 灌云县| 沂水县| 华坪县| 玛曲县| 太原市| 娱乐| 清水河县| 永康市| 常州市| 长岭县| 昂仁县| 南川市| 徐汇区| 五家渠市| 新乡市| 临安市|