-- 查询数据库文件存放位置
select name from v$datafile;

ORACLE可以创建的表空间有三种类型:

  (1) TEMPORARY: 临时表空间,用于临时数据的存放;

  创建临时表空间的语法如下:

  CREATE TEMPORARY TABLESPACE "SAMPLE"......

  (2) UNDO : 还原表空间. 用于存入重做日志文件.

  创建还原表空间的语法如下:

  CREATE UNDO TABLESPACE "SAMPLE"......

  (3) 用户表空间: 最重要,也是用于存放用户数据表空间

  可以直接写成: CREATE TABLESPACE "SAMPLE"

  TEMPORARY 和 UNDO 表空间是ORACLE 管理的特殊的表空间.只用于存放系统相关数据.

创建表空间语法:

create tablespace "表空间名字"

[nologging|logging]

datafile "数据文件存放位置" size 50M

EXTENT MANAGEMENT LOCAL

AUTOEXTEND ON

NEXT 32M

MAXSIZE 2048M;

例子:

create tablespace oracle_tablespace_1
logging
datafile 'D:\MajorTool\OracleDataFile\oracle_tablespace_1.ora'
size 50M
autoextend on next 50M
maxsize 20480M
extent management local;

注释:

1) NOLOGGING: 创建表空间时,不创建重做日志. LOGGING 和NOLOGGING正好相反, 就是在创建表空间时生成重做日志.

2) DATAFILE 指定数据文件的具体位置和大小, 如果有多个文件,可以用逗号隔开:

    DATAFILE 'D:\ORACLE\ORADATA\ORA92\LUNTAN.ora' SIZE 5M,'D:\ORACLE\ORADATA\ORA92\dd.ora' SIZE 5M

  注:必须为绝对地址,不能使用相对地址.

3) EXTENT MANAGEMENT LOCAL 存储区管理方法

  Oracle 8i以前,可以有两种选择,一种是在字典中管理(DICTIONARY),另一种是本地管理(LOCAL ),从9I开始,只能是本地管理方式.因为LOCAL 管理方式有很多优点.

  在字典中管理(DICTIONARY): 将数据文件中的每一个存储单元做为一条记录,所以在做DM操作时,就会产生大量的对这个管理表的Delete和Update操作.做大量数据管理时,将会产生很多的DM操作,严得的影响性能,同时,长时间对表数据的操作,会产生很多的磁盘碎         片,这就是为什么要做磁盘整理的原因.

     本地管理(LOCAL): 用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘. 同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作

4) SEGMENT SPACE MANAGEMENT
     磁盘扩展管理方法:
      SEGMENT SPACE MANAGEMENT: 使用该选项时区大小由系统自动确定。由于 Oracle 可确定各区的最佳大小,所以区大小是可变的。
      UNIFORM SEGMENT SPACE MANAGEMENT:指定区大小,也可使用默认值 (1 MB)。
5) 段空间的管理方式
      AUTO: 只能使用在本地管理的表空间中. 使用LOCAL管理表空间时,数据块中的空闲空间增加或减少后,其新状态都会在位图中反映出来。位图使 Oracle 管理空闲空间的行为更加自动化,并为管理空闲空间提供了更好的性,但对含有LOB字段的表不能自动管理.

  MANUAL: 目前已不用,主要是为向后兼容.

创建用户:

CREATE USER user_name IDENTIFIED BY password
DEFAULT TABLESPACE 表空间名字
TEMPORARY TABLESPACE 表空间名字;

例子:

create user leilei identified by oracle default tablespace oracle_tablespace_1;

4.给用户授权
GRANT
  CREATE SESSION, CREATE ANY TABLE, CREATE ANY VIEW ,CREATE ANY INDEX, CREATE ANY PROCEDURE,
  ALTER ANY TABLE, ALTER ANY PROCEDURE,
  DROP ANY TABLE, DROP ANY VIEW, DROP ANY INDEX, DROP ANY PROCEDURE,
  SELECT ANY TABLE, INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE
TO username;

首先授权用户testuser两个基本的角色权限

   CONNECT角色:    –是授予最终用户的典型权利,最基本的      
   CREATE    SESSION    –建立会话 

RESOURCE角色:    –是授予开发人员的     
   CREATE    CLUSTER         –建立聚簇  
   CREATE    PROCEDURE    –建立过程  
   CREATE    SEQUENCE      –建立序列  
   CREATE    TABLE              –建表  
   CREATE    TRIGGER          –建立触发器  
   CREATE    TYPE                –建立类型
   CREATE    OPERATOR       –创建操作者
   CREATE    INDEXTYPE      –创建索引类型
   CREATE    TABLE              –创建表

授权角色给用户的sql语句:
GRANT role TO username;
例子:grant connect,resource,dba to leilei; 

注意:这两个角色的权限可能需要在sys用户下给testuser授权
grant select on  csm_mid.pob_rtu to testuser;
grant connect, resource to  testuser;

假如现在将用户user1的表table1的select权限赋予testuser
以user1连接到oracle,执行以下sql语句
grant select on  table1 to testuser;

现在我们用testuser用户名连接后查询table1表的数据
select * user1.table1 from testuser;
注意:表table1之前必须要加上user1

如果我们希望查询表table1时,前面不要加user1,可以这样做:
首先授予testuser创建视图的权限
grant create view to testuser;

然后在在testuser用户先以user1.table1为基表创建视图v_user1_table1
create view v_user1_table1
as
select *
from user1.table1;
我们就可以用如下查询了:
select * from v_user1_table1;

 
5.查看用户权限

查看所有用户
SELECT * FROM DBA_USERS;
SELECT * FROM ALL_USERS;
SELECT * FROM USER_USERS;

查看用户系统权限
SELECT * FROM DBA_SYS_PRIVS;
SELECT * FROM USER_SYS_PRIVS;

查看用户对象或角色权限
SELECT * FROM DBA_TAB_PRIVS;
SELECT * FROM ALL_TAB_PRIVS;
SELECT * FROM USER_TAB_PRIVS;

查看所有角色
SELECT * FROM DBA_ROLES;

查看用户或角色所拥有的角色
SELECT * FROM DBA_ROLE_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;

遇到no privileges on tablespace ‘tablespace ‘
alter user userquota 10M[unlimited] on tablespace;