[Q]Oracle有哪些常見(jiàn)關(guān)鍵字,不能被用于對象名 [A]以8i版本為例,一般保留關(guān)鍵字不能用做對象名 ACCESS ADD ALL ALTER AND ANY AS ASC AUDIT BETWEEN BY CHAR CHECK CLUSTER COLUMN COMMENT COMPRESS CONNECT CREATE CURRENT DATE DECIMAL DEFAULT DELETE DESC DISTINCT DROP ELSE EXCLUSIVE EXISTS FILE FLOAT FOR FROM GRANT GROUP HAVING IDENTIFIED IMMEDIATE IN INCREMENT INDEX INITIAL INSERT INTEGER INTERSECT INTO IS LEVEL LIKE LOCK LONG MAXEXTENTS MINUS MLSLABEL MODE MODIFY NOAUDIT NOCOMPRESS NOT NOWAIT NULL NUMBER OF OFFLINE ON ONLINE OPTION OR ORDER PCTFREE PRIOR PRIVILEGES PUBLIC RAW RENAME RESOURCE REVOKE ROW ROWID ROWNUM ROWS SELECT SESSION SET SHARE SIZE SMALLINT START SUCCESSFUL SYNONYM SYSDATE TABLE THEN TO TRIGGER UID UNION UNIQUE UPDATE USER VALIDATE valueS VARCHAR VARCHAR2 VIEW WHENEVER WHERE WITH 詳細信息可以查看v$reserved_words視圖
[Q]怎么查看數據庫版本 [A]select * from v$version 包含版本信息,核心版本信息,位數信息(32位或64位)等 至于位數信息,在linux/unix平臺上,可以通過(guò)file查看,如 file $ORACLE_HOME/bin/oracle
[Q]怎么查看數據庫參數 [A]show parameter 參數名 如通過(guò)show parameter spfile可以查看9i是否使用spfile文件 或者select * from v$parameter 除了這部分參數,Oracle還有大量隱含參數,可以通過(guò)如下語(yǔ)句查看: SELECT NAME ,value ,decode(isdefault, ‘TRUE‘,‘Y‘,‘N‘) as "Default" ,decode(ISEM,‘TRUE‘,‘Y‘,‘N‘) as SesMod ,decode(ISYM,‘IMMEDIATE‘, ‘I‘, ‘DEFERRED‘, ‘D‘, ‘FALSE‘, ‘N‘) as SysMod ,decode(IMOD,‘MODIFIED‘,‘U‘, ‘SYS_MODIFIED‘,‘S‘,‘N‘) as Modified ,decode(IADJ,‘TRUE‘,‘Y‘,‘N‘) as Adjusted ,description FROM ( --GV$SYSTEM_PARAMETER SELECT x.inst_id as instance ,x.indx+1 ,ksppinm as NAME ,ksppity ,ksppstvl as value ,ksppstdf as isdefault ,decode(bitand(ksppiflg/256,1),1,‘TRUE‘,‘FALSE‘) as ISEM ,decode(bitand(ksppiflg/65536,3), 1,‘IMMEDIATE‘,2,‘DEFERRED‘,‘FALSE‘) as ISYM ,decode(bitand(ksppstvf,7),1,‘MODIFIED‘,‘FALSE‘) as IMOD ,decode(bitand(ksppstvf,2),2,‘TRUE‘,‘FALSE‘) as IADJ ,ksppdesc as DESCRIPTION FROM x$ksppi x ,x$ksppsv y WHERE x.indx = y.indx AND substr(ksppinm,1,1) = ‘_‘ AND x.inst_id = USERENV(‘Instance‘) ) ORDER BY NAME
[Q]怎么樣查看數據庫字符集 [A]數據庫服務(wù)器字符集select * from nls_database_parameters,其來(lái)源于props$,是表示數據庫的字符集。 客戶(hù)端字符集環(huán)境select * from nls_instance_parameters,其來(lái)源于v$parameter, 表示客戶(hù)端的字符集的設置,可能是參數文件,環(huán)境變量或者是注冊表 會(huì )話(huà)字符集環(huán)境 select * from nls_session_parameters,其來(lái)源于v$nls_parameters,表示會(huì )話(huà)自己的設置,可能是會(huì )話(huà)的環(huán)境變量或者是alter session完成,如果會(huì )話(huà)沒(méi)有特殊的設置,將與nls_instance_parameters一致。 客戶(hù)端的字符集要求與服務(wù)器一致,才能正確顯示數據庫的非Ascii字符。如果多個(gè)設置存在的時(shí)候,alter session>環(huán)境變量>注冊表>參數文件 字符集要求一致,但是語(yǔ)言設置卻可以不同,語(yǔ)言設置建議用英文。如字符集是zhs16gbk,則nls_lang可以是American_America.zhs16gbk。
[Q]怎么樣修改字符集 [A]8i以上版本可以通過(guò)alter database來(lái)修改字符集,但也只限于子集到超集,不建議修改props$表,將可能導致嚴重錯誤。 Startup nomount; Alter database mount exclusive; Alter system enable restricted session; Alter system set job_queue_process=0; Alter database open; Alter database character set zhs16gbk;
[Q]怎樣建立基于函數索引 [A]8i以上版本,確保 Query_rewrite_enabled=true Query_rewrite_integrity=trusted Compatible=8.1.0以上 Create index indexname on table (function(field));
[Q]怎么樣移動(dòng)表或表分區 [A]移動(dòng)表的語(yǔ)法 Alter table tablename move [Tablespace new_name Storage(initial 50M next 50M pctincrease 0 pctfree 10 pctused 50 initrans 2) nologging] 移動(dòng)分區的語(yǔ)法 alter table tablename move (partition partname) [update global indexes] 之后之后必須重建索引 Alter index indexname rebuild 如果表有Lob段,那么正常的Alter不能移動(dòng)Lob段到別的表空間,而僅僅是移動(dòng)了表段,可以采用如下的方法移動(dòng)Lob段 alter table tablename move lob(lobsegname) store as (tablespace newts);
[Q]怎么獲得當前的SCN [A]9i以下版本 select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe; 如果是9i以上版本,還可以通過(guò)以下語(yǔ)句獲取 select dbms_flashback.get_system_change_number from dual;
[Q]怎么樣獲取對象的DDL語(yǔ)句 [A]第三方工具就不說(shuō)了主要說(shuō)一下9i以上版本的dbms_metadata 1、獲得單個(gè)對象的DDL語(yǔ)句 set heading off set echo off set feedback off set pages off set long 90000 select dbms_metadata.get_ddl(‘TABLE‘,‘TABLENAME‘,‘SCAME‘) from dual; 如果獲取整個(gè)用戶(hù)的腳本,可以用如下語(yǔ)句 select dbms_metadata.get_ddl(‘TABLE‘,u.table_name) from user_tables u; 當然,如果是索引,則需要修改相關(guān)table到index
[Q]如何創(chuàng )建約束的索引在別的表空間上 [A]1、先創(chuàng )建索引,再創(chuàng )建約束 2、利用如下語(yǔ)句創(chuàng )建 create table test (c1 number constraint pk_c1_id primary key using index tablespace useridex, c2 varchar2(10) ) tablespace userdate;
[Q]怎么知道那些表沒(méi)有建立主鍵 [A]一般的情況下,表的主鍵是必要的,沒(méi)有主鍵的表可以說(shuō)是不符合設計規范的。 SELECT table_name FROM User_tables t WHERE NOT EXISTS (SELECT table_name FROM User_constraints c WHERE constraint_type = ‘P‘ AND t.table_name=c.table_name) 其它相關(guān)數據字典解釋 user_tables 表 user_tab_columns 表的列 user_constraints 約束 user_cons_columns 約束與列的關(guān)系 user_indexes 索引 user_ind_columns 索引與列的關(guān)系
[Q]dbms_output提示緩沖區不夠,怎么增加 [A]dbms_output.enable(20000); 另外,如果dbms_output的信息不能顯示, 需要設置 set serveroutput on
[Q]怎么樣修改表的列名 [A]9i以上版本可以采用rname命令 ALTER TABLE UserName.TabName RENAME COLUMN SourceColumn TO DestColumn 9i以下版本可以采用create table …… as select * from SourceTable的方式。 另外,8i以上可以支持刪除列了 ALTER TABLE UserName.TabName SET UNUSED (ColumnName) CASCADE CONSTRAINTS ALTER TABLE UserName.TabName DROP (ColumnName) CASCADE CONSTRAINTS
[Q]怎么樣快速下載Oracle補丁 [A]我們先獲得下載服務(wù)器地址,在http頁(yè)面上有 ftp://updates.oracle.com 然后用ftp登錄,用戶(hù)名與密碼是metalink的用戶(hù)名與密碼 如我們知道了補丁號3095277 (9204的補丁集),則 ftp> cd 3095277 250 Changed directory OK. ftp> ls 200 PORT command OK. 150 Opening data connection for file listing. p3095277_9204_AIX64-5L.zip p3095277_9204_AIX64.zip …… p3095277_9204_WINNT.zip 226 Listing complete. Data connection has been closed. ftp: 208 bytes received in 0.02Seconds 13.00Kbytes/sec. ftp> 知道了這個(gè)信息,我們用用flashget,網(wǎng)絡(luò )螞蟻就可以下載了。 添加如下連接 ftp://updates.oracle.com/3095277/p3...04_AIX64-5L.zip 或替換后面的部分為所需要的內容 注意,如果是flashget,網(wǎng)絡(luò )螞蟻請輸入認證用戶(hù)名及密碼,就是你的metalink的用戶(hù)名與密碼!
[Q]如何移動(dòng)數據文件 [A]1、關(guān)閉數據庫,利用os拷貝 a.shutdown immediate關(guān)閉數據庫 b.在os下拷貝數據文件到新的地點(diǎn) c.Startup mount 啟動(dòng)到mount下 d.Alter database rename datafile ‘老文件‘ to ‘新文件‘; e.Alter database open; 打開(kāi)數據庫 2、利用Rman聯(lián)機操作 RMAN> sql "alter database datafile ‘‘file name‘‘ offline"; RMAN> run { 2> copy datafile ‘old file location‘ 3> to ‘new file location‘; 4> switch datafile ‘ old file location‘ 5> to datafilecopy ‘ new file location‘; 6> } RMAN> sql "alter database datafile ‘‘file name‘‘ online"; 說(shuō)明:利用OS拷貝也可以聯(lián)機操作,不關(guān)閉數據庫,與rman的步驟一樣,利用rman與利用os拷貝的原理一樣,在rman中copy是拷貝數據文件,相當于OS的cp,而switch則相當于alter database rename,用來(lái)更新控制文件。
[Q]如果管理聯(lián)機日志組與成員 [A]以下是常見(jiàn)操作,如果在OPA/RAC下注意線(xiàn)程號 增加一個(gè)日志文件組 Alter database add logfile [group n] ‘文件全名‘ size 10M; 在這個(gè)組上增加一個(gè)成員 Alter database add logfile member ‘文件全名‘ to group n; 在這個(gè)組上刪除一個(gè)日志成員 Alter database drop logfile member ‘文件全名‘; 刪除整個(gè)日志組 Alter database drop logfile group n;
[Q]怎么樣計算REDO BLOCK的大小 [A]計算方法為(redo size + redo wastage) / redo blocks written + 16 具體見(jiàn)如下例子 SQL> select name ,value from v$sysstat where name like ‘%redo%‘; NAME value ---------------------------------------------------------------- ---------- redo synch writes 2 redo synch time 0 redo entries 76 redo size 19412 redo buffer allocation retries 0 redo wastage 5884 redo writer latching time 0 redo writes 22 redo blocks written 51 redo write time 0 redo log space requests 0 redo log space wait time 0 redo log switch interrupts 0 redo ordering marks 0 SQL> select (19412+5884)/51 + 16 ‘"Redo black(byte)" from dual; Redo black(byte) ------------------ 512
[Q]控制文件包含哪些基本內容 [A]控制文件主要包含如下條目,可以通過(guò)dump控制文件內容看到 DATABASE ENTRY CHECKPOINT PROGRESS RECORDS REDO THREAD RECORDS LOG FILE RECORDS DATA FILE RECORDS TEMP FILE RECORDS TABLESPACE RECORDS LOG FILE HISTORY RECORDS OFFLINE RANGE RECORDS ARCHIVED LOG RECORDS BACKUP SET RECORDS BACKUP PIECE RECORDS BACKUP DATAFILE RECORDS BACKUP LOG RECORDS DATAFILE COPY RECORDS BACKUP DATAFILE CORRUPTION RECORDS DATAFILE COPY CORRUPTION RECORDS DELETION RECORDS PROXY COPY RECORDS INCARNATION RECORDS
[Q]如果發(fā)現表中有壞塊,如何檢索其它未壞的數據 [A]首先需要找到壞塊的ID(可以運行dbverify實(shí)現),假設為<BID>,假定文件編碼為<FID>。運行下面的查詢(xún)查找段名: SELECT segment_name,segment_type,extent_id,block_id, blocks from dba_extents t where file_id = <FID> AND <BID> between block_id and (block_id + blocks - 1) 一旦找到壞段名稱(chēng),若段是一個(gè)表,則最好建立一個(gè)臨時(shí)表,存放好的數據。若段是索引,則刪除它,再重建。 create table good_table as select from bad_table where rowid not in (select rowid from bad_table where substr(rowid,10,6) = <BID> ) 在這里要注意8以前的受限ROWID與現在ROWID的差別。 還可以使用診斷事件10231 SQL> ALTER SYSTEM SET EVENTS ‘10231 trace name context forever,level 10‘; 創(chuàng )建一個(gè)臨時(shí)表good_table的表中除壞塊的數據都檢索出來(lái) SQL>CREATE TABLE good_table as select * from bad_table; 最后關(guān)閉診斷事件 SQL> ALTER SYSTEM SET EVENTS ‘10231 trace name context off ‘; 關(guān)于ROWID的結構,還可以參考dbms_rowid.rowid_create函數。
[Q]我創(chuàng )建了數據庫的所有用戶(hù),我可以刪除這些用戶(hù)嗎 [A]ORACLE數據庫創(chuàng )建的時(shí)候,創(chuàng )建了一系列默認的用戶(hù)和表空間,以下是他們的列表 ·SYS/CHANGE_ON_INSTALL or INTERNAL 系統用戶(hù),數據字典所有者,超級權限所有者(SYSDBA) 創(chuàng )建腳本:?/rdbms/admin/sql.bsq and various cat*.sql 建議創(chuàng )建后立即修改密碼 此用戶(hù)不能被刪除 ·SYSTEM/MANAGER 數據庫默認管理用戶(hù),擁有DBA角色權限 創(chuàng )建腳本:?/rdbms/admin/sql.bsq 建議創(chuàng )建后立即修改密碼 此用戶(hù)不能被刪除 ·OUTLN/OUTLN 優(yōu)化計劃的存儲大綱用戶(hù) 創(chuàng )建腳本:?/rdbms/admin/sql.bsq 建議創(chuàng )建后立即修改密碼 此用戶(hù)不能被刪除 --------------------------------------------------- ·SCOTT/TIGER, ADAMS/WOOD, JONES/STEEL, CLARK/CLOTH and BLAKE/PAPER. 實(shí)驗、測試用戶(hù),含有例表EMP與DEPT 創(chuàng )建腳本:?/rdbms/admin/utlsampl.sql 可以修改密碼 用戶(hù)可以被刪除,在產(chǎn)品環(huán)境建議刪除或鎖定 ·HR/HR (Human Resources), OE/OE (Order Entry), SH/SH (Sales History). 實(shí)驗、測試用戶(hù),含有例表EMPLOYEES與DEPARTMENTS 創(chuàng )建腳本:?/demo/schema/mksample.sql 可以修改密碼 用戶(hù)可以被刪除,在產(chǎn)品環(huán)境建議刪除或鎖定 ·DBSNMP/DBSNMP Oracle Intelligent agent 創(chuàng )建腳本:?/rdbms/admin/catsnmp.sql, called from catalog.sql 可以改變密碼--需要放置新密碼到snmp_rw.ora文件 如果不需要Intelligent Agents,可以刪除 --------------------------------------------------- 以下用戶(hù)都是可選安裝用戶(hù),如果不需要,就不需要安裝 ·CTXSYS/CTXSYS Oracle interMedia (ConText Cartridge)管理用戶(hù) 創(chuàng )建腳本:?/ctx/admin/dr0csys.sql ·TRACESVR/TRACE Oracle Trace server 創(chuàng )建腳本:?/rdbms/admin/otrcsvr.sql ·ORDPLUGINS/ORDPLUGINS Object Relational Data (ORD) User used by Time Series, etc. 創(chuàng )建腳本:?/ord/admin/ordinst.sql ·ORDSYS/ORDSYS Object Relational Data (ORD) User used by Time Series, etc 創(chuàng )建腳本:?/ord/admin/ordinst.sql ·DSSYS/DSSYS Oracle Dynamic Services and Syndication Server 創(chuàng )建腳本:?/ds/sql/dssys_init.sql ·MDSYS/MDSYS Oracle Spatial administrator user 創(chuàng )建腳本:?/ord/admin/ordinst.sql ·AURORA$ORB$UNAUTHENTICATED/INVALID Used for users who do not authenticate in Aurora/ORB 創(chuàng )建腳本:?/javavm/install/init_orb.sql called from ?/javavm/install/initjvm.sql ·PERFSTAT/PERFSTAT Oracle Statistics Package (STATSPACK) that supersedes UTLBSTAT/UTLESTAT 創(chuàng )建腳本:?/rdbms/admin/statscre.sql