【oracle11g,8】資料字典 和字元集,oracle11g字元集

來源:互聯網
上載者:User

【oracle11g,8】資料字典 和字元集,oracle11g字元集
一.資料字典:oracle的資料字典記錄了資料庫管理的中繼資料,他對於資料庫來說是生死攸關的核心檔案。1.資料字典放在system資料表空間,使用者是sys。2.描述資料庫和對象的定義,3..資料字典是唯讀。4.是server維護的,只能查詢。5.大部分由catalog.sql建立的。
通常所說的資料字典由四部分組成:內部 RDBMS(X$)表、資料字典表、動態效能(V$)視圖和資料字典視圖。

二. 資料字典組成:
1. 內部 RDBMS(X$)表 
X$表是 Oracle 資料庫的核心部分,這些表用於跟蹤內部資料庫資訊,鑑效組資料庫的正常運行。X$表是加密命名的,而且 Oracle 不作文檔說明,這部分知識是 Oracle 公司的技術機密,Oracle 通過這些 X$建立起其他大量視圖ᨀ供使用者查詢管理資料庫之用。但是由於 X$表記錄了大量有用的資訊,所以也不停的被全球 DBA 不懈的探索著,最為人所熟知的有:X$BH,X$KSMSP 等。
2. 資料字典表資料字典表(Data dictionary table)用以儲存表、索引、約束以及其他資料庫結構的資訊。這些對象通常以“$”結尾(例如 TAB$、OBJ$、TS$等),在建立資料庫的時候通過運行 sql.bsq指令碼來建立。

3.待用資料字典視圖 由於 X$表和資料字典表通常不能直接存取,Oracle 建立了待用資料字典視圖來ᨀ供使用者對於資料字典資訊的訪問,由於這些資訊通常相對穩定、不能直接修改,所以又被稱為待用資料字典視圖。資料字典視圖在建立資料庫時由 catalog.sql 指令碼(該指令碼位於$ORACLE_HOME/rdbms/admin/目錄下)建立。
①.待用資料字典視圖按照首碼的不同通常被分為三類: a.USER_  類別檢視包含了使用者所擁有的相關對象資訊,使用者可以通過這個視圖查詢自己擁有的對象資訊。 b.ALL_  類別檢視包含了使用者有許可權訪問的所有對象的資訊。 c.DBA_  類別檢視包含了資料庫所有相關對象的資訊,使用者需要 SELECT ANY TABLE 許可權才能訪問。 
②.常用資料字典視圖舉例 a.DICT / DICTIONARY 為了方便檢索, Oracle ᨀ供一個名為字典(DICTIONARY)的 視 圖 ,基 於 這 個 視 圖 , Oracle又建立了兩個名為 DICT 和 DICTIONARY 的同義字:
b.  DICT_COLUMNS 同 DICT 類似,DICT_COLUMNS 視圖記錄了字典視圖列(COLUMN)及其相關說明:

