oracle用戶與表空間關係
用戶=商家
表=商品
表空間=倉庫
1. 1個商家能有不少商品,1個商品只能屬於一個商家
2. 1個商品能夠放到倉庫A,也能夠放到倉庫B,但不能同時放入A和B
3. 倉庫不屬於任何商家
4. 商家都有一個默認的倉庫,若是不指定具體倉庫,商品則放到默認的倉庫中html
oracle中用戶的全部數據都是存放在表空間中的,不少個用戶能夠共用一個表空間,也能夠指定一個用戶只用某一個表空間。
表空間:建立表空間會在物理磁盤上創建一個數據文件,做爲數據庫對象(用戶、表、存儲過程等等)的物理存儲空間;
用戶:建立用戶必須爲其指定表空間,若是沒有顯性指定默認表空間,則指定爲users表空間;建立用戶後,能夠在用戶上,建立表、存儲過程等等其餘數據庫對象;
表:是數據記錄的集合;
建立過程: 表空間--->用戶--->表;
所屬關係: 表空間 包含 用戶 包含 表;sql
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;session
--建立用戶並指定表空間oracle
CREATE USER cici IDENTIFIED BY cici
PROFILE DEFAULT
DEFAULT TABLESPACE CICI
ACCOUNT UNLOCK;
-- 爲用戶賦予權限
GRANT connect, resource TO cici;
grant create session to cici;
-- 登陸用戶
sql>conn
請輸入用戶名 cici
請輸入密碼 XXXXXX
---創建表app
create table aa(name varchar2(100),age number(4));
insert into aa values('wo',29);
-- 查詢表
select * from cici.A;ide
select * from session_privs;
查看系統權限和對象權限
select * from dba_sys_privs;
select * from dba_tab_privs;
改本身的密碼,不須要dba的權限,但要使用舊密碼進行驗證,用如下語句便可
alter user hr identified by 123456 replace zxcasd;
select table_name from user_tables;
desc jobs
set pagesize 200
select * from jobs;
desc locations
set linesize 200
select * from locations;spa
############################日誌
rac上建立表空間
create tablespace MONITOR datafile '+DATA1/baoka/datafile/monitor.dbf' size 4096m autoextend on;
select * from v$tablespace;
select * from v$datafile;
drop tablespace MONITOR including contents and datafiles;
create tablespace monitor logging
datafile '+DATA1/baoka/datafile/monitor.dbf'
size 100m
autoextend on
next 50m maxsize 2048m
extent management local;
select * from v$tablespace;
select * from v$datafile;
create user monitor identified by "lCp_mon1"
default tablespace monitor;
grant connect,resource to monitor;
############################
下面是單實例上建立表空間
select * from v$tablespace;
select * from v$datafile;
三步走
create tablespace monitor
logging
datafile '/u01/app/oracle/oradata/testdb/monitor.dbf'
size 100m
autoextend on
next 50m maxsize 20480m
extent management local;
create user monitor identified by "lCp_mon1"
default tablespace monitor;
grant connect,resource to monitor;
以用戶monitor經過sqldeveloper鏈接庫,執行monitor.sql腳本便可,將表空間名字替換便可USERS->monitor
#####################################
##################################
undo表空間管理
你能夠創建多個undo表空間,可是當前在用undo表空間只能是其中一個。rac除外
只能是一個,可是能夠新建另一個,把原來的失效,再指向新UNDO表空間
修改默認的undo表空間爲新建立的
show parameter undo;
alter system set undo_tablespace=undo1;
undo表空間用於存放undo數據,當執行DML操做(insert、update、delete)時,oracle會將這些操做的舊數據寫入到undo段。
知道updata語句執行會產生undo信息,將老的數據保存到undo表空間中。
那麼select語句會產生undo信息嗎?產生什麼信息呢?select會將什麼保存的表空間中呢?
insert呢?又會產生undo信息嗎?將什麼保存到undo表空間呢?
新建一個表,插入十萬數據,執行:
sql>select addr, used_ublk from v$transaction;
ADDR USED_UBLK
-------- ----------
3B7D6984 87
產生87塊,產生undo信息了嗎?表是新建的,沒有任何信息,也就是沒有老的數據,那麼會產生undo信息嗎?在undo表空間存入什麼呢?
還原段用途:
事務處理回退——當某事務處理修改表中某行時,被修改的列的舊映像(要還原的數據)將存儲在還原段中。若是將該事務處理回退,則Oracle 服務器經過將還原段中的值寫回到該行來恢復原始值。
事務處理恢復——若是例程在事務處理正在進行時失敗,那麼Oracle 服務器須要在數據庫再次打開時還原全部未提交的更改。這種回退操做是事務處理恢復的一部分。之因此有可能恢復事務處理,緣由在於對還原段所作的更改一樣受重作日誌文件的保護。
讀一致性——在事務處理正在進行時,數據庫中的其餘用戶不該看到這些事務處理所作的任何未提交更改。此外,也不該從某條語句中看到該語句開始執行後所提交的任何更改。還原段中的舊值(要還原的數據)也可用於爲讀者提供給定語句的一致映像。
oracle中undo是用來存放回滾數據的。
撤銷(Undo)數據是反轉DML語句結果所需的信息。撤銷數據一般被稱爲「回滾數據」,在過去的Oracle版本中,「回滾數據」和「撤銷數據」能夠交替使用,但從 9i版本開始,這兩個術語有所不一樣:功能相同,但管理方式不一樣。只要某個事務修改了數據,那麼更新前的原有數據就會被寫入一個回滾段或撤銷段。回滾段在 11g版本中依然存在,但從9i版本開始,Oracle數據庫引入了可供選擇的撤銷段。Oracle強烈建議全部數據庫都應當使用撤銷段,回滾段只被保留用於向後兼容 。
undo表空間:
一個數據庫能夠存在多個撤銷表空間,可是在任意給定時刻都只能使用一個撤銷表空間。撤銷表空間必須被建立爲持久的、本地管理的而且可以自動擴展分配空間的表空間。
事務與undo段:
在某個事務啓動時,Oracle會爲其指派一個撤銷段。任何一個事務都只能受一個撤銷段保護,一個事務生成的撤銷數據沒法被分配到多個撤銷段中。
在某個事務更新表和索引數據塊時,回滾該變化所需的信息會被寫入指定撤銷表空間的數據塊。撤銷數據在提交後過時的事實意味着能夠採用循環方式使用撤銷段。若是使用原有的、人工管理的回滾段,那麼調整的重要環節是控制具體事務分別受哪些回滾段保護。
oracle會將沒有commit或rollback的數據放入undo表空間
update\insert\delete 都會使用undo表空間,
select 應該不會,會使用temp表空間
你不是插入10萬的數據了嗎,在執行 commit或rollback 以前 會使用undo表空間
########################
temp表空間的管理
臨時表空間的主要做用: 索引CREATE或REBUILD; ORDER BY 或 GROUP BY; DISTINCT 操做; UNION 或 INTERSECT 或 MINUS; SORT - MERGE JOINS; ANALYZE.
SELECT
SE.USERNAME,
SE.SID,
SE.SERIAL#,
SE.SQL_ADDRESS,
SE.MACHINE,
SE.PROGRAM,
SU.TABLESPACE,
SU.SEGTYPE,
SU.CONTENTS
FROM V$SESSION SE,
V$SORT_USAGE SU
WHERE SE.SADDR = SU.SESSION_ADDR;
##############################
unable to extend temp segment by 128 in tablespace KYC_TEMP
PERMENT段UNDO段TEMP段