Oracle 用户 表 表空间之间的关系和管理

2018/07/03 16:37
阅读数 25

文献地址: https://blog.csdn.net/jmilk/article/details/51599260

https://www.cnblogs.com/roger112/p/7685307.html

https://www.cnblogs.com/summary-2017/p/7866005.html

https://www.cnblogs.com/kevinanni/p/3688921.html

https://www.cnblogs.com/roger112/p/7685307.html

Oracle数据库介绍:   完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等); 2) Oracle数据库实例则是一组Oracle后台进程/线程以及在服务器分配的共享内存区。

在启动Oracle数据库服务器时,实际上是在服务器的内存中创建一个Oracle实例(即在服务器内存中分配共享内存并创建相关的后台内存),然后由这个Oracle数据库实例来访问和控制磁盘中的数据文件。Oracle有一个很大的内存快,成为全局区(SGA)。

用Oracle官方描述:实例是访问Oracle数据库所需的一部分计算机内存和辅助处理后台进程,是由进程和这些进程所使用的内存(SGA)所构成一个集合。
其实就是用来访问和使用数据库的一块进程,它只存在于内存中。就像Java中new出来的实例对象一样。
我们访问Oracle都是访问一个实例,但这个实例如果关联了数据库文件,就是可以访问的,如果没有,就会得到实例不可用的错误。
实例名指的是用于响应某个数据库操作的数据库管理系统的名称。她同时也叫SID。实例名是由参数instance_name决定的。

 

用户介绍:Oracle数据库建好后,要想在数据库里建表,必须先为数据库建立用户,并为用户指定表空间。上面我们建好了数据库和表空间,接下来建用户,可以在建表时和建表后对用户指定表空间。

 

权限:在pl/sql developer 即使没有做权限也可以进行相关操作,但是本身没权限是在其他编译的时候是行不通的,用户权限的管理很重要。

 

表空间概述

Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库对象(如:数据文件)的逻辑空间,是Oracle中信息存储的最大逻辑单元,其下还包含有段、区、数据块等逻辑数据类型。表空间是在数据库中开辟的一个空间,用于存放数据库的对象,一个数据库可以由多个表空间组成。可以通过表空间来实现对Oracle的调优。(Oracle数据库独特的高级应用)

表空间的分类

  • 永久表空间:存储数据库中需要永久化存储的对象,比如二维表、视图、存储过程、索引。
  • 临时表空间:存储数据库的中间执行过程,如:保存order by数据库排序,分组时产生的临时数据。操作完成后存储的内容会被自动释放。临时表空间是通用的,所的用户都使用TEMP作为临时表空间。一般只有tmp一个临时表空间,如果还需要别的临时表空间时,可以自己创建。
  • UNDO表空间:保存数据修改前的副本。存储事务所修改的旧址,即被修改之前的数据。当我们对一张表中的数据进行修改的同时会对修改之前的信息进行保存,为了对数据执行回滚、恢复、撤销的操作。

 

有关用户的操作:

一、创建用户

oracle内部有两个建好的用户:system和sys。用户可直接登录到system用户以创建其他用户,因为system具有创建别 的用户的 权限。 在安装oracle时,用户或系统管理员首先可以为自己建立一个用户。

语法[创建用户]: create user 用户名 identified by 口令[即密码];

例子: create user test identified by test;

语法[更改用户]: alter user 用户名 identified by 口令[改变的口令];

例子: alter user test identified by 123456;

 

二、删除用户

语法:drop user 用户名;

例子:drop user test;

若用户拥有对象,则不能直接删除,否则将返回一个错误值。指定关键字cascade,可删除用户所有的对象,然后再删除用户。

语法: drop user 用户名 cascade;

例子: drop user test cascade;

 

三、授权角色

oracle为兼容以前版本,提供三种标准角色(role):connect/resource和dba.

(1)讲解三种标准角色:

1》. connect role(连接角色)

--临时用户,特指不需要建表的用户,通常只赋予他们connect role. 

--connect是使用oracle简单权限,这种权限只对其他用户的表有访问权限,包括select/insert/update和delete等。

--拥有connect role 的用户还能够创建表、视图、序列(sequence)、簇(cluster)、同义词(synonym)、回话(session)和其他  数据的链(link)

 

2》. resource role(资源角色)

--更可靠和正式的数据库用户可以授予resource role。

--resource提供给用户另外的权限以创建他们自己的表、序列、过程(procedure)、触发器(trigger)、索引(index)和簇(cluster)。

 

3》. dba role(数据库管理员角色)

--dba role拥有所有的系统权限

--包括无限制的空间限额和给其他用户授予各种权限的能力。system由dba用户拥有

 

(2)授权命令

