zoukankan      html  css  js  c++  java
  • 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)系统会根据数据自动创建分区。

      

          未完待续。。。。。。。。。。。。。

      

  • 相关阅读:
    pecl install swoole 安装php扩展swoole
    RBAC
    mysql数据类型
    ES6——Proxy的this问题
    ES6——Proxy实现链式操作
    ES6——Symbol内置值
    ES6——yield例子
    ES6——Generator的next()方法
    ES6——Thunkify用法
    Linux学习day1
  • 原文地址:https://www.cnblogs.com/gudu1/p/7601765.html
Copyright © 2011-2022 走看看