建立一个大表空间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>