语法: grant connect, resource to 用户名;

 例子: grant connect, resource to test;

   (3)撤销权限

      语法: revoke connect, resource from 用户名;

      列子: revoke connect, resource from test;

 

四、创建/授权/删除角色

除了前面讲到的三种系统角色----connect、resource和dba,用户还可以在oracle创建自己的role。用户创建的role可以由表或系统权限或两者的组合构成。为了创建role,用户必须具有create role系统权限。

1》创建角色

语法: create role 角色名;

例子: create role testRole;

2》授权角色

语法: grant select on class to 角色名;

列子: grant select on class to testRole;

注:现在,拥有testRole角色的所有用户都具有对class表的select查询权限

3》删除角色

语法: drop role 角色名;

例子: drop role testRole;

注:与testRole角色相关的权限将从数据库全部删除

 

有关表空间的操作:

1. 创建表空间
create tablespace SIRM2 
datafile 'D:\oracle\product\10.2.0\oradata\orcl\SIRM2.dbf' size 1024M --存储地址 初始大小1G
autoextend on next 10M maxsize unlimited   --每次扩展10M,无限制扩展
EXTENT MANAGEMENT local  autoallocate
segment space management auto;
2.创建用户
 create user test  identified by test 
default tablespace SIRM2
  temporary tablespace TEMP
  profile DEFAULT;
3.授权
grant dba to test;
grant connect to test;
grant resource to test;
 
SYS用户在CMD下以DBA身份登陆: 
 
在CMD中打sqlplus /nolog 
 
然后再 
 
conn / as sysdba 
 
//创建临时表空间   
 
  
 
create temporary tablespace user_temp   
 
tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf'  
 
size 50m   
 
autoextend on   
 
next 50m maxsize 20480m   
 
extent management local;   
 
  
 
//创建数据表空间   
 
create tablespace test_data   
logging   
 
datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf'  
size 50m   
 
autoextend on   
 
next 50m maxsize 20480m   
 
extent management local;   
 
  
 
//创建用户并指定表空间   
 
create user username identified by password   
 
default tablespace user_data   
temporary tablespace user_temp;   
 
  
 
//给用户授予权限   
 
  
 
grant connect,resource to username;   
 
  
 
//以后以该用户登录,创建的任何数据库对象都属于user_temp 和user_data表空间, 
这就不用在每创建一个对象给其指定表空间了  
 
撤权:   
 
       revoke   权限...   from  用户名; 
 
删除用户命令 
 
drop user user_name cascade; 
 
建立表空间 
 
CREATE TABLESPACE data01 
DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M 
UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k 
 
删除表空间 
 
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES; 
一、建立表空间 
 
CREATE TABLESPACE data01 
DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M 
UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k 
 
二、建立UNDO表空间 
 
CREATE UNDO TABLESPACE UNDOTBS02 
 
DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M 
 
#注意:在OPEN状态下某些时刻只能用一个UNDO表空间,如果要用新建的表空间,必须切换到该表空间: 
 
ALTER SYSTEM SET undo_tablespace=UNDOTBS02; 
 
三、建立临时表空间 
 
CREATE TEMPORARY TABLESPACE temp_data 
TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M 
四、改变表空间状态 
 
1.使表空间脱机 
 
ALTER TABLESPACE game OFFLINE; 
 
如果是意外删除了数据文件,则必须带有RECOVER选项 
 
ALTER TABLESPACE game OFFLINE FOR RECOVER; 
 
2.使表空间联机 
 
ALTER TABLESPACE game ONLINE; 
3.使数据文件脱机 
 
ALTER DATABASE DATAFILE 3 OFFLINE; 
 
4.使数据文件联机 
 
ALTER DATABASE DATAFILE 3 ONLINE; 
5.使表空间只读 
 
ALTER TABLESPACE game READ ONLY; 
6.使表空间可读写 
 
ALTER TABLESPACE game READ WRITE; 
 
五、删除表空间 
 
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES; 
六、扩展表空间 
 
首先查看表空间的名字和所属文件 
 
select tablespace_name, file_id, file_name, 
 
round(bytes/(1024*1024),0) total_space 
 
from dba_data_files 
order by tablespace_name; 
 
1.增加数据文件 
 
ALTER TABLESPACE game 
 
ADD DATAFILE '/oracle/oradata/db/GAME02.dbf' SIZE 1000M; 
 
2.手动增加数据文件尺寸 
 
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf'
 
RESIZE 4000M; 
 
3.设定数据文件自动扩展 
 
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf 
 
AUTOEXTEND ON NEXT 100M 
 
MAXSIZE 10000M; 
 
设定后查看表空间信息 
 
SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE, 
 
(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
 
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C 
 

WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE

 

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部