Decode360's Blog

          業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
          關于模式對象的一些操作技巧
          ?
          ?
          ??? 模式對象基本上已經都介紹完了,還需要在做一些掃尾的工作,將一些小的操作技巧稽核在一起介紹一下。因為太小的操作技巧,而且本身的內容也很簡單,不值得花費太多的篇幅來記載,所以專門花一篇的篇幅來總結這些東西。
          ?
          ?
          一、用CREATE SCHEMA創建多個對象
          ?
          ??? Oracle可以使用CREATE SCHEMA語句來同時創建多個對象,用原話就是:Use the CREATE SCHEMA statement to create multiple tables and views and perform multiple grants in your own schema in a single transaction.
          ?
          ??? 操作的語法很簡單,看下面的例子就可以完全掌握:
          ?
          ??? create schema authorization test
          ??? create table t11(a int,b int)
          ??? create view t111 as select * from t11
          ??? grant select on t111 to wangxiaoqi;
          ?
          ??? 需要說明的問題有3點:
          ?
          ??? 1、這個語句不是用來創建schema的,而是創建schema中的對象,即user是需要事先創建好的
          ??? 2、DBA默認不具備執行其他用戶的schema,即必須以authorization后面的user登錄方可執行該語句
          ??? 3、該語句只支持CREATE TABLE、CRAETE VIEW、GRANT三個語句
          ?
          ?
          二、重命名模式對象
          ?
          ??? 絕大多數的object都是可以重命名的,語法是:RENAME ... TO ...
          ?
          ??? 舉例(無需指名類型):
          ?
          ??? rename t11 to t22;
          ??? rename t111 to t222;
          ?
          ??? 說明:
          ?
          ??? 1、支持的類型有:table、view、sequence、synonym
          ??? 2、當rename時,對象的constraint、index也相應更新
          ??? 3、不支持:PLSQL單元、public synonym、index、cluster
          ?
          ?
          三、刪除表和簇
          ?
          ??? 用于刪除Oracle中的表的命令有3種,分別是delete、drop、truncate,來看一下各自的語法:
          ?
          ??? delete from t11; --可以加where子句
          ??? drop table t11;
          ??? truncate table t11;
          ?
          ??? 關于具體的truncate用法和這三種刪除方法的比較,在我之前的文章《Truncate Table介紹》里有比較詳細的介紹,可以看哪個內容。
          ?
          ?
          四、啟用/停用Trigger
          ?
          ??? 啟用和停用觸發器的語法也還是比較簡單的,看一下吧:
          ?
          ??? alter trigger xxxx enable;
          ??? alter table xxxx enable all trigger;
          ?
          ??? alter trigger xxxx disable;
          ??? alter table xxxx disable all trigger;
          ?
          ??? 觸發器的停用,一般是由于以下幾個原因:
          ?
          ??? 1、觸發器的參照對象當前不可用
          ??? 2、需要執行大量裝載而又不希望激活觸發器
          ??? 3、正在往使用觸發器的表里裝載數據
          ?
          ??? 需要專門說明的是,以下幾種情況,觸發器會被隱式激活:
          ?
          ??? 1、在一個相關的表上執行DML
          ??? 2、在數據庫或模式中的對象上執行某DDL語句
          ??? 3、特殊的數據庫時間發生(startup、shutdown、servererror)
          ?
          ?
          五、對象的依賴性
          ?
          ??? 對象如果被修改之后,依賴于它的其它對象很有可能也會受到影響,變成INVALID狀態,這個關系比較復雜,用一張圖表示:
          ?
          ??? rely
          ?
          ??? 要將INVALID的OBJECT變為VALID很簡單,只需要重新編譯即可,語法如下:
          ?
          ??? alter view xxxx compile;
          ??? alter procedure xxxx complie;
          ??? alter package xxxx compile body;
          ??? alter package xxxx compile package;
          ?
          ?
          ?
          posted on 2009-07-19 22:36 decode360 閱讀(180) 評論(0)  編輯  收藏 所屬分類: 08.DBA
          主站蜘蛛池模板: 玉屏| 柘荣县| 碌曲县| 台中市| 宁晋县| 海口市| 长子县| 颍上县| 沾益县| 古交市| 舞阳县| 大兴区| 临沧市| 姚安县| 华池县| 阳泉市| 崇文区| 古蔺县| 襄城县| 罗山县| 遂溪县| 望江县| 乌拉特后旗| 德安县| 方山县| 阿拉尔市| 石景山区| 筠连县| 綦江县| 张家港市| 阳原县| 澄江县| 溧水县| 三穗县| 双城市| 汉寿县| 南投县| 宣恩县| 京山县| 碌曲县| 镇宁|