Oracle数据库中用户、表空间、模式之间的关系
Oracle数据库中⽤户、表空间、模式之间的关系
oracle⽤户与表空间关系
澳门购物攻略2013⽤户=商家
表=商品
表空间=仓库
1. 1个商家能有很多商品,1个商品只能属于⼀个商家
2. 1个商品可以放到仓库A,也可以放到仓库B,但不能同时放⼊A和B
3. 仓库不属于任何商家
4. 商家都有⼀个默认的仓库,如果不指定具体仓库,商品则放到默认的仓库中
oracle中⽤户的所有数据都是存放在表空间中的,很多个⽤户可以共⽤⼀个表空间,也可以指定⼀个⽤户只⽤某⼀个表空间。
益禾堂加盟费多少
表空间:创建表空间会在物理磁盘上建⽴⼀个数据⽂件,作为数据库对象(⽤户、表、存储过程等等)的物理存储空间;
⽤户:创建⽤户必须为其指定表空间,如果没有显性指定默认表空间,则指定为users表空间;创建⽤户后,可以在⽤户上,创建表、存储过程等等其他数据库对象;
表:是数据记录的集合;
创建过程: 表空间—>⽤户—>表;
所属关系: 表空间 包含 ⽤户 包含 表;
所以在oracle下建⽴ 建表空间,建⽤户,设置⽤户的默认表空间,在⽤户下建表;
–创建数据表空间
create tablespace CICI
logging
datafile ‘D:\oraclexe\app\oracle\oradata\CICI\CICI.DBF’
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
–创建⽤户并指定表空间
CREATE USER cici IDENTIFIED BY cici
PROFILE DEFAULT
DEFAULT TABLESPACE CICI
ACCOUNT UNLOCK;
– 为⽤户赋予权限
GRANT connect, resource TO cici;
grant create session to cici;
查询数据库当前进程的连接数:
select count() from vprocess;查看数据库当前会话的连接数:selectcount(∗)fromvsession;
查看数据库的并发连接数:
select count() from vsession where status=‘ACTIVE’; 查看当前数据库建⽴的会话情况: select
sid,serial#,username,program,machine,status from vsession;
查询数据库允许的最⼤连接数:
select value from v$parameter where name = ‘processes’;
(⼀)什么Oracle叫⽤户(user):
A user is a name defined in the database that can connect to and access objects.
Oracle⽤户是⽤连接数据库和访问数据库对象的。(⽤户是⽤来连接数据库访问数据库)。
(⼆)什么叫模式(schema):
A schema is a collection of database objects (used by a user.).
Schema objects are the logical structures that directly refer to the database’s data.
模式是数据库对象的集合。模式对象是数据库数据的逻辑结构。
(把数据库对象⽤模式分开成不同的逻辑结构)。
(三)⽤户(user)与模式(schema)的区别:
Schemas and users help database administrators manage database security.
⽤户是⽤来连接数据库对象。⽽模式是⽤来创建管理对象的。模式跟⽤户在oracle 是⼀对⼀的关系。
(不过db2却不同,db2⼀个⽤户可以对应多个模式,db2⽤户是系统,他⾸先必须获得系统⽤户才能成为数据库⽤户,也就是数据库⽤户就是系统⽤户,只有模式才是数据库类似⽤户。有兴趣可以去研究。这⾥就不跑题了,这也是db2特有的)。
从定义中我们可以看出schema为数据库对象的集合,为了区分各个集合,我们需要给这个集合起个名
字,这些名字就是我们在企业管理器的⽅案下看到的许多类似⽤户名的节点,这些类似⽤户名的节点其实就是⼀个schema,schema⾥⾯包含了各种对象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。
⼀个⽤户⼀般对应⼀个schema,该⽤户的schema名等于⽤户名,并作为该⽤户缺省schema。这也就是我们在企业管理器的⽅案下看到schema名都为数据库⽤户名的原因。
Oracle数据库中不能新创建⼀个schema,要想创建⼀个schema,只能通过创建⼀个⽤户的⽅法解决(Oracle中虽然有create schema语句,但是它并不是⽤来创建⼀个schema的)。
在创建⼀个⽤户的同时为这个⽤户创建⼀个与⽤户名同名的schem并作为该⽤户的缺省shcema。即schema的个数同user的个数相同,⽽且schema名字同user名字⼀⼀对应并且相同,所有我们可以称schema为user的别名,虽然这样说并不准确,但是更容易理解⼀些。
⼀个⽤户有⼀个缺省的schema,其schema名就等于⽤户名,当然⼀个⽤户还可以使⽤其他的schema。如果我们访问⼀个表时,没有指明该表属于哪⼀个schema中的,系统就会⾃动给我们在表上加上缺省的sheman名。
⽐如我们在访问数据库时,访问scott⽤户下的emp表,通过select * from emp;
其实,这sql语句的完整写法为select * p。
在数据库中⼀个对象的完整名称为schema.object,⽽不属user.object。类似如果我们在创建对象时不指定该对象的schema,在该对象的schema为⽤户的缺省schema。这就像⼀个⽤户有⼀个缺省的表空间,但是该⽤户还可以使⽤其他的表空间,如果我们在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。
以下来⾃另⼀⽂:
oracle模式的概念
模式是⼀系列逻辑数据结构或者对象的集合。⼀个数据库⽤户拥有⼀个模式,模式的名字和数据库⽤户的名字相同。每个⽤户有⼀个单独的模式,⽤户创建的对象放在⾃⼰的模式中,这个对象叫做模式对象。
Oracle中有以下模式对象:
聚簇(clusters)
数据库链接(database links)
触发器(triggers)
维(dimensions)
序列(sequence)
函数(function)
存储过程(procedures)
包(package)
同义词(synonyms)
表(table)
索引组织表(index - organized -table)
视图(views)
电子商务专业就业外部过程(external procedure libraries)
索引(indexes)
索引类型(index types)
java类 (java classes)
java资源(java resources )
java 源(java sources)
物化视图(materialized views)
对象表(object table )
火炬之光 法师加点操作符(operators)
此外,在数据库中还有⼀些其他对象,但是这些对象不属于模式对象,我们把这些对象叫⾮模式对象,⾮模式对象有:
上下⽂(contexts)
⽬录(directories)
资源限制⽂件(profiles)
⾓⾊(roles)
表空间(tablespaces)
⽤户(users)
模式对象存储在表空间中,但是模式对象与表空间、数据⽂件没有对应关系。模式和表空间、数据⽂件也没有对应关系。
A⽤户是表table1的属主,B⽤户要查询table1中的数据
1、⽤户A给⽤户B授权查询权限(⽤户B登录数据后可以查询,select * from A.table1,必须显⽰写上属主才能查询)
2、⽤户A给table1建同义词,查询table1时,可以直接select * from table1,隐藏掉table1的属主
create orreplace synonym lsfapcopr.tsysparameter for lsfapdata.tsysparameter;
1、属主(owner)⽤简单的话来说就是数据库的⽤户。
2、Schema是数据库对象的集合,⼀个⽤户⼀般对应⼀个schema,该⽤户的schema名等于⽤户名,并作为该⽤户的缺省schema,这也是为什么程序中的schema名都为数据库⽤户名的原因。注意:Oracle数据库中不能新创建⼀个schema,要想创建⼀个schema,只能通过创建⼀个⽤户的⽅法解决。
3、同义词(synonyms)从字⾯上理解就是别名的意思,和试图的功能类似,就是⼀种映射关系。设置同义词后,⽤有权限的⽤户访问时,可以隐蔽掉user名。
有的⼈还是对schema的真正含义不太理解,现在我再次整理了⼀下,希望对⼤家有所帮助。
我们先来看⼀下他们的定义:
Aschema is a collection of database objects (used by a user.).
Schemaobjects are the logical structures that directly refer to the database’s data.
Auser is a name defined in the database that can connect to and access objects.
Schemasand users help database administrators manage database security.
遗属补助
从定义中我们可以看出schema为数据库对象的集合,为了区分各个集合,我们需要给这个集合起个名字,这些名字就是我们在企业管理器的⽅案下看到的许多类似⽤户名的节点,这些类似⽤户名的节点其实就是⼀个schema,schema⾥⾯包含了各种对象如tables,views, sequences, stored procedures, synonyms, indexes, clusters, and databaselinks。
⼀个⽤户⼀般对应⼀个schema,该⽤户的schema名等于⽤户名,并作为该⽤户缺省schema。这也就是我们在企业管理器的⽅案下看到schema名都为数据库⽤户名的原因。Oracle数据库中不能新创建⼀个schema,要想创建⼀个schema,只能通过创建⼀个⽤户的⽅法解决(Oracle中虽然有createschema语句,但是它并不是⽤来创建⼀个schema的),在创建⼀个⽤户的同时为这个⽤户创建⼀个与⽤户名同名的schem并作为该⽤户的缺省shcema。即schema的个数同user的个数相同,⽽且schema名字同user名字⼀⼀ 对应并且相同,所有我们可以称schema为user的别名,虽然这样说并不准确,但是更容易理解⼀些。
⼀个⽤户有⼀个缺省的schema,其schema名就等于⽤户名,当然⼀个⽤户还可以使⽤其他的schema。如果我们访问⼀个表时,没有指明该表属于哪⼀个schema中的,系统就会⾃动给我们在表上加上缺省的sheman名。⽐如我们在访问数据库时,访问scott⽤户下的emp 表,通过select* from emp; 其实,这sql语句的完整写法为select * p。在数据库中⼀个对象的完整名称为
schema.object,⽽不属user.object。类似如果我们在创建对象时不指定该对象的schema,在该对象的schema为⽤户的缺省schema。这就像⼀个⽤户有⼀个缺省的表空间,但是该⽤户还可以使⽤其他的表空间,如果我们在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。
SQL>Gruant dba to scott
SQL>create table test(name char(10));
Tablecreated.
SQL>create st(name char(10));
Tablecreated.
SQL>insert into test values(‘scott’);
1row created.
SQL>insert st values(‘system’);
1row created.
SQL>commit;
五行缺木的男孩名字Commitcomplete.
SQL>conn system/manager
Connected.
SQL>select * from test;
NAME
system
SQL>ALTER SESSION SET CURRENT_SCHEMA = scott; --改变⽤户缺省schema名
Sessionaltered.
SQL>select * from test;
NAME
scott
SQL>select owner ,table_name from dba_tables where table_name=upper(‘test’);
OWNERTABLE_NAME
SCOTTTEST
SYSTEMTEST
表空间:
⼀个表空间就是⼀⽚磁盘区域,他⼜⼀个或者多个磁盘⽂件组成,⼀个表空间可以容纳许多表、索引或者簇等
每个表空间⼜⼀个预制的打⼀磁盘区域称为初始区间(initialextent)⽤完这个区间厚在⽤下⼀个,知道⽤完表空间,这时候需要对表空间进⾏扩展,增加数据⽂件或者扩⼤已经存在的数据⽂件
schema:
⼀般⽽⾔,⼀个⽤户就对应⼀个schema,该⽤户的schema名等于⽤户名,并作为该⽤户缺省schema,⽤户是不能创建schema
的,schema在创建⽤户的时候创建,并可以指定⽤户的各种表空间(这点与PostgreSQL是不同,PostgreSQL是可以创建schema并指派给某个⽤户)。当前连接到数据库上的⽤户创建的所有数据库对象默认都属于这个schema(即在不指明schema的情况下),⽐如若⽤户scott连接到数据库,然后create table test(id int not null)创建表,那么这个表被创建在了scott这个schema中;但若这样create kanon.table test(id int notnull)的话,这个表被创建在了kanon这个schema中,当然前提是权限允许。
创建⽤户的⽅法是这样的:
create user ⽤户名identified by 密码
default tablespace 表空间名
temporary tablespace 表空间名
quota 限额 (建议创建的时候指明表空间名)
由此来看,schema是⼀个逻辑概念。
但⼀定要注意⼀点:schema好像并不是在创建user时就创建的,⽽是在该⽤户创建了第⼀个对象之后才将schema真正创建的,只有user 下存在对象,他对应的schema才会存在,如果user下不存在任何对象了,schema也就不存在了;
“我们可以把Database看作是⼀个⼤仓库,仓库分了很多很多的房间,Schema就是其中的房间,⼀个Schema代表⼀个房间,Table可以看作是每个Schema中的床,Table(床)被放⼊每个房间中,不能放置在房间之外,那岂不是晚上睡觉⽆家可归了,然后床上可以放置很多物品,就好⽐ Table上可以放置很多列和⾏⼀样,数据库中存储数据的基本单元是Table,现实中每个仓库放置物品的基本单位就是床,User就是每个Schema的主⼈,(所以Schema包含的是Object,⽽不是User),user和schema是⼀⼀对应的,每个user在没有特别指定下只能使⽤⾃⼰schema(房间)的东西,如果⼀个user想使⽤其他schema(房间)的东西,那就要看那个schema(房间)的
user(主⼈)有没有给你这个权限了,或者看这个仓库的⽼⼤(DBA)有没有给你这个权限了。换句话说,如果你是某个仓库的主⼈,那么这个仓库的使⽤权和仓库中的所有东西都是你的(包括房间),你有完全的操作权,可以扔掉不⽤的东西从每个房间,也可以放置⼀些有⽤的东西到某⼀个房间,你还可以给每个User分配具体的权限,也就是他到某⼀个房间能做些什么,是只能看(Read-Only),还是可以像主⼈⼀样有所有的控制权(R/W),这个就要看这个User所对应的⾓⾊Role了。”—摘⾃⽹络

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。