当前位置: 首页 > 编程笔记 >

解析Oracle数据库中的对象集合schema

范轶
2023-03-14
本文向大家介绍解析Oracle数据库中的对象集合schema,包括了解析Oracle数据库中的对象集合schema的使用技巧和注意事项,需要的朋友参考一下

搭建一个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的管理命令基本上忘得差不多了,有空的时候捡起来看看。

 类似资料:
  • 我有一个关于FireBase的firestore db的问题。 我有一个文档X,它包含一个名为users的字段,它是一个对象,引用了users集合中的用户。 它看起来与此类似: 我如何查询firestore db以获得所有的文档(来自家庭集合),这些文档的用户名为'john'? 我没有运气地尝试了以下几点: 但它只返回一个空数组。 如果我将用户的条目从key:reference切换到key:str

  • 本文向大家介绍oracle数据库导入导出命令解析,包括了oracle数据库导入导出命令解析的使用技巧和注意事项,需要的朋友参考一下 Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份。 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。 Oracle有个好处,虽然你的电脑不是服务器,但是你装了or

  • 我一直在努力解决这个问题,无法使用以下代码解析firebase实时数据库中的数据。我什么都试过了,但我做不到。下面是必要文件的代码。我正在使用提供程序进行状态管理。 我的供应商代码: 我调用的小部件: 我的模型课: 我得到以下错误: 如果有人能帮忙,我将非常感激,它已经调试了很长时间...

  • 问题内容: 谁能帮助我如何从数据库创建JSON对象? 这是 JSON输出的 样子: 这是 我的代码 : 我能够从数据库中获取选定的 类型,名称,演示 。 我不知道如何开始JSON编码。 问题答案: 如果要从数据库提取数据并自己构造JSON对象,则可以执行以下操作: 现在包含所有数据。

  • 我正在寻找允许我查询集合的Java库。我偶然发现了jFilter an JoSql。 然而,JoSql似乎自2010年以来一直处于非活动状态,只有2个版本。jFilter似乎相当新,自去年以来没有任何新版本。 当谷歌搜索它们中的任何一个时,搜索结果的数量很少,这向我表明它们没有被广泛使用。 你对这些图书馆有什么建议,或者知道更多的活动吗?

  • 问题内容: 我想知道如何解析NodeJS中的JSON对象数组? 我想将JSON数组发布到服务器,并能够将接收到的数组用作可靠的JavaScript数组。 提前致谢。 这是我要使用stringify函数将Array转换为String的前端部分 这是我尝试将JSON对象的Array转换为Array的后端部分 这是我要发送到服务器的数组: 这是源代码 问题答案: 在您的: 然后,您可以使用来获取过帐的值