Oracle用戶權限授權以及索引、同義詞、分區


本文為原創,如需轉載,請標明出處 http://www.cnblogs.com/gudu1/p/7601765.html 

---- 用戶權限

1.創建表空間 (創建用戶之前需要創建表空間和臨時表空間,若是沒有創建,10g之前默認是system永久性表空間,11g改為users永久性表空間)

  create tablespace a_user

  datafile 'D:\a_user_space.dbf'

  size 10M

  autoextend on;

2.創建臨時表空間(默認為temp臨時表空間)

  create temporary tablespace a_user_temp

  tempfile 'D:\a_user_temp.dbf'

  size 10M

  autoextend on;

3.創建用戶 (需要指定用戶名,密碼,表空間和臨時表空間)

  create user a_user identified by 123456

  default tablespace a_user 

  temporary tablespace a_user_temp;

4.授權 (授權需要在數據庫管理員登陸下進行授權,否則會提示你權限不足)

  grant connect,resource to a_user;

 

以上就是創建一個新的用戶 並且指定表空間和臨時表空間,假如現在一個用戶想要訪問另一個用戶下的表怎么辦呢? 很簡單,給他權限就好。

 

--假設現在有兩個用戶user1和user2,然后user1下有張表emp,接下來我們把訪問emp表的權限授給user2(注意:這里登錄的用戶要么是管理員要么是user1

grant select,update,delete,insert on emp to user2;

-- 突然有一天user1和user2鬧掰了,倆人不和,user1不給user2訪問權限了,怎么辦?

revoke select,update,delete,insert on emp from user2;

 

以下是一些簡單Oracle操作command:

  刪除用戶:drop user user1 cascade; 

  修改用戶密碼:alter user user1 identified by 123456;

  刪除表空間:drop tablespace a_user;

  修改表空間大小: alter tablespace a_user datafile 'D:\a_user_space' resize 20M; ② alter tablespace a_user add datafile 'D:\a_user_space2.dbf' size 10M autoextend on;

  更多常用函數:http://www.cnblogs.com/rencongums/articles/5662537.html 

 

 ---- Oracle序列使用

  我們都知道SQLServer,MySql等數據庫都能夠添加自動增長列Identity,然而Oracle跟那些不太一樣,它是通過添加一個序列,插入數據的時候使用序列來自動生成順序列,不多廢話。下面是語法  ↓

 

 --創建序列

  CREATE SEQUENCE sequence  //創建序列名稱

         [INCREMENT BY Integer]  

         [START WITH Integer]    

         [{MAXVALUE Integer | NOMAXVALUE}]

         [{MINVALUE Integer | NOMINVALUE}] 

         [{CYCLE | NOCYCLE}] 

         [{CACHE Integer | NOCACHE}];

    INCREMENT BY :用於定義序列的步長,如果省略,則默認為1,如果出現負值,則代表Oracle序列的值是按照此步長遞減的。

         START WITH :定義序列的初始值(即產生的第一個值),默認為1。

          MAXVALUE :定義序列生成器能產生的最大值。選項NOMAXVALUE是默認選項,代表沒有最大值定義,這時對於遞增Oracle序列,系統能夠產生的最大值是10的27次方;對於遞減序列,最大值是-1。

           MINVALUE : 定義序列生成器能產生的最小值。選項NOMAXVALUE是默認選項,代表沒有最小值定義,這時對於遞減序列,系統能夠產生的最小值是?10的26次方;對於遞增序列,最小值是1。

      NOMAXVALUE: 如果指定了NOMAXVALUE,Oracle將升序序列的最大值設為10^27,將降序序列的最大值設為-1,。這是默認選項。

       NOMINVALUE:如果指定了NOMINVALUE,Oracle將升序序列的最小值設為1,將降序序列的最小值設為-10^26,。這是默認選項。

CYCLE和NOCYCLE : 表示當序列生成器的值達到限制值后是否循環。CYCLE代表循環,NOCYCLE代表不循環。如果循環,則當遞增序列達到最大值時,循環到最小值;最小值為1。對於遞減序列達到最小值時,循環到最大值。如果不循環,達到限制值后,繼續產生新值就會發生錯誤。

                  CACHE:使用CACHE選項時,該序列會根據序列規則生成一組序列號。保留在內存中,當使用下一個序列號時,可以更快的響應。當內存中的序列號用完時,系統會再次生成一組序列號保存在緩存中,這樣可以提高生成序列號的效率。ORACLE會默認生成20個序列號。

             NOCACHE:不預先在內存中生成序列號。

 

   --刪除序列    

  drop sequence seq_name;   

 

   --修改序列

   Alter sequence seq_name 

     [INCREMENT BY n]  

         [{MAXVALUE n | NOMAXVALUE}]

         [{MINVALUE n | NOMINVALUE}] 

         [{CYCLE | NOCYCLE}] 

         [{CACHE n | NOCACHE}];

 注意: 不能修改序列的START WITH屬性。在修改序列時,應注意升序序列的最小值應小於最大值。

%%%%%%% 使用序列設置主關鍵字時,在數據庫遷移時需要注意。由於遷移后的表中已經存在數據,如果不修改序列的起始值,將會在表中插入重復數據,  違背主鍵約束。所有在創建序列時要修改序列的起始值。

 

 

---- Oracle同義詞使用

  優點:

    1)簡化SQL語句

      2)隱藏對象的名稱和所有者

      3)為分布式數據庫的遠程對象提供了位置透明性

      4)提供對對象的公共訪問

  分類:私有同義詞和共有同義詞

   創建:

      私有:create [or replace]  synonym synonym_name for table_name;

      公有:create [or replace] public synonym synonym_name for table_name;

  刪除:

      私有:drop synonym synonym_name;

      公有:drop public synonym synonym_name;

   注意:創建同義詞同樣需要管理員授權,grant create synonym to user1; 

  --- 舉個例子,還是上面emp表,用戶是user1和user2,user1為emp表創建了私有同義詞,這個時候user2是否能夠訪問到呢?答案肯定是不能,如果創建了公有呢?結果還是不能,很納悶吧^_^,還差一個權限

