[Q]Oracle的有那些數據類型
  
  [A]常見的數據類型有
  
  CHAR固定長度字符域,最大長度可達2000個字節
  
  NCHAR多字節字符集的固定長度字符域,長度隨字符集而定,最多為2000個字符或2000個字節
  
                                                                                              VARCHAR2可變長度字符域,最大長度可達4000個字符
  
  NVARCHAR2多字節字符集的可變長度字符域,長度隨字符集而定,最多為4000個字符或4000個字節
  
  DATE用于存儲全部日期的固定長度(7個字節)字符域,時間作為日期的一
  
  部分存儲其中。除非通過設置init.ora文件的NLS_DATE_FORMAT
  
  參數來取代日期格式,否則查詢時,日期以DD-MON-YY格式表示,如13-APR-99表示1999.4.13
  
  NUMBER可變長度數值列,答應值為0、正數和負數。NUMBER值通常以4
  
  個字節或更少的字節存儲,最多21字節
  
  LONG可變長度字符域,最大長度可到2GB
  
  RAW表示二進制數據的可變長度字符域,最長為2000個字節
  
  LONGRAW表示二進制數據的可變長度字符域,最長為2GB
  
  MLSLABEL只用于TrustedOracle,這個數據類型每行使用2至5個字節
  
  BLOB二進制大對象,最大長度為4GB
  
  CLOB字符大對象,最大長度為4GB
  
  NCLOB多字節字符集的CLOB數據類型,最大長度為4GB
  
  BFILE外部二進制文件,大小由操作系統決定
  
  ROWID表示RowID的二進制數據,Oracle8RowID的數值為10個字節,在Oracle7中使用的限定
  
  RowID格式為6個字節
  
  UROWID用于數據尋址的二進制數據,最大長度為4000個字節
  
  [Q]Oracle有哪些常見要害字,不能被用于對象名
  
  [A]以8i版本為例,一般保留要害字不能用做對象名
  
  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平臺上,可以通過file查看,如
  
  file $ORACLE_HOME/bin/oracle
  
  [Q]怎么查看數據庫參數
  
  [A]show parameter 參數名
  
  如通過show parameter spfile可以查看9i是否使用spfile文件
  
  或者select * from v$parameter
  
  除了這部分參數,Oracle還有大量隱含參數,可以通過如下語句查看:
  
  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(ksppi***/256,1),1,'TRUE','FALSE') as ISEM
  ,decode(bitand(ksppi***/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]數據庫服務器字符集select * from nls_database_parameters,
  
  其來源于props$,是表示數據庫的字符集。
                         
  
  客戶端字符集環境select * from nls_instance_parameters,其來源
  
  于v$parameter,表示客戶端的字符集的設置,可能是參數文件,環境
  
  變量或者是注冊表會話字符集環境
  
  select * from nls_session_parameters,
  
  其來源于v$nls_parameters,表示會話自己的設置,可能是會話的環境
  
  變量或者是alter session完成,假如會話沒有非凡的設置,將與
  
  nls_instance_parameters一致。
  
  客戶端的字符集要求與服務器一致,才能正確顯示數據庫的非Ascii字符。
  
  假如多個設置存在的時候,alter session>環境變量>注冊表>參數文件
  
  字符集要求一致,但是語言設置卻可以不同,語言設置建議用英文。如字
  
  符集是zhs16gbk,則nls_lang可以是American_America.zhs16gbk。
  
  [Q]怎么樣修改字符集
  
  [A]8i以上版本可以通過alter database來修改字符集,但也只限于子集
  
  到超集,不建議修改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]怎么樣移動表或表分區
  
  [A]移動表的語法
  Alter table tablename move
  [Tablespace new_name
  Storage(initial 50M next 50M
  pctincrease 0 pctfree 10 pctused 50 initrans 2) nologging]
  移動分區的語法
  alter table tablename move (partition partname)
  [update global indexes]
  
  之后之后必須重建索引
  
  Alter index indexname rebuild假如表有Lob段,那么正常的Alter不能移動Lob段到別的表空間,而僅僅是移動了表段,可以采用如下的方法移動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以上版本,還可以通過以下語句獲取
  
  select dbms_Flashback.get_system_change_number from dual;
  
  [Q]ROWID的結構與組成
  
  [A]8以上版本的ROWID組成
  
  OOOOOOFFFBBBBBBRRR
  
  8以下ROWID組成(也叫受限Rowid)
  
  BBBBBBBB.RRRR.FFFF
  
  其中,O是對象ID,F是文件ID,B是塊ID,R是行ID
  
  假如我們查詢一個表的ROWID,根據其中塊的信息,可以知道該表確切
  
  占用了多少個塊,進而知道占用了多少數據空間(此數據空間不等于表的分配空間)
  
  [Q]怎么樣獲取對象的DDL語句
  
  [A]第三方工具就不說了主要說一下9i以上版本的dbms_metadata
  
  1、獲得單個對象的DDL語句
  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;
  
  假如獲取整個用戶的腳本,可以用如下語句
  
  select dbms_metadata.get_ddl('TABLE',u.table_name) from user_tables u;
  
  當然,假如是索引,則需要修改相關table到index
  
  [Q]如何創建約束的索引在別的表空間上
  
  [A]1、先創建索引,再創建約束
  
  2、利用如下語句創建
  
  create table test
  (c1 number constraint pk_c1_id primary keyusing index tablespace useridex,c2 varchar2(10)) tablespace userdate;