c.  OBJ$/DBA_OBJECTS/OBJ OBJ$是一個底層的字典表,其中記錄了資料庫中所有對象的資訊,DBA_OBJECTS 視圖基於 OBJ$建立,一脈相承的,ALL_OBJECTS 和 USER_OBJECTS 視圖也隨之建立。
4.動態效能檢視:
動態效能(V$)視圖(Dynamic Performance View)記錄了資料庫運行時資訊和統計資料,大部分動態效能檢視被即時更新以反映資料庫目前狀態。 Oracle 通過動態效能檢視將 Oracle 資料庫的狀態展示出來,提供給使用者和資料庫管理員,Oracle 對 V$視圖給出了詳細的文檔說明供開發管理員參考,是我們研究和管理資料庫的主要依據。 
①.GV$和 V$視圖 在資料庫啟動時,Oracle 動態建立 X$表,在此基礎之上,Oracle 建立了 GV$和 V$視圖。  從 Oracle8 開始,GV$視圖開始被引入,其含義為 Global V$。 除了一些特例以外,每個 V$視圖都有一個對應的 GV$視圖存在。  GV$視圖的產生是為了滿足 OPS/RAC 環境的需要,在 OPS/RAC 環境中,查詢 GV$視圖返回所有執行個體資訊,而每個 V$視圖是基於 GV$視圖,增加了 INST_ID 列的 WHERE 條件限制建立,只包含當前串連執行個體資訊。總結一下,Oracle 的 GV$視圖和 V$視圖是在資料庫建立過程中建立起來的,內建於資料庫中,Oracle 通過 v$fixed_view_definition 視圖為我們展現這些定義。
②.GV_$,V_$視圖和 V$,GV$同義字
在 GV$和 V$之後,Oracle 建立了 GV_$和 V_$視圖,隨後為這些視圖建立了公用同義字。這些工作都是通過 catalog.sql 指令碼(該指令碼位於$ORACLE_HOME/rdbms/admin/目錄下)實現的。 
從 catalog.sql 指令碼中摘錄一段: create or replace view v_$fixed_table as select * from v$fixed_table; create or replace public synonym v$fixed_table for v_$fixed_table;  create or replace view gv_$fixed_table as select * from gv$fixed_table; create or replace public synonym gv$fixed_table for gv_$fixed_table; 
實際上通常大部分使用者訪問的 V$對象,並不是視圖,而是指向 V_$視圖的同義字;而 V_$視圖是基於真正的 V$視圖(這個視圖是基於 X$表建立的)建立的。 
5.動態效能檢視與資料庫啟動由於動態效能檢視是在資料庫啟動過程中自動建立的,所以在資料庫啟動的不同階段,我們能夠訪問的視圖也各不相同。①. 在 Nomount 階段 當資料庫啟動到 nomount 狀態時,實際上僅僅啟動了資料庫執行個體,此時的執行個體資訊主要來自參數檔案,因此和參數檔案記錄的相關資訊可以查詢,以下是這一階段可以擷取資訊的主要視圖: V$PARAMETER、V$SPPARAMETER V$SGA、V$SGASTAT、V$BH、V$INSTANCE V$OPTION、V$VERSION V$PROCESS、V$SESSION ②. 在 Mount 階段 當資料庫啟動到 Mount 狀態時,控制檔案被讀取,和控制檔案相關的視圖此時可以進行查詢,以下是這一階段可以擷取資訊的主要視圖: V$THREAD、V$CONTROLFILE、V$DATABASE、 V$DATAFILE、V$LOGFILE、V$DATAFILE_HEADER 
③. 在 Open 階段 當資料庫 Open 之後,所有的動態效能檢視和資料字典都可以被查詢。 



二.資料字典裡的同義字:
SQL> select file#,name from v$datafile; (同義字)     FILE# NAME---------- --------------------------------------------------         1 /u01/app/oracle/oradata/prod/disk3/system01.dbf         2 /u01/app/oracle/oradata/prod/disk3/sysaux01.dbf         3 /u01/app/oracle/oradata/prod/disk3/undotbs01.dbf         4 /u01/app/oracle/oradata/prod/disk3/users01.dbf
SQL> select file#,name from v_$datafile;
     FILE# NAME---------- --------------------------------------------------         1 /u01/app/oracle/oradata/prod/disk3/system01.dbf         2 /u01/app/oracle/oradata/prod/disk3/sysaux01.dbf         3 /u01/app/oracle/oradata/prod/disk3/undotbs01.dbf         4 /u01/app/oracle/oradata/prod/disk3/users01.dbf

三.模糊查詢檢視名稱select * from dictionary where table_name like 'DBA';

四.資料字典的視圖:(重點)
資料字典視圖的分類,靜態(static)和動態(dynamic) 
1.動態視圖大部分在mount下就可以訪問,反映資料庫即時的狀態大部分v$開頭,多用單數,從控制檔案和記憶體匯總讀出。從v$fixed_table 這個視圖查到所有的動態視圖的名稱。用於調優和資料庫監控。v$_單數   單一實例的動態視圖。Gv$_單數  rac環境的動態視圖

SQL> select count(*) from v$fixed_table;
  COUNT(*)----------      1396
常用靜態視圖:select name from v$tablespace;select file#,name from v$datafiles;select * from v$log;select * from v$logfile;select name from v$archived_log;


2.靜態視圖在資料庫的open狀態下訪問,用於瞭解資料庫的物理結構資訊。大部分以dba、all、user開頭,並用複數形式user_:儲存目前使用者所擁有的對象的相關資訊all_:儲存目前使用者能夠訪問的對象dba_:儲存所有使用者物件的資訊(預設只能有sys/system使用者訪問)
例: 查看區資訊select segment_name ,segment_type,tablespace_name, bytes/1024 k,extents,blocks from dba_segments;#查看資料檔案SQL> select file_id,file_name,tablespace_name,bytes/1024/1024 m from dba_data_files;



五.字元集:














oracle資料庫中有什字元集,字元集之間的子集與超集關係是怎的?