grant select on emp to public; 授予權限之后,你再試試。 如果某個用戶下有張表你希望所有人都能夠訪問,這個時候你就可以使用公有同義詞,你總不能使用Grant select on emp to user2; 這個吧,那得有多煩啊,每創建一個用戶,你都要授權。        

                                                                                                 

---- Oracle索引使用

  索引是與表關聯的可選結構,是一種快速訪問數據的途徑,可提高數據庫性能。數據庫可以明確地創建索引,以加快對表執行SQL語句的速度。當索引鍵作為查詢條件時,該索引將直接指向包含這些行的位置。

即便刪除索引,也無須修改任何SQL語句的定義。

   索引分類:

    物理分類     邏輯分類
分區或非分區索引 單列或組合索引
B樹索引 唯一或非唯一索引
正常或反向鍵索引 基於函數索引
位圖索引   

 

 

 

 

 

  

   創建索引:

    B樹:create index index_name on table_name(column_list);

    組合:create index index_name on table_name(column_list);

    反向鍵索引:create index index_name on table_name(column_list) reservse;

    位圖索引:create bitmap index index_name on table_name(column_list);

    唯一索引:create unique index index_name on table_name(column_list); 

 

  刪除索引:drop index index_name;

  重建索引:alter index index_name rebuild noreverse;(將反向鍵索引更改為B樹索引)

  建立索引原則:

    1)頻繁搜索的列可以作為索引。

    2)經常排序、分組的列可作為索引。

    3)經常用作連接的列(主鍵 / 外鍵)可作為索引。

    4)將索引放在一個單獨的表空間中,不要放在有回退段、臨時段和表的表空間中。

    5)對大型索引而言,考慮使用 NOLOGGING子句創建大型索引。

    6)根據業務數據發生的頻率,定期重新生成或重新組織索引.並進行碎片整理。

    7)僅包含幾個不同值的列不可以創建為B樹索引,可根據需要創建位圖索引。

    8)不要在僅包含幾行的表中創建索引。

  

---- Oracle分區

  分類:范圍分區、列表分區、散列分區、復合分區、間隔分區和虛擬列分區等。

   下面 介紹一下范圍分區 和 間隔分區--

   范圍分區:

    應用范圍比較廣的表分區方式,它以列的值作為分區的划分條件,將記錄存放到列值所在的range分區中。

   創建:

    Create  table user

    (

      user_id number,

      user_name number,

      birthday date not null

      .........

    )

    partition by range(birthday)

    (

      partition p1 values less than (to_date('2017-01-01'),'yyyy-MM-dd'),

      partition p1 values less than (to_date('2016-01-01','yyyy-MM-dd')),

      partition p3 values less than (maxvalue)

    )

   添加:

    alter table table_name add partition p4 less than (to_date('2015-01-01','yyyy-MM-dd'));

  合並:

    alter table table_name merge partitions p1,p2 into partition p2;

   刪除:

    alter table table_name drop partition p1;

  

  間隔分區:

    間隔分區是范圍分區的一種增強功能,可以實現范圍分區的自動化。

    創建:

      Create  table user

      ( 

      user_id number,

      user_name number,

      birthday date not null

      .........

      )

      partition by range(birthday)

      interval(numtoyminterval(1,'MONTH'))

      (partition p1 values less than (to_date('2016-01-01','yyyy-MM-dd')));

    解釋:

      1)只需創建第一個開始分區,如上面的P1.

      2)INTERVALONUMTOYMINTERVAL(3, 'MONTE')語句中,  INTERVAL 代表“間隔即按照后面括號中的定義間隔添加分區。

      3)NUMTOYMINTERVAL(3, 'MONTH')表示每3個月為一個分區。

        NUMTOYMINTERVAL(n,'Interval_unit')函數用於將n轉換成 interval_unit 所指定的值。

        interval_unit 可以為 YEAR 或 MONTE 。

        舉例:

        NUMTOYMINTERVAL(1,'YEAR'):每1年為一個分區。

        NUMTOYMINTERVAL(1, 'MONTH'):每1個月為一個分區。

        與該類型相關的函數還有 NUMTODSINTERVAL(n, 'interval_unit'),用於將n轉換成 interval_unit 所指定的值。

        interval_unit 可以為 DAY , HOUR ,  MINUTE ,  SECOND 。

        注意該函數不支持 YEAR 和 MONTH 。

      4)系統會根據數據自動創建分區。

  

 

      未完待續。。。。。。。。。。。。。

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM