如何查询oracle数据库中的所有用户名

如何查询oracle数据库中的所有用户名,第1张

数据字典

select

from

dba_users;

查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system

select

from

all_users;

查看你能管理的所有用户!

select

from

user_users;

查看当前用户信息

数据字典在需求分析阶段被建立。

数据字典是一个预留空间,一个数据库,这是用来储存信息数据库本身。

数据字典可能包含的信息,例如:

数据库设计资料

储存的SQL程序

用户权限

用户统计

数据库的过程中的信息

数据库增长统计

数据库性能统计

数据字典则是系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果。

数据字典通常包括数据项\数据结构\数据流\数据存储和处理过程五个部分。

其中数据项是数据的最小组成单位若干个数据项可以组成一个数据结构数据字典通过对数据项和数据结构的 定义来描述数据流、数据存储的逻辑内容。

数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合

数据字典还有另一种含义,是在数据库设计时用到的一种工具,用来描述数据库中基本表的设计,主要包括字段名、数据类型、主键、外键等描述表的属性的内容。

以Oracle数据库字典为例:数据字典分为数据字典表和数据字典视图

Oracle数据库字典通常是在创建和安装数据库时被创建的,Oracle数据字典是Oracle数据库系统工作的基础,没有数据字典的支持,Oracle数据库系统就不能进行任何工作。数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。

数据字典表里的数据是Oracle系统存放的系统数据,而普通表存放的是用户的数据。为了方便的区别这些表,这些表的名字都是用$结尾,这些表属于SYS用户。

数据字典表由$ORACLE_HOME/rdbms/admin/sqlbsq 脚本创建, 这个脚本里又调用了其他的脚本来创建这些数据字典表。 在那些创建脚本里有基表的创建SQL。

Oracle 对数据字典表的说明:

These underlying tables store information about the database Only Oracle Database should write to and read these tables Users rarely access the base tables directly because they are normalized and most data is stored in a cryptic format

这些数据字典表,只有Oracle 能够进行读写。

SYS用户下的这些数据字典表,存放在system 表空间下面,表名都用$结尾,为了便于用户对数据字典表的查询, Oracle对这些数据字典都分别建立了用户视图,这样即容易记住,还隐藏了数据字典表表之间的关系,Oracle针对这些对象的范围,分别把视图命名为DBA_XXXX, ALL_XXXX和USER_XXXX。

数据字典视图分2类:静态数据字典(静态性能视图) 和 动态数据字典(动态性能视图)。

静态数据字典中的视图分为三类,它们分别由三个前缀构成:user_、 all_、 dba_。

user_:该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)

all_:该试图存储了当前用户能够访问的对象的信息, 而不是当前用户拥有的对象。(与user_相比,all_ 并不需要拥有该对象,只需要具有访问该对象的权限即可)

dba_:该视图存储了数据库中所有对象的信息。(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限)

这些视图由SYS用户创建的,所以使用需要加上SYS,为了方便, Oracle为每个数据字典表的视图头建立了同名字的公共同义词(public synonyms) 这样简单的处理就省去了写sys的麻烦。

除了静态数据字典中三类视图,其他的字典视图中主要的是V$视图,之所以这样叫是因为他们都是以V$或GV$开头的。这些视图会不断的进行更新,从而提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。

Throughout its operation, Oracle Database maintains a set of virtual tables that record current database activity These views are calleddynamic performance views because they are continuously updated while a database is open and in use The views, also sometimes calledV$ views。

V$视图是基于X$虚拟视图的。V$视图是SYS用户所拥有的,在缺省状况下,只有SYS用户和拥有DBA系统权限的用户可以看到所有的视图,没有DBA权限的用户可以看到USER_和ALL_视图,但不能看到DBA_视图。与DBA_,ALL,和USER_视图中面向数据库信息相反,这些视图可视的给出了面向实例的信息。

动态性能表用于记录当前数据库的活动,只存于数据库运行期间,实际的信息都取自内存和控制文件。 DBA可以使用动态视图来监视和调节数据。

理解ORACLE数据库字符集

一.引言

ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储、处理和检索数据。利用全球化支持,ORACLE为用户提供自己熟悉的数据库母语环境,诸如日期格式、数字格式和存储序列等。Oracle可以支持多种语言及字符集,其中oracle8i支持48种语言、76个国家地域、229种字符集,而oracle9i则支持57种语言、88个国家地域、235种字符集。由于oracle字符集种类多,且在存储、检索、迁移oracle数据时多个环节与字符集的设置密切相关,因此在实际的应用中,数据库开发和管理人员经常会遇到有关oracle字符集方面的问题。本文通过以下几个方面阐述,对oracle字符集做简要分析

