【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全球化支持(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......余下全文>>
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