Oracle之同义词,DBLINK,表空间
生活随笔
收集整理的這篇文章主要介紹了
Oracle之同义词,DBLINK,表空间
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
昨天講了物化視圖了,今天講一下同義詞的這個概念
就是synonym,反正這個我叫習慣了,這個同義詞了解過嗎,這個可能了解的不多吧,MYSQL里面有同義詞的概念嗎,給我點反饋,你用MYSQL里面有同義詞嗎,比如說啊,那我舉一個例子,MSYQL是不是可以指定不同的用戶,比如張三這個用戶,然后連一個DB,就是一臺服務器,就是這是MYSQL,就是有一個MYSQL,有一個dyb,然后還有easyest,然后還有tmaven,還有這個test,這是一個CONNECTION,下面有好多數據庫,有這么多個,那我是不是建立不同的用戶,指定讓他訪問不同的數據庫,能明白我說的意思吧,你們用MYSQL能這么去做嗎,有一個t1數據庫,這邊在來個t2數據庫,然后我能不能t1和t2,其實是一個服務器,這兩個數據庫的表能不能共享,說白了就是兩個SCHEMA,SCHEMA1就是用戶1,他所有的數據庫可能是t1,用戶2所指定的數據庫是t2,然后這個庫的表能不能共享,能不能跨片的做共享,這邊一張表和這邊一張表,想做一個join,join操作,或者是做其他操作,MYSQL可以嗎,有用過的嗎,能查另一個用戶的表嗎,不能吧,我印象中是不能,那肯定是不能,不要說不能跨庫,那咱們的ORACLE是可以做這個事的,就是他可以指定不同的SCHEMA,就比如你這個scott,就是HR,就是其他的用戶,或者是另外建一個用戶,我就是一個tablespace,不同的空間,我可以做什么事啊,我建立一個這個東西,grant create synonym to scott,同義詞就是synonym,同義詞create出來,然后我就可以做什么事呢,兩個SHCEMA之間做一個表的共享,同義詞在ORACLE里面分兩種,一種是公有同義詞,一種是私有同義詞,私有同義詞就相當于你建立以后,這個表明叫做EMP,然后我可以說給這個表起一個別名,最后給他叫a,最后我就SELECT * FROMEMP就可以查出這個數據,我也可以SELECT * FROM a,也能查出來同樣的數據,可以給他起個別名,但是咱們一般創建的是公有同義詞,公有同義詞一般是hi所有用戶都可以使用的,就是你ORACLE里面所有的SCHEMA用戶,都可以相互之間的訪問,就是里面的表都是可以的,當然你要指定,創建的語法就是create public synonym,然后to什么什么,然后to scott,或者是create public synonym xyz for emp;這個是啥意思啊,這是起一個別名叫xyz,然后for一個emp,emp這個表,然后同義詞的用法差不多就是咱們看到的這種形式,然后我可以創建兩種,私有同義詞
這里有一個例子,就是create synonym wyz for emp1,我把emp1給drop掉了,就是這個表被我刪掉了,然后你去select * from wyz的時候它會說,已刪除表,然后轉換同義詞不再有效,那證明什么啊,證明其實我們這個同義詞還是存在的,就是這個意思,然后你又可以利用一個閃回,你把這個表drop掉了,你只要沒有recycle bin,你這個表還是在垃圾箱里的,你還可以給他閃回回來,閃回回來是flashback table emp1 to before drop,emp1就是你剛才刪的那個表,然后to before drop,這樣的話又回來了,回來之后再去查這個wyz,還是有的,這個就是我剛才說的那個事,我們之前公司也是用了同義詞,數據遷移這
就這些東西,這里面我是創建了好多的這個東西,我先把PL/SQL Developer打開,然后我建一個SQL Window,我們看一下以前我們是怎么去用的
當前要知道什么是SCHEMA,ZCDB這些都是SCHEMA,然后我首先要做的事是什么事啊,我要做的事情是先把同義詞給創建出來,那你看我上面這幾個方式,上面都是CREATE PUBLIC SYNONYM,然后這個是我自己寫的同義詞,這個名字是隨便起的,然后是FOR YZXT這個用戶,這個也是一個用戶,也是一個用戶SCHEMA,然后FOR YZXT這個對象點什么什么YZXT你可以理解為HR點什么什么的,可以這么去理解,然后你創建完這么一堆同義詞以后呢,證明你這個同義詞在全局范圍內有效,整個ORACLE都有效,整個實例都有效,然后我可以做的事情就是你登陸我的HR用戶也好,YZXT這個SCHEMA也好,然后去干什么事呢,把我剛才創建的名字,給另外一個SCHEMA,可以這么去轉換,然后另外一個SCHEMA就可以查這張表,差不多就是這個用法,其實以前工作的時候大量的用到了同義詞,就是做查詢方便,就是簡單的舉個例子,實際操作一下你就明白了,比如現在我換一個用戶,比如我換一個HR,還是ORCL,還是同一個實例,然后hr/tiger,現在我們已經換用戶了,之前是scott,現在換成了hr了,hr里面肯定是表都不一樣,表里面都有這么多,有一個EMPLOYEES,還有一個JOBS
那EMPLOYEEs里面的數據就多了,我記得以前也說過,首先列也多了,基本上考OCP的時候都是用這張表出題,讓你去做,因為這張表數據多,那現在我想干什么啊,我想通過hr用戶,把EMPLOYEES這張表變成公有的,別人可以去訪問的這個東西,就是同義詞嗎,這個怎么去做啊,就是CREATE PUBLIC SYNONYM,這個表指代的是誰啊,原先叫EMPLOYEES,然后我這邊可以隨便取個名字,AAA,然后FOR誰,當前登陸的是HR,所以就是FOR HR點,就是HR用戶下的哪張表,然后里面都是HR的表,FOR HR.EMPLOYEES,然后我去建立一下,CREATE PUBLIC SYNONYM AAA FRO HR.EMPLOYEES,他可能沒有創建同義詞的權限,這個用戶,那你操作起來就有點麻煩了,首先你得使用system去登陸,coon system/tiger@orcl as sysdba,先登陸一下,然后grant create public synonym to hr
這回他就已經有了,已經有了我再創建行不行,這個時候就創建執行OK了,執行OK了以后
我之前SELECT * FROM EMPLOYEES,我能查到數據,由于是公有同義詞,我就可以這樣,SELECT * FROM aaa,同樣,就相當于給他起個別名
接下來要做的是grant,就是GRANT SELECT權限,給他其他的選項都行,給他update的權限,給他更新的權限,給他DELETEdrop的權限,等等,先給他SELECT的權限,GRANT SELECT的權限怎么去寫的,ON這個同義詞表,TO一個SCHEMA,你之前這個表叫AAA,創建公有同義詞,這是你HR用戶下創建的同義詞叫這個,然后咱們TO的是SCOTT,就這樣去做,這樣他也OK了,GRANT SELECT ON AAA TO SCOTT,OK以后我們換一個用戶去登陸,換scott,那換scott之后,現在我登陸的人就是scott了,SCOTT數據庫里面就這幾張表,肯定是沒有EMPLOYEES這張表,你看現在肯定是沒有那張表的,然后我去做查詢,隨便來個query吧,咱們就直接來個SELECT * FROM AAA那就可以了
我就看到另外一個SCHEMA HR他里面的這張表了,但是現在只有查詢權限,你說你要更新什么,比如我現在想做一個UPDATE,UPDATE AAA SET FIRSTNAME或者EMAIL,我隨便給他一個EMAIL值,WHERE EMPLOYEE_ID等于198UPDAET AAA SET EMAIL = '1111' WHERE EMPLOYEE_ID = '198',我們這個執行,他說權限不足,肯定是權限不足的,因為你只給了SELECT 的權限,你沒有給他其他的權限,能明白我的意思吧,同義詞這個事沒問題吧,就是可以這么去做,多個SCHEMA之間進行交互,這個其實還是非常好用的,有什么用你想一想唄,這個東西怎么說呢,你說的是SCHEMA是直接交互,你用用戶點什么什么,但是我這個相當于是全局,全局所有的都能用,能理解我說的意思吧,而且我這個東西刪了,他這個同義詞依然存在,就是我把EMPLOYEES這張表刪掉,這個同義詞還是存在,我剛才不是又看過這個例子嗎,就是有一個drop table,emp1刪了以后,我照樣可以閃退回來,還能閃回回來,這個我查一下,這個我還真不知道,沒注意,不同實例的能進行查詢嗎,你如果兩個實例都開起來,我搜一下,這個我也沒注意,不同實例的同義詞查詢,可以的,那就證明同義詞就很強大了,我記得也是可以的,但是我沒試,那這塊你想想吧,對應著你的數據庫,兩個數據庫了,相當于兩個實例了,同義詞進行交互,咱們實驗一下,這個非常簡單,我記得也是可以的,咱們試一試,但是沒敢說一定可以,好久不弄也就忘了,你不天天玩他也是真的不行,我現在又啟動了一個實例,我記得也是可以的,剛才那個好像就是不同的實例,現在都進來了,一個是連接的實例不同了,剛才我們已經創建了一個同義詞了,AAA,那我這里是不是SELECT * FROM AAA就行了呢,應該怎么去做來的,我記得行但是沒這么簡單,就是你現在是不同的實例,然后同義詞公用,我想一想啊,SELECT * FROM AAA這是不行的,我換一下,應該權限也是有關,那我就conn system/tiger@bjtam AS SYSDBA,select * from aaa,那就是不行,咱們先不考慮這么多了,簡單的知道同義詞的用法就行了,然后咱們繼續往下走,下一個例子就是DBLINK這一塊
DBLINK干什么事呢,他可以用于不同數據庫,不同的數據庫實例,或者是遠程連接,這個肯定行的,這個不用想,同義詞這個我還真不知道行不行,反正我是知道他是基于SCHEMA進行區分的,但是DBLINK是可以不同的數據庫,不同的實例可以去相連的,然后有了這個DBLINK以后,然后你就可以去查,查不同實例的表,然后可以做一系列的操作,這個DBLINK沒問題吧,應該都聽過這個東西,DBLINK,DBLINK不就是這個東西,多簡答啊,剛才我們是兩個實例了,其實我也可以兩個數據庫,當然這個我不浪費時間了,我現在這個是SCOTT,我去怎么做呢,就是create public database link,然后隨便取個名字,然后connect to bjsxt,identified by PASSWD,這個就是bjsxt的實例,然后identified by,這個是什么啊,PASSWORD我這邊也是bjsxt,using是什么啊,描述DESCRIPTION,ADDRESS地址是哪兒,我的地址是192.168.2.200,或者是你本地的地址都行,ORACLE的PORT都是1521,然后你這塊的實例名稱是什么,SERVICE_NAME是bjsxt,因為我要link的是bjsxt這塊,然后create出來,這個名字就叫bjsxt_link,就叫link1吧,隨便起個名字,但是他有創建link的權限嗎,權限不足,那怎么辦啊,我用DBA創建一個權限吧,conn system/tiger@orcl as sysdba,就是這個語句,然后我們回車
?
這里就直接create dblink,就創建好了,創建好了以后就可以直接去做了,bjsxt里面有什么表呢,換一個實例,bjsxt用戶名是bjsxt,密碼也是bjsxt,你進去看到這個實例用戶里邊,他有什么對應的表,Tables有這么多 咱們有SYS_USERS表嗎,SELECT * FROM SYS_USER@LINK1,就把另個數據已經查出來了 這里又兩條記錄,一個admin,一個xiaoxiao,我可以去查SELECT * FROM SYS_FILE@LINK1;這個實例里面也應該有SYS_FILE文件的,SYS_FILE不行,我再換一個,這個表里有數據,就是SYS_FUNC,SELECT * FROM SYS_FUNC@LINK1,這些都是可以查 具體那個為什么不能查,這也是要告訴你的一個原因,就是這個實例,SYS_FILE這個表為什么不能查,觀察一下這個數據結構你就知道了,你會發現這個表里有什么啊 有二進制文件,有BLOB文件,有BLOB文件允許查嗎,SELECT * FROM SYS_FILE@LINK1,里面不能夠查帶二進制的數據 就是說有一個問題,這個東西雖然也能做,但是不能夠查帶有BLOB,CLOB的這種東西,他覺得這個東西太費事了,DBLINK查這個夠嗆,因為那樣的話交互量太大了,現在兩個庫之間可以做這個事情了,兩個數據庫之間可以做這個事情了,這個就方便了很多,咱們就把同義詞和DBLINK說一下然后這塊有PL/SQL的編程,這個在很久以前就說了,咱們這個后期肯定會講的,就會直接去用的,之前的例子也發給你了,所以這個也就不說了 接下來你可以看一下,我就不寫了,因為我覺得太麻煩了,就是你在ORACLE里面創建一個正常的表空間,它是怎么去做的呢,就是一個create,創建臨時表空間,create temporary tablespace,然后起個名字,臨時表空間的數據文件放在哪里,自己指定一個文件,然后大小隨便寫了一個G,然后可擴展,后面還可以加很多的東西,比如每次擴展50M,最大閑置是兩個G,或者是20個G這都行,然后是其他的東西,這是臨時表空間創建的時候,然后創建正式的表空間就是create tablespace,就不用那個temporary了,然后也是隨便取個名字,創建一個數據文件,指定數據文件的大小,還可以擴展,每次擴展是多大,最大的限度是多大,然后繼承management local,你說你這個數據文件,一個已經滿了,怎么辦,我local里面還可以添加數據文件,一個文件不夠我再加一個,這里指定的是maxsize,這是20個G,20G指的是什么啊,指的是你整個dbf,一個表空間的一個,他的最大大小,但是如果你在給我加一個數據文件的話,那這就是另外一個數據文件了,那你可以給另外一個數據文件指定多大,這都是可以的,就是垂直的,按庫的,一個ORACLE實例的增加表空間,可以這么去做,創建完表空間以后,create user隨便取個名,然后給一個密碼,然后default tablespace是什么,就是我上面創建的數據表空間,然后指定他的臨時表空間是什么,如果正常生產環境中你要是就使用這一個用戶,如果都使用這一個用戶去操作,grant dba to 你創建好的用戶就完事了,怎么做都行,表空間的使用,簡單的使用,還有一些查看表空間的使用率,這都可以去做的 然后還有一些查看表空間的使用率,這都是可以去做的,ORACLE里面有些SQL都是好長好長的 就直接能看到,先不用管查詢語句是什么意思,反正就是1024*1024,取出來的就是多少兆了,我們現在有這么多的tablespace,BJSXT,EB,以前在做ACTIVITY的時候,工作流,他給我分配了一個表空間,然后還有很多,這就不說了,可以去看的,數據庫實例名稱,select instance_name from v$instance,你看到當前數據庫實例,其實你對ORACLE如果沒興趣的話,你可能就真沒興趣了 orcl就是我們當前的實例,這些都是很基礎的,表空間就不說了,咱們就稍微停一下?
總結
以上是生活随笔為你收集整理的Oracle之同义词,DBLINK,表空间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle之数据库设计概述
- 下一篇: Oracle之垂直水平分库分表(一)