建立一個大表空間big_tbs,大小爲1G,然後刪掉
SQL> create bigfile tablespace big_tbs datafile '/home/app/oracle/oradata/ORCL/datafile/big_tbs.dbf' size 1g;
表空間已創建。
SQL> drop tablespace big_tbs including contents and datafiles;
表空間已刪除。
建立一個index_tbs表空間,每個區大小1M, 然後查下該表空間的數據文件
SQL> create tablespace index_tbs datafile '/home/app/oracle/oradata/ORCL/datafile/index_tbs.dbf' size 10m uniform size 1m;
表空間已創建。
SQL> select file_name from dba_data_files where tablespace_name='INDEX_TBS';
FILE_NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/ORCL/datafile/index_tbs.dbf
建立一個data表空間,指定默認存儲方式(初始化區512k,下一個區512k)
SQL> create tablespace data datafile '/home/app/oracle/oradata/ORCL/datafile/data.dbf' size 10m default storage (initial 512k next 512k);
表空間已創建。
建立一個prod表空間,自動增長,大小不限制, 使用ASSM技術
extent management local 定義本地管理表空間(LMT),segment space management auto 定義自動段空間管理(ASSM)
SQL> create tablespace prod datafile '/home/app/oracle/oradata/ORCL/datafile/prod.dbf'size 10m autoextend on next 1m maxsize unlimited extent management local segment space management auto;
表空間已創建。
修改data表空間大小爲100M,併爲其增加一個100M的數據文件
SQL> select file_name from dba_data_files where tablespace_name = 'DATA';
FILE_NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/ORCL/datafile/data.dbf
SQL> alter database datafile '/home/app/oracle/oradata/ORCL/datafile/data.dbf' resize 100m;
數據庫已更改。
SQL> alter tablespace data add datafile '/home/app/oracle/oradata/ORCL/datafile/data1.dbf' size 100m;
表空間已更改。
SQL> select file_name from dba_data_files where tablespace_name='DATA';
FILE_NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/ORCL/datafile/data.dbf
/home/app/oracle/oradata/ORCL/datafile/data1.dbf
SQL>
建立一個表空間db4k,使用4k的塊
默認建立的表空間爲8k,若想用不同塊表空間,需激活對應db cache。激活時設置大小不能超過SGA內存總和,通常是2的N次方
SQL> show parameter db_%_cache_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_16k_cache_size big integer 0
db_2k_cache_size big integer 0
db_32k_cache_size big integer 0
db_4k_cache_size big integer 0
db_8k_cache_size big integer 0
db_flash_cache_size big integer 0
db_keep_cache_size big integer 0
db_recycle_cache_size big integer 0
SQL> alter system set db_4k_cache_size=16m scope=both ;
系統已更改。
SQL> show parameter db_4k_cache_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_4k_cache_size big integer 16M
SQL> create tablespace db4k datafile '/home/app/oracle/oradata/ORCL/datafile/db4k.dbf' size 10m blocksize 4k extent management local;
表空間已創建。
建立臨時表空間組gtemp, gtemp包含temp1.temp2表空間,每個大小100M,並設置爲系統默認臨時表空間
SQL> create temporary tablespace temp1 tempfile '/home/app/oracle/oradata/ORCL/datafile/temp1.tmp' size 100m;
表空間已創建。
SQL> create temporary tablespace temp2 tempfile '/home/app/oracle/oradata/ORCL/datafile/temp2.tmp' size 100m;
表空間已創建。
SQL> alter tablespace temp1 tablespace group gtemp;
表空間已更改。
SQL> alter tablespace temp2 tablespace group gtemp;
表空間已更改。
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
GTEMP TEMP1
GTEMP TEMP2
已選擇 2 行。
SQL> alter database default temporary tablespace gtemp;
數據庫已更改。
如何修改系統默認表空間,用戶默認表空間等
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
TEMP_TEST TMP_01
TEMP_TEST TMP_02
TMP_TEST TMP_03
TMP_TEST TMP_04
GTEMP TEMP1
GTEMP TEMP2
已選擇 6 行。
SQL> alter database default temporary tablespace temp_test;
數據庫已更改。
SQL> alter user orcl temporary tablespace gtemp;
alter user orcl temporary tablespace gtemp
建立日誌組3個,每個組2個成員,成員大小200M,分開存放確保不導致I/O競爭,再分別添加新的日誌文件到日誌文件組,刪除
SQL> select count(*) from v$logfile;
COUNT(*)
----------
13
SQL> alter database add logfile group 6 ('/home/app/oracle/oradata/ORCL/datafile/redo6.log','/home/app/oracle/oradata/ORCL/datafile/redo16.log') size 200m;
數據庫已更改。
SQL> alter database add logfile group 7 ('/home/app/oracle/oradata/ORCL/datafile/redo7.log','/home/app/oracle/oradata/ORCL/datafile/redo17.log') size 200m;
數據庫已更改。
SQL> alter database add logfile member '/home/app/oracle/oradata/ORCL/datafile/redo26.log' to group 6;
數據庫已更改。
SQL> alter database add logfile member '/home/app/oracle/oradata/ORCL/datafile/redo27.log' to group 7;
數據庫已更改。
SQL> select count(*) from v$logfile;
COUNT(*)
----------
19
SQL> alter database drop logfile group 6;
數據庫已更改。
SQL> select count(*) from v$logfile;
COUNT(*)
----------
16
SQL>
使用OMF建立表空間omf1,日誌組等
SQL> show parameter db_create_online_log_dest #5個空的聯機日誌文件存放處
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_online_log_dest_1 string
db_create_online_log_dest_2 string
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
SQL> show parameter recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string
db_recovery_file_dest_size big integer 0
recovery_parallelism integer 0
remote_recovery_file_dest string
SQL> alter system set db_recovery_file_dest_size=4g scope=both; #設置閃回區空間大小
系統已更改。
SQL> alter system set db_recovery_file_dest='/home/app/oracle/fast_recovery_area' scope=both; #設置閃回區路徑
系統已更改。
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string
SQL> alter system set db_create_file_dest='/home/app/oracle/oradata'; #設置OMF數據文件存儲路徑
系統已更改。
SQL> create tablespace omf1; #創建OMF表空間
表空間已創建。
SQL> select file_name from dba_data_files where tablespace_name='OMF1';
FILE_NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/ORCL/datafile/o1_mf_omf1_grk0l9ft_.dbf
SQL>
如上可以看到,沒有指定文件的路徑和名稱,oracle會自動創建一個OMF表空間。如果我們設置了上面這些參數,那麼在創建聯機重做日誌文件、使用恢復區、創建表空間時,oracle會自動管理這些文件的路徑、大小、名稱
查詢表空間信息
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
SMALL_TBS
BIGFILE_TBS
INDEX_TBS
DATA_TBS
TEST_TBS
DB4K
......
已選擇 24 行。
SQL> select name from v$tablespace;
NAME
------------------------------
SYSAUX
SYSTEM
UNDOTBS1
USERS
TEMP
SYSTEM
SYSAUX
UNDOTBS1
TEMP
SYSTEM
SYSAUX
......
已選擇 33 行。
幾乎所有dba_視圖都需要+s,而且需要全稱。而v$視圖則不需要+s和只需要name
查看數據文件
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/ORCL/datafile/o1_mf_system_gqjmogkw_.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_gqjmqc3s_.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_gqjmrhqc_.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_users_gqjmrk7y_.dbf
/home/app/oracle/oradata/ORCL/datafile/small_tbs.dbf
/home/app/oracle/oradata/ORCL/datafile/bigfile_tbs.dbf
/home/app/oracle/oradata/ORCL/datafile/index_tbs.dbf
/home/app/oracle/oradata/ORCL/datafile/data_tbs.dbf
/home/app/oracle/oradata/ORCL/datafile/data_tbs2.dbf
/home/app/oracle/oradata/ORCL/datafile/test_tbs.dbf
/home/app/oracle/oradata/ORCL/datafile/db4k.dbf
FILE_NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/ORCL/datafile/o1_mf_omf_test_gr36kdfh_.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_tbs_test_gr39z1x6_.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_read_onl_gr3nclj5_.dbf
/home/app/oracle/oradata/ORCL/datafile/data.dbf
/home/app/oracle/oradata/ORCL/datafile/data1.dbf
/home/app/oracle/oradata/ORCL/datafile/prod.dbf
/home/app/oracle/oradata/ORCL/datafile/db4k2.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_omf1_grk0l9ft_.dbf
已選擇 19 行。
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/ORCL/datafile/o1_mf_system_gqjmogkw_.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_gqjmqc3s_.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_gqjmrhqc_.dbf
/home/app/oracle/oradata/ORCL/datafile/disk4/o1_mf_system_gqjmv71l_.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_gqjmv6yq_.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_users_gqjmrk7y_.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_gqjmv71q_.dbf
/home/app/oracle/oradata/ORCL/923E312DA539A787E055000000000001/datafile/o1_mf_sy
stem_gqjnjt03_.dbf
/home/app/oracle/oradata/ORCL/923E312DA539A787E055000000000001/datafile/o1_mf_sy
NAME
--------------------------------------------------------------------------------
saux_gqjnjtg4_.dbf
/home/app/oracle/oradata/ORCL/923E312DA539A787E055000000000001/datafile/o1_mf_un
dotbs1_gqjnjtg5_.dbf
/home/app/oracle/oradata/ORCL/923E312DA539A787E055000000000001/datafile/o1_mf_us
ers_gqjnnd3f_.dbf
/home/app/oracle/oradata/ORCL/datafile/small_tbs.dbf
/home/app/oracle/oradata/ORCL/datafile/bigfile_tbs.dbf
/home/app/oracle/oradata/ORCL/datafile/data_tbs.dbf
NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/ORCL/datafile/test_tbs.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_omf_test_gr36kdfh_.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_tbs_test_gr39z1x6_.dbf
/home/app/oracle/oradata/ORCL/datafile/o1_mf_read_onl_gr3nclj5_.dbf
/home/app/oracle/oradata/ORCL/datafile/data_tbs2.dbf
/home/app/oracle/oradata/ORCL/datafile/db4k2.dbf
/home/app/oracle/oradata/ORCL/datafile/index_tbs.dbf
/home/app/oracle/oradata/ORCL/datafile/data.dbf
/home/app/oracle/oradata/ORCL/datafile/prod.dbf
/home/app/oracle/oradata/ORCL/datafile/data1.dbf
/home/app/oracle/oradata/ORCL/datafile/db4k.dbf
NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/ORCL/datafile/o1_mf_omf1_grk0l9ft_.dbf
已選擇 26 行。
SQL> select file_name from dba_data_files where tablespace_name='DATA';
FILE_NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/ORCL/datafile/data.dbf
/home/app/oracle/oradata/ORCL/datafile/data1.dbf
datafile (數據文件) 裏面看不到臨時表空間的信息,需要到tempfile裏面查
SQL> select file_name from dba_temp_files;
FILE_NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/ORCL/datafile/o1_mf_temp_gqjmv0b6_.tmp
/home/app/oracle/oradata/ORCL/datafile/temp1.tmp
/home/app/oracle/oradata/ORCL/datafile/temp2.tmp
/home/app/oracle/oradata/ORCL/datafile/tmp_01.tmp
/home/app/oracle/oradata/ORCL/datafile/tmp_02.tmp
/home/app/oracle/oradata/ORCL/datafile/tmp_03.tmp
/home/app/oracle/oradata/ORCL/datafile/tmp_04.tmp
已選擇 7 行。
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/ORCL/datafile/o1_mf_temp_gqjmv0b6_.tmp
/home/app/oracle/oradata/ORCL/datafile/temp012019-09-11_09-36-16-118-AM.dbf
/home/app/oracle/oradata/ORCL/923E312DA539A787E055000000000001/datafile/o1_mf_te
mp_gqjnjtg6_.dbf
/home/app/oracle/oradata/ORCL/datafile/tmp_01.tmp
/home/app/oracle/oradata/ORCL/datafile/tmp_02.tmp
/home/app/oracle/oradata/ORCL/datafile/tmp_03.tmp
/home/app/oracle/oradata/ORCL/datafile/tmp_04.tmp
/home/app/oracle/oradata/ORCL/datafile/temp1.tmp
/home/app/oracle/oradata/ORCL/datafile/temp2.tmp
已選擇 9 行。
表空間脫機與聯機
對於表空間,根據不用環境,可能需要經常對其操作,很多情況需要表空間處於脫機狀態
SQL> create tablespace tbs_test;
表空間已創建。
SQL> !
[oracle@localhost ~]$ \rm /home/app/oracle/oradata/ORCL/datafile/o1_mf_tbs_test_groh6wn6_.dbf
[oracle@localhost ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 星期三 9月 25 09:05:36 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
連接到:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> shutdown immediate
ORA-01116: 打開數據庫文件 40 時出錯 #有報找不到數據文件
ORA-01110: 數據文件 40: '/home/app/oracle/oradata/ORCL/datafile/o1_mf_tbs_test_groh6wn6_.dbf'
ORA-27041: 無法打開文件
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL> alter database datafile 40 offline drop; #將此文件脫機,非歸檔模式下加drop
數據庫已更改。
SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啓動。
Total System Global Area 536870912 bytes
Fixed Size 8794848 bytes
Variable Size 306187552 bytes
Database Buffers 213909504 bytes
Redo Buffers 7979008 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> alter tablespace tbs_test offline for recover; #當數據文件被誤刪,脫機要加上for recover
表空間已更改。
只讀與只寫表空間
SQL> create tablespace read_only;
表空間已創建。
SQL> alter tablespace read_only read only;
表空間已更改。
SQL> select status,tablespace_name from dba_tablespaces;
STATUS TABLESPACE_NAME
--------- ------------------------------
ONLINE SYSTEM
ONLINE SYSAUX
ONLINE UNDOTBS1
ONLINE TEMP
ONLINE USERS
ONLINE SMALL_TBS
ONLINE BIGFILE_TBS
ONLINE INDEX_TBS
ONLINE DATA_TBS
ONLINE TEST_TBS
ONLINE DB4K
STATUS TABLESPACE_NAME
--------- ------------------------------
ONLINE TMP_01
ONLINE TMP_02
ONLINE TMP_03
ONLINE TMP_04
ONLINE OMF_TEST
OFFLINE TBS_TEST
READ ONLY READ_ONLY
......
已選擇 24 行。
SQL> create user c##debug identified by debug default tablespace read_only temporary tablespace gtemp; #12c之後創建用戶時要c##或C##開頭
用戶已創建。
SQL> grant connect,resource,dba to debug;
grant connect,resource,dba to debug
*
第 1 行出現錯誤:
ORA-01917: 用戶或角色 'DEBUG' 不存在
SQL> grant connect,resource,dba to c##debug;
授權成功。
SQL> conn c##debug/debug
已連接。
SQL> create table test (NAME VARCHAR2(10));
表已創建。
SQL> insert into test values('haha');
insert into test values('haha')
*
第 1 行出現錯誤:
ORA-01647: 表空間 'READ_ONLY' 是隻讀的, 無法在其中分配空間
SQL> conn / as sysdba
已連接。
SQL> alter tablespace read_only read write;
表空間已更改。
SQL> create table test (NAME VARCHAR2(10));
表已創建。
SQL> insert into test values('haha');
已創建 1 行。
SQL> commit;
提交完成。
SQL> select * from test;
NAME
----------
haha
SQL>