如何查询oracle中所有的schema名以及各个schema下的所有表名
发布时间:2025-05-23 01:06:31 发布人:远客网络
一、如何查询oracle中所有的schema名以及各个schema下的所有表名
1、如果是用该用户登录使用以下语句:
2、如果是用其他用户(在dba权限下):
3、FROM ALL_TABLES WHERE OWNER='USER_NAME'
4、select* from all_tab_comments--查询所有用户的表,视图等。
5、select* from user_tab_comments--查询本用户的表,视图等。
6、select* from all_col_comments--查询所有用户的表的列版名和权注释。
7、select* from user_col_comments--查询本用户的表的列名和注释。
8、select* from all_tab_columns--查询所有用户的表的列名等信息。
9、select* from user_tab_columns--查询本用户的表的列名等信息。
二、oracle数据库报1489
[url=http//ido.3mt.com.cn/Article/201408/show3831489c11p1.html]哪些海外院校认可高考成绩[/url]
很多人从别的数[url=http//bbs.17173.com/thread-8082687-1-1.html]哪些海外院校认可高考成绩[/url]据转来使用Oracl[url=http//wwwdocin.com/p-917045899.html]哪些海外院校认可高考成绩[/url]e时,会发现Orac[url=http//dzh.mop.com/47303747.html]去美国读本科[/url]自增长字段类型,而像[url=http//www.xici.net/d209781397.htm]如何去美国读研究生[/url]增长字段类型,而像mysql,sqlserver,db2等主流数据库都有对应的自增长字段类型,Oracle的官方解决方案是采用sequence实现,sequence比较灵活,可以指定增长间隔等参数,虽然最终可以实现与其它数据库一样的效果,但是本来一个简单的数据类型可能解决,在Oracle却需要增加一个sequence,insert的时候还需要用sequence.nextval才行,这个地方感觉特不方便,为了兼容Oracle数据库很通用系统还不得不自己设计自增长字段解决方案,比如增加一张专用表来保存自增长字段的表和字段名,每次新增记录时都把这个记录值加1再取出使用。
Oracle的安装是出名的复杂,特别是在非windows系统中,在网上可以找到遍地的Oracle安装文档,但依然有很多人花了大量时间才安装成功,如果要搭建rac系统,那就更复杂了。我们也看到Oracle公司也一直在降低安装的复杂度,11g的安装已经比8i,9i方便了一些。最让人费解的是Oracle非要搞一个java的安装界面,很多朋友都是因为java图形化界面的问题安装失败。我想Oracle是认为java的跨平台特性,选择了用java开发安装程序以统一界面,这样也不用开发多套软件,但是有没有发现我们在安装完后,服务器上使用Oracle数据库大部份管理都是命令行,几乎就没用到过图形化界面了。
Oracle安装其实可以做得更简单,操作系统变量及环境变量安装程序应该可以自动处理,软件包依赖检测可以人性化提示。在非windows系统上图形化是为了更方便安装,但是我感觉Oracle这图形化界面如果启动了我基本上也是点next,安装好了,库建好了再来修改相关参数。
join)在SQL标准语法中就有明确的定义,但是Oracle的语法确与标准完全不同,这个是历史原因了,没有左连接与右连接的概念,也不支持全外连接,Oracle语法如下所示:select
采用(+)来表示外连接,但是大部份人第一眼会认为这是一个右连接的语法,其实在Oracle中它相当于左连接,我直到现在还有时会搞错左右。好在Oracle9i中增加了标准外连接的语法支持。但是现在用Oracle数据库的人SQL大部份还是采用传统的语法,主要原因可能是传统语法已经习惯,传统语法更好用提示优化,SQL标准语法成熟度不够且还存在一些BUG等等。
看VARCHAR2这名字,还以为有新的VARCHAR类型,其实在Oracle中就这一种变长字符类型,为什么叫VARCHAR2我也不清楚,也许是历史原因吧,在Oracle也可以使用VARCHAR,但是VARCHAR只是VARCHAR2的一个同义词,而且在官方文档中还建议大家都用VARCHAR2,真是不明白了。
VARCHAR2类型的最大长度到11g中还是4000字节,这个上限不知道为什么这么小,很多需求都会超过4000,只能使用lob来管理,但是Oracle的lob比较复杂,性能也不好,所以有些系统甚至在一个表建多个varcahr2(4000)的字段来表示一个字段的内容。而其它数据库varchar类型的最大长度都比4000大,有8K,32K,还有64K的。
在10g以前NUMBER类型是Oracle唯一数值类型,可以用来表示整数和小数,范围也足够我们使用,Oracle也支持INTEGER语法,但是INTEGER只是NUMBER的一个同义词,不明白Oracle为什么没有专用的整数类型。NUMBER类型很灵活,但是存储空间很大,性能也不好,如果用4字节可以表示的整数,用NUMBER平均需要6字节存储,如果采用number类型做指数或对数运算,与标准的浮点数性能可能会相差50倍。好在Oracle10g中增加了高效的浮点类型binary_float,binary_double,从而弥补了浮点数性能的问题。Oracle在pl/sql语法中有专用的整形pls_integer,但是pls_integer不能做为字段的类型。
Oracle主要有两种日期类型,date和timestamp,从词面看以为是date表示日期,timestamp可以存储时间,但是实际是date类型可以表示日期和时间,timestamp可以存储更高精度的时间,为什么date不叫datetime算了,Oracle没有只保存日期的类型,如果我们的数据仅要保存日期,那2-4个字节就可以搞定了,但Oracle的date类型需要7个字节存储。
view在Oracle官方文档中好像是翻译为实体化视图,物化视图是国内的通用叫法。一提起视图脑海里立即会认为这只是视图的一种类型,在数据库中也只是一些定义,但是实际上materialized
view与普通视图关系不大,它更像是一个表,它是保存了实实在在的数据,并且可以与表一样定义存储参数,可以与表一样使用(select,insert,update,delete)。在其它数据库中也有和物化视图相似的解决方案,DB2叫物化查询表(materialized
table),sqlserver有索引视图,但是索引视图仅是起优化作用,与oracle的物化视图还不太一样。
schema的概念在很多数据库之间都没有统一的定位,有些数据库可以有多个database,每个database下面有多个schema,Oracle中的schema有点怪怪的,因为Oracle只有一个database的概念,所以schema就与其它数据库中的database有点类似,我们一般理解是schema(database)与用户没有直接关系,schema是逻辑概念,user是为了安全认证,只与权限有关,但Oracle用户与schema关系与其它数据库不一样,一个用户就对应一个schema,且不能更改,而且对schema的权限管理不方便,比如想让某个user可以访问另一个schema所有对像的权限就很麻烦。这种设计也是oracle特有的,估计Oracle也不会去改变。
装个客户端,给我个几百M大小的软件,有这么复杂吗,还有,为什么客户端安装好了还要做什么TNS配置,我直接提供数据库连接信息
(ip+port+dbname)不行吗。Oracle的TNS配置确实让开发人员头痛了很久,特别是那种要把C/S软件发布给客户端使用的场景,本来安装客户端就不方便,还要配置TNS,故障诊断时总是要检查一下TNS是否配置正确,不小心选错了TNS名连错了数据库导致误删除了数据的情况也时有发生。因为客户端软件的庞大,有些人还专门制做了只有几M或几十M的简易客户端安装软件,还有人开发了不需要客户端的插件,可以集成在软件里发布,可见Oracle的客户端安装配置不是一般人能接受的。好在现在很多应用都是B/S系统了,Oracle
DEVELOPER也不需要配置客户端,用jdbc连接Oracle仿佛世界清静了许多。
大部份数据库系统都会有一个比较官方全面的数据库管理工具,尤其是微软的产品,但是Oracle发展到现在自身的管理工具还是没有定型,8i用企业管理器,9i用JAVA重写了,10g用WEB重写了,现在11g官方推荐用Oracle
DEVELOPER做开发,用B/S架构的OEM做管理与监控。对于Oracle官方的开发管理工具,一直认为太不专业了,远没有其它第三方面工具好用,plsql
developer和toad应该是Oracle管理及开发人员用得最多的工具,其次就是sqlplus了。Oracle
DEVELOPER采用JAVA开发,很强大,可以用JDBC连接管理任何数据库,但是还是不专业,使用起来不方便。10g的OEM有一些公司开始用了,它的监控功能应该还是不错的,但是不能做开发管理,这个是产品定位的问题了。期待有一天Oracle能有一个像SQL
SERVER那个强大的开发及管理工具。
以上说的是个人认为Oracle一些不爽的地方,从9i到11g也可以看出Oracle在增强功能以外,系统易用性,数据类型性能方面一直在改进,但是还有很多提高的空间。这些并不影响Oracle成为当前最先进的关系型数据库系统,它的并发处理机制,锁管理,数据字典,性能监控与统计,提供多种优化方法,在线管理,RAC高可用性架构等地方是其它数据库短时还无法超越的。
三、oracle 数据库 是什么结构
Oracle数据库的体系结构包括四个方面:数据库的物理结构、逻辑结构、内存结构及进程。
物理数据库结构是由构成数据库的操作系统文件所决定,Oracle数据库文件包括:
数据文件用来存储数据库中的全部数据,例如数据库表中的数据和索引数据.通常以为*.dbf格式,例如:userCIMS.dbf。
日志文件用于记录数据库所做的全部变更(如增加、删除、修改)、以便在系统发生故障时,用它对数据库进行恢复。名字通常为Log*.dbf格式,如:Log1CIMS.dbf,Log2CIMS.dbf。
每个Oracle数据库都有相应的控制文件,它们是较小的二进制文件,用于记录数据库的物理结构,如:数据库名、数据库的数据文件和日志文件的名字和位置等信息。用于打开、存取数据库。名字通常为Ctrl*ctl格式,如Ctrl1CIMS.ctl。
配置文件记录Oracle数据库运行时的一些重要参数,如:数据块的大小,内存结构的配置等。名字通常为init*.ora格式,如:initCIMS.ora。
Oracle数据库的逻辑结构描述了数据库从逻辑上如何来存储数据库中的数据。逻辑结构包括表空间、段、区、数据块和模式对象。数据库的逻辑结构将支配一个数据库如何使用系统的物理空间.模式对象及其之间的联系则描述了关系数据库之间的设计.
一个数据库从逻辑上说是由一个或多个表空间所组成,表空间是数据库中物理编组的数据仓库,每一个表空间是由段(segment)组成,一个段是由一组区(extent)所组成,一个区是由一组连续的数据库块(database block)组成,而一个数据库块对应硬盘上的一个或多个物理块。一个表空间存放一个或多个数据库的物理文件(即数据文件).一个数据库中的数据被逻辑地存储在表空间上。
Oracle数据库被划分为一个或多个称为表空间的逻辑结构,它包括两类表空间,System表空间和非System表空间,其中,System表空间是安装数据库时自动建立的,它包含数据库的全部数据字典,存储过程、包、函数和触发器的定义以及系统回滚段。除此之外,还能包含用户数据。。
一个表空间包含许多段,每个段有一些可以不连续的区组成,每个区由一组连续的数据块组成,数据块是数据库进行操作的最小单位。
每个表空间对应一个或多个数据文件,每个数据文件只能属于一个表空间。
数据库块也称逻辑块或ORACLE块,它对应磁盘上一个或多个物理块,它的大小由初始化参数db-block-size(在文件init.ora中)决定,典型的大小是2k。Pckfree和pctused两个参数用来优化数据块空间的使用。
区是由一组连续的数据块所组成的数据库存储空间分配的逻辑单位。
段是一个或多个不连续的区的集合,它包括一个表空间内特定逻辑结构的所有数据,段不能跨表空间存放。Oracle数据库包括数据段、索引段、临时段、回滚段等。
Oracle数据库的模式对象包括表、视图、序列、同意词、索引、触发器、存储.过程等,关于它们将重点在后面章节介绍。
3.Oracle Server系统进程与内存结构
当在计算机服务器上启动Oracle数据库后,称服务器上启动了一个Oracle实例(Instance)。ORACLE实例(Instance)是存取和控制数据库的软件机制,它包含系统全局区(SGA)和ORACLE进程两部分。SGA是系统为实例分配的一组共享内存缓冲区,用于存放数据库实例和控制信息,以实现对数据库中数据的治理和操作。
进程是操作系统中一个极为重要的概念。一个进程执行一组操作,完成一个特定的任务.对ORACLE数据库治理系统来说,进程由用户进程、服务器进程和后台进程所组成。
当用户运行一个应用程序时,系统就为它建立一个用户进程。服务器进程处理与之相连的用户进程的请求,它与用户进程相通讯,为相连的用户进程的ORACLE请求服务。
为了提高系统性能,更好地实现多用户功能,ORACLE还在系统后台启动一些后台进程,用于数据库数据操作。
SMON系统监控进程:(system monitor)负责完成自动实例恢复和回收分类(sort)表空间。
PMON进程监控进程:(PRocess monitor)实现用户进程故障恢复、清理内存区和释放该进程所需资源等。
DBWR数据库写进程:数据库缓冲区的治理进程。
在它的治理下,数据库缓冲区中总保持有一定数量的自由缓冲块,以确保用户进程总能找到供其使用的自由缓冲块。
LGWR日志文件写进程:是日志缓冲区的治理进程,负责把日志缓冲区中的日志项写入磁盘中的日志文件上。每个实例只有一个LGWR进程。
ARCH归档进程:(archiver process)把已经填满的在线日志文件拷贝到一个指定的存储设备上。仅当日志文件组开关(switch)出现时,才进行ARCH操作。ARCH不是必须的,而只有当自动归档可使用或者当手工归档请求时才发出。
RECO恢复进程:是在具有分布式选项时使用的一个进程,主要用于解决引用分布式事务时所出现的故障。它只能在答应分布式事务的系统中出现。
LCKn封锁进程:用于并行服务器系统,主要完成实例之间的封锁。
SGA是Oracle为一个实例分配的一组共享内存缓冲区,它包含该实例的数据和控制信息。SGA在实例启动时被自动分配,当实例关闭时被收回。数据库的所有数据操作都要通过SGA来进行。
SGA中内存根据存放信息的不同,可以分为如下几个区域:Buffer Cache:存放数据库中数据库块的拷贝。它是由一组缓冲块所组成,这些缓冲块为所有与该实例相链接的用户进程所共享。缓冲块的数目由初始化参数DB_BLOCK_BUFFERS确定,缓冲块的大小由初始化参数DB_BLOCK_SIZE确定。大的数据块可提高查询速度。它由DBWR操作。
b.日志缓冲区Redo Log Buffer:存放数据操作的更改信息。它们以日志项(redo entry)的形式存放在日志缓冲区中。当需要进行数据库恢复时,日志项用于重构或回滚对数据库所做的变更。日志缓冲区的大小由初始化参数LOG_BUFFER确定。大的日志缓冲区可减少日志文件I/O的次数。后台进程LGWR将日志缓冲区中的信息写入磁盘的日志文件中,可启动ARCH后台进程进行日志信息归档。
c.共享池Shared Pool:包含用来处理的SQL语句信息。它包含共享SQL区和数据字典存储区。共享SQL区包含执行特定的SQL语句所用的信息。数据字典区用于存放数据字典,它为所有用户进程所共享。
Cursors:一些内存指针,执行待处理的SQL语句
其他信息区:除了上述几个信息区外,还包括一些进程之间的通讯信息(如封锁信息);在多线索服务器配置下,还有一些程序全局区的信息,请求队列和响应队列等。本文来自: