表空間,顧名思義,就是一張表所存在的空間。
一個表同時只能存在於一個表空間,不同表空間的表是相互隔離的,可以取相同的名字。
在數據庫只有一個實例的情況下,如果要實現數據的隔離,最簡單的方法就是創建多個表空間,添加多個用戶,一個用戶對應一個表空間,這樣就實現了數據的隔離(多個開發團隊共用一個oracle實例)。
表空間的分類
- 臨時表空間
主要用途是在數據庫進行排序運算[如創建索引、order by及group by、distinct、union/intersect/minus/、sort-merge及join、analyze命令]、管理索引[如創建索 引、IMP進行數據導入]、訪問視圖等操作時提供臨時的運算空間,當運算完成之後系統會自動清理。 -
數據表空間
此空間是用來進行[數據存儲]的(表、function、存儲過程等),所以是實際物理存儲區域。
表空間的便利性:
- 將用戶隔離,方便賦予權限,限制每個用戶的可使用內存。
- 限制表可以使用的內存。
- 方便將表進行分類操作,大數據量的表放入一個表空間,小數據量的表放入另一個表空間,方便充分利用內存。
- 數據與日誌隔離
表空間大小限制
表空間數據文件容量與DB_BLOCK_SIZE有關,ORACLE的物理文件最大隻允許4194304個數據塊,表空間數據文件的最大值爲 4194304×DB_BLOCK_SIZE/1024M。
4k最大表空間爲: 16384M
8K最大表空間爲: 32768M
16k最大表空間爲:65536M
32K最大表空間爲:131072M
64k最大表空間爲:262144M
sql語句如下:
select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;
select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_data_files
alter database tempfile '/oradata/table/kingdee99temp01.dbf' resize 32768M;
add datafile '/oradata/table/kingdee99temp01.dbf' size 10240M;
1.ssh shell 工具登錄到oracle服務器(Linux)
切換到oracle
輸入命令:su - oracle
進入sqlplus
輸入命令:sqlplus
輸入用戶名和密碼(有dba權限的用戶)
2.查看錶空間文件的位置
select name from v$datafile;
假如我的實例名稱爲orcl,oracle安裝在了/u01/app目錄下,查詢結果是這樣
/u01/app/oracle/oradata/orcl/system.dbf
/u01/app/oracle/oradata/orcl/users01.dbf
......
3.創建表空間
這裏就創建在/u01/app/oracle/oradata/orcl/目錄下,
db_test01 是表空間名稱,data_test01.dbf是表空間文件
create tablespace db_test01 datafile '/u01/app/oracle/oradata/orcl/data_test01.dbf' size 256M autoextend on next 100M maxsize unlimited;
這步執行完用 select name from v$datafile; 查看下是否創建成功。
也可以再給這個表空間再增加表空間文件(一個表空間文件不夠的情況下)。
alter tablespace db_test01add datafile '/u01/app/oracle/oradata/orcl/data_test02.dbf' size 256M autoextend on next 100M maxsize unlimited;
4.創建用戶並指定用戶所使用的表空間
創建用戶名爲test_user,密碼爲123456,所使用表空間爲db_test01的用戶
create user test_user identified by 123456 default tablespace db_test01;
5.用戶授權
將dba權限授給test_user
grant dba to test_user
ok,搞定了,可以用plsql或其他工具登錄測試一下。
若要實現數據的隔離(如:另一個開發小組也用這個數據庫實例),重複3,4,5步,指定不同的表空間名稱、不同的表空間文件、不同的用戶即可。