二.字符集基本知识

21字符集

实质就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。Oracle数据库最早支持的编码方案是US7ASCII。

Oracle 的字符集命名遵循以下命名规则 :

即: <语言><比特位数><编码 >

比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集

22字符编码方案

221 单字节编码

(1)单字节7位字符集,可以定义128个字符,最常用的字符集为 US7ASCII

(2)单字节8位字符集,可以定义256个字符,适合于欧洲大部分国家

例如:WE8ISO8859P1(西欧、8位、ISO标准8859P1编码 )

222 多字节编码

(1)变长多字节编码

某些字符用一个字节表示,其它字符用两个或多个字符表示,变长多字节编码常用于对亚洲语言的支持, 例如日语、汉语、印地语等

例如:AL32UTF8(其中AL代表ALL,指适用于所有语言)、 zhs16cgb231280

(2)定长多字节编码

每一个字符都使用固定长度字节的编码方案,目前oracle唯一支持的定长多字节编码是AF16UTF16,也是仅用于国家字符集

223 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编码字符集

23 字符集超级

当一种字符集(字符集A)的编码数值包含所有另一种字符集(字符集B)的编码数值,并且两种字符集相同编码数值代表相同的字符时,则字符集A是字符集B的超级,或称字符集B是字符集A的子集。

Oracle8i 和oracle9i官方文档资料中备有子集-超级对照表(subset-superset pairs),例如:WE8ISO8859P1是WE8MSWIN1252的子集。由于US7ASCII是最早的Oracle数据库编码格式,因此有许多字符集是US7ASCII的超集,例如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集。

24 数据库字符集(oracle服务器端字符集)

数据库字符集在创建数据库时指定,在创建后通常不能更改。在创建数据库时,可以指定字符集(CHARACTER SET)和国家字符集(NATIONAL CHARACTER SET)。

241 字符集

(1) 用来存储CHAR, VARCHAR2, CLOB, LONG等类型数据

(2) 用来标示诸如表名、列名以及PL/SQL变量等

(3) 用来存储SQL和PL/SQL程序单元等

242 国家字符集:

(1) 用以存储NCHAR, NVARCHAR2, NCLOB等类型数据

(2) 国家字符集实质上是为oracle选择的附加字符集,主要作用是为了增强oracle的字符处理能力,因为NCHAR数据类型可以提供对亚洲使用定长多字节编码的支持,而数据库字符集则不能。国家字符集在oracle9i中进行了重新定义,只能在unicode编码中的AF16UTF16和UTF8中选择,默认值是 AF16UTF16

243查询字符集参数

可以查询以下数据字典或视图查看字符集设置情况

nls_database_parameters 、props$、 v$nls_parameters

查询结果中NLS_CHARACTERSET表示字符集,NLS_NCHAR_CHARACTERSET表示国家字符集

244 修改数据库字符集

按照上文所说,数据库字符集在创建后原则上不能更改。如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换,或通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。

25 客户端字符集(NLS_LANG参数)

251 客户端字符集含义

客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用,例如sqlplus,exp/imp等。客户端字符集是通过设置NLS_LANG参数来设定的。

252 NLS_LANG 参数格式

NLS_LANG=_

Language: 显示oracle消息,校验,日期命名

Territory :指定默认日期、数字、货币等格式

Client character set :指定客户端将使用的字符集

例如: NLS_LANG=AMERICAN_AMERICAUS7ASCII

AMERICAN是语言,AMERICA是地区,US7ASCII是客户端字符集

253 客户端字符集设置方法

1)UNIX 环境

$NLS_LANG=“simplified chinese”_chinazhs16gbk

$export NLS_LANG

编辑oracle用户的profile文件

2)Windows 环境

编辑注册表

Regeditexe---HKEY_LOCAL_MACHINE---SOFTWARE---ORACLE—HOME0

254 NLS 参数查询

Oracle 提供若干NLS参数定制数据库和用户机以适应本地格式,例如有NLS_LANGUAGE,NLS_DATE_FORMAT,NLS_CALENDER等,可以通过查询以下数据字典或v$视图查看。

NLS_DATABASE_PARAMETERS-- 显示数据库当前NLS参数取值,包括数据库字符集取值

NLS_SESSION_PARAMETERS-- 显示由NLS_LANG 设置的参数,或经过alter session 改变后的参数值(不包括由NLS_LANG 设置的客户端字符集)

NLS_INSTANCE_PARAMETE-- 显示由参数文件initora 定义的参数V$NLS_PARAMETERS--显示数据库当前NLS参数取值

