解析Oracle数据库中的对象集合schema
作者:王小明123 发布时间:2023-07-22 20:42:34
搭建一个oracle,下面会有很多schema,每个schema下的数据都不影响。
感觉和mysql的库的概念很像,现在用的数据库管理系统其实也是这么划分的,mysql用的ip+port+库标识,oracle用ip+port+schema标识,平时还总听到一个实例的概念,我的理解就是实例就是一系列相关进程,代表了一个数据库服务。目前线上为了节省资源,常常把机器分成多个实例,用不同的端口号标识,每个实例上有多个schema。
旭哥跟我说的很形象,oracle一个实例上有对应多个库。mysql一个库上应多个实例。mysql的建库很灵活。
websql中一行数据中,name为mgmt_view,displayName为mgmt_view@dev_crm,jdbc为jdbc:oracle:thin:@10.232.31.XXX:1521:newcrm,jdbcusername为dev_ddl,DSName为dev_crm,DBName为newcrm(和jdbaURL上的一致),DBuser为mgmt_view,TNSName为dev_crm(应该是ora文件上的配置)。
name为stat,displayName为stat@dev_dbc ,jdbc为jdbc:oracle:thin:@10.232.31.XXX:1521:dev-dbc,jdbcusername为dev_ddl,DSName为dev-dbc,DBName为dev-dbc(和jdbaURL上的一致),DBuser为stat,TNSName为dev_dbc(应该是ora文件上的配置),
我本地的ora文件有如下配置:
LOCALTEST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = XXX.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = localtest)
)
)
这里面有个serviceName,还有的地方是SID,另外最开始还有个LOCALTEST名字,这个标识链接描述符。
#db_name是数据库的名称,在db安装时就已经设置了,这里不可修改,它决定了数据库安装文件的位置。 #instance_name是实例名,是数据库运行中名称。 其实在OO中db_name相当于类而instance_name向当于对象,它也是代表数据库运行中的内存及其进程,同时影响到了这些进程的名称,譬如:一个数据库db_name=cus,而其实例instance_name= aking,那么数据库起来后,其进程名可能为:Pmon_aking_1。 #service_name我觉得应该是指数据库网络连接时的名称,在listener配置中会有所考虑的。这个值也是可以随意改动的,并且还可以有多个值。 #SID_NAME指数据库的运行的实例名,应该是和instance_name一致。 #GLOBAL_DBNAME是listener配置的对外网络连接名称,我们在配置tnsname.ora时会考虑这个参数。这个参数可以任意的设置。
简而言之,打个比方,你的名字叫小明,但是你有很多外号。你父母叫你小明,但是朋友都叫你的外号。 这里你的父母就是oracle实例,小明就是sid,service name就是你的外号。 sid用于实例区分各个数据库,service name用于外部链接。 它们可能是不同的,要注意你得到的是哪个名字,合理使用,否则远程连接别的数据库可能出错。
还有一个概念是schema和user的关系。我就直接引用了,很形象:
Oracle数据库中Schema和User的关系是一一对应的,也就是说一个Schema只对应一个User,一个User对应一个Schema。当某个User下面有table,view,Index......等Schema Object时,这个User就成了一个Schema,也就是在Enterprise Manager中出现的那个,如果某个User下面没有table,view,Index......等Schema Object时,这个User不会在Enterprise Manager中Schema对象出现
user is just name, schema is home, with many stuff, tables, index, .....
本地的配置,servicename和sid都是一个
用dicmgr登录用到的schema和其他的SCHEMA
websql中sid在db_host中的sid字段,代表了库名,这个值和jdbcurl上对应的一致。
看了下同步字典的程序,dsname和tnsname就是tnsname,dbname是sid,name和dbuser对应的就是schemal,tnsname和sid可以从dbhostgroup这张表中直接取出来。schemal可以用一下的方法取出来:
select lower(username) username from dba_users where username
not in ('STDBYPERF', 'READONLY', 'APPQOSSYS','ANYSQL', 'DBFLASH', 'SYS', 'SYSTEM','MONITOR','TBSEARCH','MANAGER', 'SYSMAN', 'EXFSYS', 'WMSYS', 'DIP', 'TSMSYS', 'ORACLE_OCM', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'SEARCH', 'TOOLS', 'TBDUMP', 'DMSYS', 'XDB', 'ANONYMOUS')
and username like ?
总结一下,oracle这些name确实很多,其中servicename和sid是实例级别的,schema类似于mysql中的库,一般和username可以等同。另外jdbcurl中端口后面的对应的是服务名称哦。还有要熟悉websql的database的表结构
oracle创建用户并创建其他schemal的相关视图和同义词
1 创建一个用户
CREATE USER "XXX" IDENTIFIED BY XXX ACCOUNT UNLOCK PROFILE "DEFAULT";
grant connect, resource to XXX;
2 给这个用户查询其他schemal上的表的权限
GRANT SELECT ON wf_dataexport TO XXX;
GRANT SELECT ON dbmis2_sql_exe_his TO XXX;
3 在新用户上建立视图,用来查询其他schemal的表
CREATE VIEW "XXX"."v_XXX_wf_dataexport" AS select * from idb.wf_dataexport;
CREATE VIEW "XXX"."v_XXX_dbmis2_sql_exe_his" AS select * from idb.dbmis2_sql_exe_his;
4 建立一个同义词
create or replace synonym XXX.base_aone_app for base_aone_app;
以上操作都在原有scheaml执行,并使用dba账号。
总结一下,oracle的管理命令基本上忘得差不多了,有空的时候捡起来看看。
猜你喜欢
- QQ医生在广大用户心中一直以来都是清爽便捷的一款安全工具,随着QQ医生的不断发展,QQ医生团队一直在思考,怎样能够给QQ医生用户带来性能更优
- 客户端调用XMLHTTP的过程很简单,只有5个步骤: 1、创建XMLHTTP对象 2、打开与服务端的连接,同时定义指令发送方式,服务网页(U
- 或许马上,或许几年之后,但是有迹象显示IE浏览器占统治地位的时代即将结束。在数据分析公司Net Applications的排名中,IE的市场
- Request.ServerVariables("Url") 返回服务器地址Request.ServerVariable
- 因为正则不够完善,所以代码中不能直接出现 <? 和 ?>如果是字符串,可以拆开写 "<" + &quo
- 这两天做基于 Flash9(ActionScript 3.0)的 JavaScript PHPRPC 3.0 客户端时遇到了一些 JavaS
- 原来的语句是这样的: select sum(sl0000) from xstfxps2 where dhao00 in ( select d
- 前阵子刚完成一个B/S架构的学校办公系统,体会就是表太多,文件太多,而每个文件中类似的操作(代码)也太多了,例如学生信息和教师信息操作,st
- 和YSlow一样,“Page Speed”也是一个基于firebug附加组件的FireFox插件。虽然听起来有点拗口,但是意思很容易理解:如
- 一、什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用【索引】 索引允许SQL Server在表中查找数据而不需要扫描整个表。 1
- SQL Server TEXT、NTEXT字段拆分的问题引用的内容:SET NOCOUNT ON CREATE 
- 前言责任链模式(Chain of Responsibility Pattern)是什么?责任链模式是一种行为型模式,它允许多个对象将请求沿着
- 在本身比较复杂的页面里,再突出信息,往往是把几种方法叠加起来使用,比如加粗加大、加粗加色等,区别在于使用的类别和程度。导致的结果是呈现越来越
- 用 ASP (using jscript) 在服务端创建 GUID 的代码如下:function GUID(){ ret
- 如何正确理解和使用Command、Connection和 Recordset三个对象?我知道它们都是连接数据库的“好手”,但在编程的具体应用
- 前言 大家好,好男人就是我,我就是好男人,我就是-0nise。在各大漏洞举报平台,我们时常会
- *注意:本文的内容涉及到修改NTFS磁盘权限和设置安全策略,请务必在确认您了解操作可能的后果之后再动手进行任何的修改。文中提及的权限都是在原
- 比较简单的一个页面,类似csdn论坛在ns下的左边列表 描述: 1. 数据名:tree.mdb 表名:tree 表结构:id(自编)&nbs
- W3C(万维网联盟)日前发布了HTML 5公共草案,这是10年来对HTML的一次主要升级。据国外媒体报道,W3C HTML5草案于本周二发布
- 后台数据库: [Microsoft Access] 与 [Microsoft Sql Server] 更换之后,ASP代码应注意要修改的一些