轉至:https://liujianshiwo.iteye.com/blog/1988094
不同於mysql有多個數據庫, oracle新增了表空間和用戶的概念,表空間是虛擬的,並且只有一個數據庫,為了方便維護,一般一個表空間上只創建一個用戶;
這里的用戶名類似於mysql的數據庫名,oracle的用戶名.表名等價於mysql的數據庫名.表名;因此在寫兼容mysql和oracle的語句時可以用到。
oracle安裝完數據庫的一般流程:先建表空間(分區)-->再建用戶(分配相應的表空間和用戶權限)-->登陸用戶,建表
1. 創建表空間
create tablespace xin_datafile
datafile 'C:\kingstar\orcltb\xin_tb1.dbf' size 500M --存儲地址 初始大小500M
autoextend on next 10M maxsize 200M --每次擴展10M,無限制擴展 unlimited
extent management local autoallocate
segment space management auto;
--創建臨時表空間
create temporary tablespace user_temp
tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50m
autoextend on next 50m maxsize 20480m
extent management local;
--刪除表空間
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;
--表空間屬性
每塊的字節大小:8192
表空間自增量:increment_by*8192 byte ; 換算: increment_by*8192/1024/1024 M 或者 increment_by/128M
注意*:若表空間初始化大小為500M,閥值為1G,自增量為300M,自增一次后的表空間大小為800M,不會受自動擴展容量的限制,最終會擴展為與閥值相等。
--查詢表空間信息
select * from dba_data_files t order by tablespace_name;
--建立UNDO表空間
CREATE UNDO TABLESPACE UNDOTBS02
DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M
#注意:在OPEN狀態下某些時刻只能用一個UNDO表空間,如果要用新建的表空間,必須切換到該表空間:
ALTER SYSTEM SET undo_tablespace=UNDOTBS02;
--改變表空間狀態
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;
--擴展表空間
首先查看表空間的名字和所屬文件
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
2.創建用戶
create user test identified by test
default tablespace SIRM2
temporary tablespace TEMP
profile DEFAULT;
--創建用戶並指定表空間
create user username identified by password
default tablespace user_data
temporary tablespace user_temp;
--刪除用戶命令
drop user user_name cascade;
3.授權
grant dba to test;
grant connect to test;
grant resource to test;
--給用戶授予權限
grant connect,resource to username;
撤權:
revoke 權限... from 用戶名;
4. SYS用戶在CMD下以DBA身份登陸:
在CMD中打sqlplus /nolog
然后再 conn / as sysdba
附加1:
oarcle數據庫真正存放數據的是數據文件(data files),Oarcle表空間(tablespaces)實際上是一個邏輯的概念,他在物理上是並不存在的,那么把一組data files 捻在一起就成為一個表空間。(https://www.cnblogs.com/fnng/archive/2012/08/12/2634485.html)
表空間屬性:
一個數據庫可以包含多個表空間,一個表空間只能屬於一個數據庫
一個表空間包含多個數據文件,一個數據文件只能屬於一個表空間
表這空間可以划分成更細的邏輯存儲單元
Oracle數據庫的存儲結構:
從邏輯的角度來看,一個數據庫(database)下面可以分多個表空間(tablespace);一個表空間下面又可以分多個段(segment);一個數據表要占一個段(segment),一個索引也要占一個段(segment )。 一個段(segment)由多個 區間(extent)組成,那么一個區間又由一組連續的數據塊(data block)組成。這連續的數據塊是在邏輯上是連續的,有可能在物理磁盤上是分散。
那么從物理的角度上看,一個表空間由多個數據文件組成,數據文件是實實在在存在的磁盤上的文件。這些文件是由oracle數據庫操作系統的block 組成的。
Segment(段) :段是指占用數據文件空間的通稱,或數據庫對象使用的空間的集合;段可以有表段、索引段、回滾段、臨時段和高速緩存段等。
Extent (區間):分配給對象(如表)的任何連續塊叫區間;區間也叫擴展,因為當它用完已經分配的區間后,再有新的記錄插入就必須在分配新的區間(即擴展一些塊);一旦區間分配給某個對象(表、索引及簇),則該區間就不能再分配給其它的對象.
附加2:oracle 表空間創建 格式及屬性說明:http://blog.sina.com.cn/s/blog_3cae66560102w0vk.html
一、創建表空間完整的格式
CREATE [UNDO|TEMPORARY] TABLESPACE tablespace_name
DATAFILE 'path/filename' [SIZE INTEGER[K| M]] [REUSE]
[AUTOEXTEND [OFF | ON ] ]
[NEXT INTEGER[K | M]]
[MAXSIZE [UNLIMITED | INTEGER[K | M]]]
[MINIMUM EXTENT INTEGER[K | M]]
[BLOCKSIZE integer [k]]
[DEFAULT STORAGE storage_clause]
[ONLINE | OFFLINE]
[LOGGING | NOLOGGING]
[FORCE LOGGING]
[EXTENT MANAGEMENT [DICTIONARY | LOCAL]]
[AUTOALLOCATE | UNIFORM [SIZE INTEGER[K | M]]]
[SEGMENT SPACE MANAGEMENT [AUTO | MANUAL]]
二、表空間格式說明
1、UNDO
說明系統將創建一個回滾表空間。
在9i中數據庫管理員可以不必管理回滾段,只有建立了undo表空間,系統就會自動管理回滾段的分配,回收的工作。當然,也可以創建一般的表空間,在上 面創建回滾段.不過對於用戶來說,系統管理比自己管理要好很多.如果需要自己管理,請參見回滾段管理的命令詳解.
當沒有為系統指定回滾表空間時,系統將使用system系統回滾段來進行事務管理。
2、tablespace_name表空間名滿足oracle的命名規范即可。
3、DATAFILE 'path/filename' [SIZE INTEGER[K| M]] [REUSE]
指定一個或多個數據文件路徑和文件名,[SIZE INTEGER[K| M]]用來指定表空間在數據文件中所占的空間大小,K|M是說大小的單位是K還是M。
[REUSE] 如果創建表空間指定的數據文件已經存在,則需要使用reuse注明,否則會報錯。
ERROR at line 1:
ORA-01537: cannot add data file 'E:\oracle\oradata\10.1.0\ZRPTEST\TB_TEST1.dbf'
- file already part of database
4、[AUTOEXTEND [OFF | ON ] ]
禁止或允許自動擴展數據文件,默認情況下為OFF
5、[NEXT INTEGER[K | M]]
指定當需要更多盤區時分配給數據文件的磁盤空間,以K或M為單位。
6、[MAXSIZE [UNLIMITED | INTEGER[K | M]]]
指定允許分配給數據文件的最大磁盤空間,當為UNLIMITED時表示只有當磁盤空間滿時,才不允許再擴展數據文件。
7、[MINMUM EXTENT INTEGER[K | M]]
指定盤區大小是指定大小的整數倍。即initial和next盤區大小應為minimum extent的整數倍,這個參數可以減小空間碎片,保證表空間的范圍是這個值的整數倍。
【注:minextents 用於指定在創建時分配給段的盤區總數。使用這個參數,即使可用空間是不連續的,在創建對象時也能分配很大的空間。默認 值和最小值都是1。如果minextents>1,盤區大小以next和pctincrease為基礎計算。】
8、[BLOCKSIZE integer [k]]
這個參數可以設定一個不標准的塊的大小。如果要設置這個參數,必須設置db_block_size,至少一個db_nk_block_size,
並且聲明的integer的值必須等於db_nk_block_size.
注意:在臨時表空間不能設置這個參數。
9、 [DEFAULT STORAGE storage_clause]
表示為在該表空間創建的全部對象指定缺省的存儲參數,沒有指定時oracle將會為所有對象指定一些系統默認的存儲參數。
storage_clause的語法格式如下:
STORAGE(
INITIAL integer[K|M] --為段分配第一個區的大小
NEXT integer[K|M] --為第一個擴展分區的大小
MINEXTENTS integer|UMLIMITED --創建段時分配的最小總區間數
MAXEXTENTS integer|UMLIMITED --創建段時分配的最大總區間數
PCTINCREASE integer --每次擴展增量的大小
FREELISTS integer --模式對象中每一個自由列表組中自由列表的數量,表、族或索引的每個空閑列表組中的列表數量。
FREELISTS GROUPS integer --指定表、族或索引的每個空閑列表組數量。
)
10、[ONLINE | OFFLINE]
ONLINE是指在創建表空間之后使該表空間立即對授權訪問該表空間的用戶可用。
OFFLINE是指offline以后,未完成的事物可以提交或回滾,但不能發起新的事物,也不能進行查詢。OFFLINE的四種模式
(1)NORMAL:做檢查點
alter tablespace users offline; alter tablespace users online;
(2)TEMPORARY:可以在數據文件損壞的情況下offline tablespace
alter tablespace users offline temporary; alter tablespace users online;
(3)IMMEDIATE:不做檢查點,只有在歸檔模式下才可以offline tablespace,online時需要recover
alter tablespace users offline immediate; recover tablespace users; alter tablespace users online;
(4)FOR RECOVER:在歸檔模式下才可以offonline,在基
11、[LOGGING | NOLOGGING]
指定日志屬性,它表示將來的表、索引等是否需要進行日志處理。默認值為LOGGING
12、[FORCE LOGGING]
使用這個子句指出表空間進入強制日志模式。此時,系統將記錄表空間上對象的所有改變,除了臨時段的改變。這個參數高於對象的nologging選項。
注意:設置這個參數指數據庫不可以open並且進入讀寫模式。而且,在臨時表空間和回滾表空間中不能使用這個選項。
13、[PERMANENT | TEMPORARY]
指出表空間的屬性,是永久表空間還是臨時表空間。永久表空間存放的是永久對象,臨時表空間存放的是session生命期中存在的臨時對象。
這個參數生成的臨時表空間創建后一直都是字典管理,不能使用extent management local選項。
如果要創建本地管理表空間,必須使用create temporary tablespace
注意,聲明了這個參數后,不能聲明block size
14、[EXTENT MANAGEMENT [DICTIONARY | LOCAL]]
[AUTOALLOCATE | UNIFORM [SIZE INTEGER[K | M]]]
這是最重要的子句,說明了表空間如何管理范圍。一旦你聲明了這個子句,只能通過移植的方式改變這些參數。
如果希望表空間本地管理的話,聲明local選項。本地管理表空間是通過位圖管理的。autoallocate說明表空間自動分配范圍,用戶不能指定范圍的大小。
只有9.0以上的版本具有這個功能。uniform說明表空間的范圍的固定大小,缺省是1m。
不能將本地管理的數據庫的system表空間設置成字典管理。oracle公司推薦使用本地管理表空間。
如果沒有設置extent_management_clause,oracle會給他設置一個默認值。如果初始化參數compatible小於9.0.0,那么系統創建字典管理表空間。
如果大於9.0.0,那么按照如下設置:如果沒有指定default storage_clause,oracle創建一個自動分配的本地管理表空間。
否則,如果指定了mininum extent,那么oracle判斷mininum extent 、initial、next是否相等,以及pctincrease是否=0.如果滿足以上的條件,oracle創建一個本地管理
表空間,extent size是initial.如果不滿足以上條件,那么oracle將創建一個自動分配的本地管理表空間。
如果沒有指定mininum extent。initial、那么oracle判斷next是否相等,以及pctincrease是否=0。表示滿足oracle創建一個本地管理表空間並指定uniform。
否則oracle將創建一個自動分配的本地管理表空間。
注意:本地管理表空間只能存儲永久對象。如果你聲明了local,將不能聲明default storage_clause,mininum extent、temporary.
15、[SEGMENT SPACE MANAGEMENT [AUTO | MANUAL]]
指定 表空間段的管理方式,AUTO為系統自動管理,MANUAL為手工管理。默認為AUTO。
附加3:Oracle中分區表中表空間屬性:https://blog.51cto.com/hbxztc/1929585