255 修改NLS参数

使用下列方法可以修改NLS参数

(1)修改实例启动时使用的初始化参数文件

(2)修改环境变量 NLS_LANG

(3)使用ALTER SESSION语句,在oracle会话中修改

(4)使用某些SQL函数

NLS 作用优先级别:Sql function>alter session>环境变量或注册表>参数文件>数据库默认参数

三.导入/导出与字符集转换

31 EXP/IMP

Export 和 Import 是一对读写Oracle数据的工具。Export 将 Oracle 数据库中的数据输出到 *** 作系统文件中, Import 把这些文件中的数据读到Oracle 数据库中,由于使用exp/imp进行数据迁移时,数据从源数据库到目标数据库的过程中有四个环节涉及到字符集,如果这四个环节的字符集不一致,将会发生字符集转换。

EXP

____________ _________________ _____________

|imp导入文件|<-><->

------------ ----------------- -------------

IMP

____________ _________________ _____________

|imp导入文件|->|环境变量NLS_LANG|->|数据库字符集|

------------ ----------------- -------------

四个字符集是

(1)源数据库字符集

(2)Export过程中用户会话字符集(通过NLS_LANG设定)

(3)Import过程中用户会话字符集(通过NLS_LANG设定)

(4)目标数据库字符集

32导出的转换过程

在Export过程中,如果源数据库字符集与Export用户会话字符集不一致,会发生字符集转换,并在导出文件的头部几个字节中存储Export用户会话字符集的ID号。在这个转换过程中可能发生数据的丢失。

例:如果源数据库使用ZHS16GBK,而Export用户会话字符集使用US7ASCII,由于ZHS16GBK是16位字符集,而US7ASCII是7位字符集,这个转换过程中,中文字符在US7ASCII中不能够找到对等的字符,所以所有中文字符都会丢失而变成“ ”形式,这样转换后生成的Dmp文件已经发生了数据丢失。

因此如果想正确导出源数据库数据,则Export过程中用户会话字符集应等于源数据库字符集或是源数据库字符集的超集

33导入的转换过程

(1)确定导出数据库字符集环境

通过读取导出文件头,可以获得导出文件的字符集设置

(2)确定导入session的字符集,即导入Session使用的NLS_LANG环境变量

(3)IMP读取导出文件

读取导出文件字符集ID,和导入进程的NLS_LANG进行比较

(4)如果导出文件字符集和导入Session字符集相同,那么在这一步骤内就不需要转换,如果不同,就需要把数据转换为导入Session使用的字符集。可以看出,导入数据到数据库过程中发生两次字符集转换

第一次:导入文件字符集与导入Session使用的字符集之间的转换,如果这个转换过程不能正确完成,Import向目标数据库的导入过程也就不能完成。

第二次:导入Session字符集与数据库字符集之间的转换。

然而,oracle8i的这种转换只能在单字节字符集之间进行,oracle8i导入Session不支持多字节字符集之间的转换,因此为了避免第一次转换,导入Session使用的NLS_LANG与导出文件字符集相同,第二次转换(通过SQLNet)支持任何两种字符集。以上情况在Oracle9i中略有不同

四.乱码问题

oracle在数据存储、迁移过程中经常发生字符乱码问题,归根到底是由于字符集使用不当引起。下面以使用客户端sqlplus向数据库插入数据和导入/导出(EXP/IMP)过程为例,说明乱码产生的原因。

41使用客户端sqlplus向数据库存储数据

这个过程存在3个字符集设置

(1)客户端应用字符集

(2)客户端NLS_LANG参数设置

(3)服务器端数据库字符集(Character Set)设置

客户端应用sqlplus中能够显示什么样的字符取决于客户端 *** 作系统语言环境(客户端应用字符集),但在应用中录入这些字符后,这些字符能否在数据库中正常存储,还与另外两个字符集设置紧密相关,其中客户端NLS_LANG参数主要用于字符数据传输过程中的转换判断。常见的乱码大致有两种情形:

(1)汉字变成问号“?”;

当从字符集A 转换成字符集B时,如果转换字符之间不存在对应关系,NLS_LANG使用替代字符“?”替代无法映射的字符

(2)汉字变成未知字符(虽然有些是汉字,但与原字符含义不同)

转换存在对应关系,但字符集A 中的字符编码与字符集B 中的字符编码代表不同含义

42发生乱码原因

乱码产生是由于几个字符集之间转换不匹配造成,分以下几种情况:

(注:字符集之间如果不存在子集、超集对应关系时的情况不予考虑,因为这种情况下字符集之间转换必产生乱码)

