解析Oracle數(shù)據(jù)庫中的對(duì)象集合schema
搭建一個(gè)oracle,下面會(huì)有很多schema,每個(gè)schema下的數(shù)據(jù)都不影響。
感覺和mysql的庫的概念很像,現(xiàn)在用的數(shù)據(jù)庫管理系統(tǒng)其實(shí)也是這么劃分的,mysql用的ip+port+庫標(biāo)識(shí),oracle用ip+port+schema標(biāo)識(shí),平時(shí)還總聽到一個(gè)實(shí)例的概念,我的理解就是實(shí)例就是一系列相關(guān)進(jìn)程,代表了一個(gè)數(shù)據(jù)庫服務(wù)。目前線上為了節(jié)省資源,常常把機(jī)器分成多個(gè)實(shí)例,用不同的端口號(hào)標(biāo)識(shí),每個(gè)實(shí)例上有多個(gè)schema。
旭哥跟我說的很形象,oracle一個(gè)實(shí)例上有對(duì)應(yīng)多個(gè)庫。mysql一個(gè)庫上應(yīng)多個(gè)實(shí)例。mysql的建庫很靈活。
websql中一行數(shù)據(jù)中,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(應(yīng)該是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(應(yīng)該是ora文件上的配置),
我本地的ora文件有如下配置:
LOCALTEST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = XXX.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = localtest) ) )
這里面有個(gè)serviceName,還有的地方是SID,另外最開始還有個(gè)LOCALTEST名字,這個(gè)標(biāo)識(shí)鏈接描述符。
#db_name是數(shù)據(jù)庫的名稱,在db安裝時(shí)就已經(jīng)設(shè)置了,這里不可修改,它決定了數(shù)據(jù)庫安裝文件的位置。 #instance_name是實(shí)例名,是數(shù)據(jù)庫運(yùn)行中名稱。 其實(shí)在OO中db_name相當(dāng)于類而instance_name向當(dāng)于對(duì)象,它也是代表數(shù)據(jù)庫運(yùn)行中的內(nèi)存及其進(jìn)程,同時(shí)影響到了這些進(jìn)程的名稱,譬如:一個(gè)數(shù)據(jù)庫db_name=cus,而其實(shí)例instance_name= aking,那么數(shù)據(jù)庫起來后,其進(jìn)程名可能為:Pmon_aking_1。 #service_name我覺得應(yīng)該是指數(shù)據(jù)庫網(wǎng)絡(luò)連接時(shí)的名稱,在listener配置中會(huì)有所考慮的。這個(gè)值也是可以隨意改動(dòng)的,并且還可以有多個(gè)值。 #SID_NAME指數(shù)據(jù)庫的運(yùn)行的實(shí)例名,應(yīng)該是和instance_name一致。 #GLOBAL_DBNAME是listener配置的對(duì)外網(wǎng)絡(luò)連接名稱,我們?cè)谂渲胻nsname.ora時(shí)會(huì)考慮這個(gè)參數(shù)。這個(gè)參數(shù)可以任意的設(shè)置。
簡而言之,打個(gè)比方,你的名字叫小明,但是你有很多外號(hào)。你父母叫你小明,但是朋友都叫你的外號(hào)。 這里你的父母就是oracle實(shí)例,小明就是sid,service name就是你的外號(hào)。 sid用于實(shí)例區(qū)分各個(gè)數(shù)據(jù)庫,service name用于外部鏈接。 它們可能是不同的,要注意你得到的是哪個(gè)名字,合理使用,否則遠(yuǎn)程連接別的數(shù)據(jù)庫可能出錯(cuò)。
還有一個(gè)概念是schema和user的關(guān)系。我就直接引用了,很形象:
Oracle數(shù)據(jù)庫中Schema和User的關(guān)系是一一對(duì)應(yīng)的,也就是說一個(gè)Schema只對(duì)應(yīng)一個(gè)User,一個(gè)User對(duì)應(yīng)一個(gè)Schema。當(dāng)某個(gè)User下面有table,view,Index......等Schema Object時(shí),這個(gè)User就成了一個(gè)Schema,也就是在Enterprise Manager中出現(xiàn)的那個(gè),如果某個(gè)User下面沒有table,view,Index......等Schema Object時(shí),這個(gè)User不會(huì)在Enterprise Manager中Schema對(duì)象出現(xiàn)
user is just name, schema is home, with many stuff, tables, index, .....
本地的配置,servicename和sid都是一個(gè)
用dicmgr登錄用到的schema和其他的SCHEMA
websql中sid在db_host中的sid字段,代表了庫名,這個(gè)值和jdbcurl上對(duì)應(yīng)的一致。
看了下同步字典的程序,dsname和tnsname就是tnsname,dbname是sid,name和dbuser對(duì)應(yīng)的就是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 ?
總結(jié)一下,oracle這些name確實(shí)很多,其中servicename和sid是實(shí)例級(jí)別的,schema類似于mysql中的庫,一般和username可以等同。另外jdbcurl中端口后面的對(duì)應(yīng)的是服務(wù)名稱哦。還有要熟悉websql的database的表結(jié)構(gòu)
oracle創(chuàng)建用戶并創(chuàng)建其他schemal的相關(guān)視圖和同義詞
1 創(chuàng)建一個(gè)用戶
CREATE USER "XXX" IDENTIFIED BY XXX ACCOUNT UNLOCK PROFILE "DEFAULT"; grant connect, resource to XXX;
2 給這個(gè)用戶查詢其他schemal上的表的權(quán)限
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 建立一個(gè)同義詞
create or replace synonym XXX.base_aone_app for base_aone_app;
以上操作都在原有scheaml執(zhí)行,并使用dba賬號(hào)。
總結(jié)一下,oracle的管理命令基本上忘得差不多了,有空的時(shí)候撿起來看看。
相關(guān)文章
深入解析Java設(shè)計(jì)模式編程中觀察者模式的運(yùn)用
這篇文章主要介紹了Java設(shè)計(jì)模式編程中觀察者模式的運(yùn)用,觀察者模式主要是為了將對(duì)象進(jìn)行與被觀察者一樣的實(shí)現(xiàn),需要的朋友可以參考下2016-02-02解決idea check out 切換分支時(shí)找不到需要的分支問題
這篇文章主要介紹了解決idea check out 切換分支時(shí)找不到需要的分支問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02使用Spring boot 的profile功能實(shí)現(xiàn)多環(huán)境配置自動(dòng)切換
這篇文章主要介紹了使用Spring boot 的profile功能實(shí)現(xiàn)多環(huán)境配置自動(dòng)切換的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-11-11Java中MapStruct映射處理器報(bào)錯(cuò)的問題解決
MapStruct是一個(gè)強(qiáng)大的Java映射框架,它能夠在編譯時(shí)生成映射代碼,,本文主要介紹了Java中MapStruct映射處理器報(bào)錯(cuò)的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03springboot為異步任務(wù)規(guī)劃自定義線程池的實(shí)現(xiàn)
本文主要介紹了springboot為異步任務(wù)規(guī)劃自定義線程池,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06Java?-jar參數(shù)詳解之掌握J(rèn)ava可執(zhí)行JAR文件的運(yùn)行技巧
做項(xiàng)目的時(shí)候我們肯定接觸過很多jar包,下面這篇文章主要給大家介紹了關(guān)于Java?-jar參數(shù)詳解之掌握J(rèn)ava可執(zhí)行JAR文件的運(yùn)行技巧,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11利用Java實(shí)現(xiàn)帶GUI的氣泡詩詞特效
這篇文章主要為大家介紹了如何利用Java語言實(shí)現(xiàn)帶GUI的氣泡詩詞特效,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,感興趣的可以了解一下2022-08-08Mybatis注解方式完成輸入?yún)?shù)為list的SQL語句拼接方式
這篇文章主要介紹了Mybatis注解方式完成輸入?yún)?shù)為list的SQL語句拼接方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11