oracle 用戶與表空間關系
oracle用戶與表空間關系
用戶=商家
表=商品
表空間=倉庫
1. 1個商家能有很多商品,1個商品只能屬於一個商家
2. 1個商品可以放到倉庫A,也可以放到倉庫B,但不能同時放入A和B
3. 倉庫不屬於任何商家
4. 商家都有一個默認的倉庫,如果不指定具體倉庫,商品則放到默認的倉庫中
oracle中用戶的所有數據都是存放在表空間中的,很多個用戶可以共用一個表空間,也可以指定一個用戶只用某一個表空間。
表空間:創建表空間會在物理磁盤上建立一個數據文件,作為數據庫對象(用戶、表、存儲過程等等)的物理存儲空間;
用戶:創建用戶必須為其指定表空間,如果沒有顯性指定默認表空間,則指定為users表空間;創建用戶后,可以在用戶上,創建表、存儲過程等等其他數據庫對象;
表:是數據記錄的集合;
創建過程: 表空間--->用戶--->表;
所屬關系: 表空間 包含 用戶 包含 表;
http://www.cnblogs.com/cici-new/archive/2012/12/25/2831740.html
1.首先是ORACLE的整體結構。
oracle中的一個數據庫就是一個實例.
oracle的一個用戶就是一個Schema(即方案).
oracle的結構是===
實例->用戶->表(用戶屬於數據庫實例,表屬於某個用戶)
所以在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 v$process;
查看數據庫當前會話的連接數:
select count(*) from v$session;
查看數據庫的並發連接數:
select count(*) from v$session where status='ACTIVE';
查看當前數據庫建立的會話情況:
select sid,serial#,username,program,machine,status from v$session;
查詢數據庫允許的最大連接數:
select value from v$parameter where name = 'processes';
Oracle用戶和模式的區別
轉自:http://database.51cto.com/art/201010/231679.htm
Oracle用戶是Oracle數據庫中的重要概念,下面就為您介紹Oracle用戶和模式的區別,希望對您學習Oracle用戶方面能夠有所幫助。
(一)什么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 * from scott.emp。
在數據庫中一個對象的完整名稱為schema.object,而不屬user.object。類似如果我們在創建對象時不指定該對象的schema,在該對象的schema為用戶的缺省schema。這就像一個用戶有一個缺省的表空間,但是該用戶還可以使用其他的表空間,如果我們在創建對象時不指定表空間,則對象存儲在缺省表空間中,要想讓對象存儲在其他表空間中,我們需要在創建對象時指定該對象的表空間。
以下來自另一文:
oracle模式的概念
轉自:http://hi.baidu.com/yuyumilk/item/8c6ed580247402ede496e09f
模式是一系列邏輯數據結構或者對象的集合。一個數據庫用戶擁有一個模式,模式的名字和數據庫用戶的名字相同。每個用戶有一個單獨的模式,用戶創建的對象放在自己的模式中,這個對象叫做模式對象。
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 * fromscott.emp。在數據庫中一個對象的完整名稱為schema.object,而不屬user.object。類似如果我們在創建對象時不指定該對象的schema,在該對象的schema為用戶的缺省schema。這就像一個用戶有一個缺省的表空間,但是該用戶還可以使用其他的表空間,如果我們在創建對象時不指定表空間,則對象存儲在缺省表空間中,要想讓對象存儲在其他表空間中,我們需要在創建對象時指定該對象的表空間。
SQL>Gruant dba to scott
SQL>create table test(name char(10));
Tablecreated.
SQL>create table system.test(name char(10));
Tablecreated.
SQL>insert into test values('scott');
1row created.
SQL>insert into system.test 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了。”---摘自網絡