1)服务器端数据库字符集与客户端应用字符集相同,与客户端NLS_LANG参数设置不同

如果客户端NLS_LANG字符集是其它两种字符集的子集,转换过程将出现乱码。

解决方法:将三种字符集设置成同一字符集,或NLS_LANG字符集是其它两种字符集的超集

2 )服务器端数据库字符集与客户端NLS_LANG参数设置相同,与客户端应用字符集不同

如果客户端应用字符集是其它两种字符集的超集时,转换过程将出现乱码,但对于单字节编码存储中文问题,可参看本文第5章节的分析

3 )客户端应用字符集、客户端NLS_LANG参数设置、服务器端数据库字符集互不相同

此种情况较为复杂,但三种字符集之间只要有不能转换的字符,则必产生乱码

43导入/导出过程出现乱码原因

这个过程存在4个字符集设置,在31章节中已分析

(1)源数据库字符集

(2)EXP过程中NLS_LANG参数

(3)IMP过程中NLS_LANG参数

(4)目标数据库字符集

出现乱码原因

1 )当源数据库字符集不等于EXP过程中NLS_LANG参数,且源数据库字符集是EXP过程中NLS_LANG的子集,才能保证导出文件正确,其他情况则导出文件字符乱码

2 )EXP过程中NLS_LANG字符集不等于IMP过程中NLS_LANG字符集,且EXP过程中NLS_LANG字符集是IMP过程中NLS_LANG字符集的子级, 才能保证第一次转换正常,否则第一次转换中出现乱码。

3 )如果第一次转换正常,IMP过程中NLS_LANG字符集是目标数据库字符集的子集或相同,才能保证第二次转换正常,否则则第二次转换中出现乱码

五.单字节编码存储中文问题

由于历史的原因,早期的oracle没有中文字符集(如oracle6、oracle7、oracle71),但有的用户从那时起就使用数据库了,并用US7ASCII字符集存储了中文,或是有的用户在创建数据库时,不考虑清楚,随意选择一个默认的字符集,如WE8ISO8859P1或US7ASCII,而这两个字符集都没有汉字编码,虽然有些时候选用这种字符集好象也能正常使用,但用这种字符集存储汉字信息从原则上说就是错误的,它会给数据库的使用与维护带来一系列的麻烦。

正常情况下,要将汉字存入数据库,数据库字符集必须支持中文,而将数据库字符集设置为US7ASCII等单字节字符集是不合适的。US7ASCII字符集只定义了128个符号,并不支持汉字。另外,如果在SQLPLUS中能够输入中文, *** 作系统缺省应该是支持中文的,但如果在NLS_LANG中的字符集设置为US7ASCII,显然也是不正确的,它没有反映客户端的实际情况。但在实际应用中汉字显示却是正确的,这主要是因为Oracle检查数据库与客户端的字符集设置是同样的,那么数据在客户与数据库之间的存取过程中将不发生任何转换,但是这实际上导致了数据库标识的字符集与实际存入的内容是不相符的。而在SELECT的过程中,Oracle同样检查发现数据库与客户端的字符集设置是相同的,所以它也将存入的内容原封不动地传送到客户端,而客户端 *** 作系统识别出这是汉字编码所以能够正确显示。

在这个例子中,数据库与客户端都没有设置成中文字符集,但却能正常显示中文,从应用的角度看好象没问题。然而这里面却存在着极大的隐患,比如在应用length或substr等字符串函数时,就可能得到意外的结果。

对于早期使用US7ASCII字符集数据库的数据迁移到oracle8i/9i中(使用zhs16gbk),由于原始数据已经按照US7ASCII格式存储,对于这种情况,可以通过使用Oracle8i的导出工具,设置导出字符集为US7ASCII,导出后使用UltraEdit等工具打开dmp文件,修改第二、三字符,修改 0001 为0354,这样就可以将US7ASCII字符集的数据正确导入到ZHS16GBK的数据库中。

六.结束语

为了避免在数据库迁移过程中由于字符集不同导致的数据损失,oracle提供了字符集扫描工具(character set scanner),通过这个工具我们可以测试在数据迁移过程中由于字符集转换可能带来的问题,然后根据测试结果,确定数据迁移过程中最佳字符集解决方案。

参考文献

[1]Biju Thomas , Bob Bryla 《oracle9i DBA基础I 学习指南》电子工业出版社 2002

以上就是关于如何查询oracle数据库中的所有用户名全部的内容,包括:如何查询oracle数据库中的所有用户名、数据字典的分类、oracle数据库中有哪些字符集,字符集之间的子集和超集关系是怎么样的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9873720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存