理解ORACLE資料庫字元集

一.引言

ORACLE資料庫字元集,即Oracle全球化支援(Globalization Support),或即國家語言支援(NLS)其作用是用本國語言和格式來儲存、處理和檢索資料。利用全球化支援,ORACLE為使用者提供自己熟悉的資料庫母語環境,諸如日期格式、數字格式和儲存序列等。Oracle可以支援多種語言及字元集,其中oracle8i支援48種語言、76個國家地區、229種字元集,而oracle9i則支援57種語言、88個國家地區、235種字元集。由於oracle字元集種類多,且在儲存、檢索、遷移oracle資料時多個環節與字元集的設定密切相關,因此在實際的應用中,資料庫開發和管理員經常會遇到有關oracle字元集方面的問題。本文通過以下幾個方面闡述,對oracle字元集做簡要分析

二.字元集基本知識

2.1字元集
實質就是按照一定的字元編碼方案,對一組特定的符號,分別賦予不同數值編碼的集合。Oracle資料庫最早支援的編碼方案是US7ASCII。
Oracle 的字元集命名遵循以下命名規則 :

即: <語言><位元位元><編碼 >
比如: ZHS16GBK表示採用GBK編碼格式、16位(兩個位元組)簡體中文字元集

2.2字元編碼方案
2.2.1 單位元組編碼
(1)單位元組7位字元集,可以定義128個字元,最常用的字元集為 US7ASCII
(2)單位元組8位字元集,可以定義256個字元,適合於歐洲大部分國家
例如:WE8ISO8859P1(西歐、8位、ISO標準8859P1編碼 )
2.2.2 多位元組編碼
(1)變長多位元組編碼
某些字元用一個位元組表示,其它字元用兩個或多個字元表示,變長多位元組編碼常用於對亞洲語言的支援, 例如日語、漢語、印地語等
例如:AL32UTF8(其中AL代表ALL,指適用於所有語言)、 zhs16cgb231280
(2)定長多位元組編碼
每一個字元都使用固定長度位元組的編碼方案,目前oracle唯一支援的定長多位元組編碼是AF16UTF16,也是僅用於國家字元集
2.2.3 unicode 編碼
Unicode 是一個涵蓋了目前全世界使用的所有已知字元的單一編碼方案,也就是說Unicode為每一個字元提供唯一的編碼。UTF-16是unicode的16位編碼方式,是一種定長多位元組編碼,用2個位元組表示一個unicode字元,AF16UTF16是UTF-16編碼字元集。
UTF-8 是unicode的8位編碼方式,是一種變長多位元組編碼,這種編碼可以用1、2、3個位元組表示一個unicode字元,AL32UTF8,UTF8、UTFE是UTF-8編碼字元集

2.3 字元集超級
當一種字元集(字元集A)的編碼數值包含所有另一種字元集(字元集B)的編碼數值,並且兩種字元集相同編碼數值代表相同的字元時,則字元集A是字元集B的超級,或稱字元集B是字元集A的子集。
Oracle8i 和oracle9i官方文檔資料中備有子集-超級對照表(subset-superset pairs),例如:WE8ISO8859P1是WE8MSWIN1252的子集。由於US7ASCII是最早的Oracle資料庫編碼格式,因此有許多字元集是US7ASCII的超集,例如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是U......餘下全文>>
 
怎將Oracle原有字元集AL32UTF8更改為ZHS16GBK

1、修改server端字元集(不建議使用)

  在oracle 8之前,可以用直接修改資料字典表props$來改變資料庫的字元集。但oracle8之後,至少有三張系統資料表記錄了資料庫字元集的資訊,只改props$表並不完全,可能引起嚴重的後果。正確的修改方法如下:

  $sqlplus /nolog

  SQL>conn / as sysdba;

以上方法測試不行,用scott/tiger登陸sqlplus然後connect sys/sys as sysdba,然後輸入命令即可

  若此時資料庫伺服器已啟動,則先執行SHUTDOWN IMMEDIATE命令關閉資料庫伺服器,然後執行以下命令:

  SQL>STARTUP MOUNT;

  SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

  SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

  SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

  SQL>ALTER DATABASE OPEN;

  SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; //跳過超子集檢測

  SQL>ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;

這一行不起作用,執行後出錯ORA-00933: SQL 命令未正確結束,不過執行上一行命令已經生效,其他文章裡未提到本行。

  SQL>SHUTDOWN IMMEDIATE;

  SQL>STARTUP

  
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.