oracle19c 表空间和数据文件管理

目录

表空间管理

临时表空间

undo表空間


表空间管理

oracle 支持不同块尺寸的表空间(只有oracle數據庫支持)

表空間分爲標準快的表空間和非標準快的表空間。

SQL> select tablespace_name,block_size,status,logging,extent_management,segment_space_management from dba_tablespaces;-------查詢表空間的信息

TABLESPACE_NAME            BLOCK_SIZE STATUS    LOGGING   EXTENT_MAN SEGMEN
------------------------------ ---------- --------- --------- ---------- ------
SYSTEM                     8192 ONLINE    LOGGING   LOCAL     MANUAL
SYSAUX                     8192 ONLINE    LOGGING   LOCAL     AUTO
UNDOTBS1                 8192 ONLINE    LOGGING   LOCAL     MANUAL
TEMP                     8192 ONLINE    NOLOGGING LOCAL     MANUAL
USERS                     8192 ONLINE    LOGGING   LOCAL     AUTO
EXAMPLE                  8192 ONLINE    NOLOGGING LOCAL     AUTO
 

我们在创建非标准块的表空间时,数据库是不允许我们创建的。因为数据库的标准块默认为8k,数据缓冲区会是很多个8k的内存槽,如果我们设置块为16k,那么这个16k的块是不能装进8k的内存槽的,这个时候我们就需要去创建个16k的缓冲区,以后这个缓冲区就装16k的数据块。

SQL> show parameter db_cache_size;----查看内存块的大小
SQL> alter system set db_16k_cache_size=10m;-----设置16k的内存块,修改内存块的大小要在cdb$root下面更改
SQL> select property_name,property_value,description from database_properties;-----查看默认的表空间  字符集

默认的表空间:如果在创建表的时候指定了表空间就会将数据放进指定的表空间,如果没有指定,那么数据就会存进默认的表空间。

select tablespace_name,file_name from dba_temp_files;---------查看临时表空间的数据

 设置表空间为offline的3种方式:

normal:如果表空間的任何數據文件都不存在錯誤條件,則表空間可以正常脫機。oracle數據庫在使表空間的所有數據文件脫機時,會爲他們設置一個檢查點,從而保證所有數據都寫入磁盤。

tempory:即使表空間中的一個或多個文件出現錯誤,也可以暫時使表空間脫機。oracle數據庫將數據文件脫機時,并在脱机时对其执行检查点。如果没有文件处于脱机状态,但使用了临时子句,则无需进行介质恢复。但是,如果表空间的一个或多个文件由于写入错误而脱机,并且已经暂时使表空间脱机,则需要恢复表空间,然后才能使其重新联机。

immediate:表空间可以立即脱机,而oracle数据库不会对任何数据文件设置检查点,需要进行介质恢复。

SQL> alter database move datafile '/u01/app/oracle/oradata/CDB/user01.dbf' to '/u01/app/oracle/oradata/CDB/pdb1/users01.dbf';---在线移动数据文件的位置,并且可以直接移动os文件的位置,很神奇对吧

Database altered.

创建表空间

SQL> create tablespace ts001 datafile '+DATA/orcl/datafile/ts001.DBF' size 100M
'+DATA/orcl/datafile/ts002.DBF' size 100M
autoextend on next 100M---当表空间的数据文件不足时会自动给数据文件增加100M
maxsize 2G---表空间最大为2G
EXTENT MANAGEMENT LOCAL------表空间的区为本地管理
UNIFORM SIZE 1M;-------表空间每个extent的大小为1M

重置表空间的大小

SQL> alter database orcl datafile '+DATA/orcl/datafile/ts001_2.dbf' resize 200M;------第一种方式:修改数据文件的大小
SQL> alter tablespace ts001 add datafile '+DATA/orcl/datafile/ts001_2.dbf' size 100M
autoextend on next 50m;-----第二种方式:为表空间增加数据文件

重命名数据文件

第一种方式:停库操作

关闭数据库,移动操作系统文件,然后将数据库启动到mount状态修改控制文件信息,最后需要删除原来的文件

SQL> alter database rename file '+DATA/orcl/datafile/ts001_1.dbf' to '+DATA/orcl/datafile/ts1_001.dbf'; Database altered.

第二种方式:不需要停库

将表空间离线,移动操作系统文件然后修改修改控制文件信息,再将表空间上线,最后需要删除原来的操作系统文件

SQL> alter tablespace ts001 offline;
Tablespace altered.
SQL> alter tablespace rename file '+DATA/orcl/datafile/ts001.dbf' to '+DATA/orcl/datafile/ts001_1.dbf';
Tablespace altered.
SQL> alter tablespace ts001 online;

删除表空间

DROP TABLESPACE DUMP INCLUDING CONTENTS AND DATAFILES;--------删除表空间的同时删除表空间的内容和操作系统数据文件

临时表空间

存储排序的数据,临时表空间可以被多个用户共享,其中不能包含任何永久对象。

默认临时表空间在同一时间只能使用一个,如果在创建数据库时没有指定默认临时表空间,在创建用户时也没有指定默认的临时表空间,那么需要使用到临时表空间时会将临时数据存进system表空间,我们一般会在创建数据库时指定默认的临时表空间,而不是在创建用户的时候指定默认临时表空间。

SQL> select tablespace_name,status from dba_tablespaces;-------查看所有表空间的状态

TABLESPACE_NAME            STATUS
------------------------------ ---------
SYSTEM                   ONLINE
SYSAUX                   ONLINE
UNDOTBS1               ONLINE
TEMP                   ONLINE
USERS                   ONLINE
DUMP                   ONLINE

6 rows selected.


SQL> select name from v$datafile;------这样查询时看不到临时表空间的,因为没有数据文件


/u01/app/oracle/oradata/CDB/system01.dbf
/u01/app/oracle/oradata/CDB/sysaux01.dbf
/u01/app/oracle/oradata/CDB/undotbs01.dbf
/u01/app/oracle/oradata/CDB/pdbseed/system01.dbf
/u01/app/oracle/oradata/CDB/pdbseed/sysaux01.dbf
/u01/app/oracle/oradata/CDB/users01.dbf
/u01/app/oracle/oradata/CDB/pdbseed/undotbs01.dbf
/u01/app/oracle/oradata/CDB/pdb1/system01.dbf
/u01/app/oracle/oradata/CDB/pdb1/sysaux01.dbf
/u01/app/oracle/oradata/CDB/pdb1/undotbs01.dbf
/u01/app/oracle/oradata/CDB/pdb1/users01.dbf
/u01/app/oracle/oradata/CDB/pdb2/system01.dbf
/u01/app/oracle/oradata/CDB/pdb2/sysaux01.dbf
/u01/app/oracle/oradata/CDB/pdb2/undotbs01.dbf

14 rows selected.



SQL> alter tablespace tmpe add tempfile'/u01/app/oracle/oradata/CDB/temp03.dbf' size 50m;

Tablespace altered.

SQL> select tablespace_name,file_name from dba_temp_files;-------现在查询就有数据了

TABLESPACE_NAME            FILE_NAME
------------------------------ --------------------------------------------------
TEMP                   /u01/app/oracle/oradata/CDB/temp01.dbf


SQL> show user
USER is "SYS"

SQL> 
SQL> create temporary tablespace TMPE
  2  tempfile '/u01/app/oracle/oradata/CDB/temp02.dbf'
  3  SIZE 50M                                
  4  AUTOEXTEND ON NEXT 50M 
  5  MAXSIZE 2048M
  6  EXTENT MANAGEMENT LOCAL;-----创建临时表空间


SQL> alter database default temporary tablespace TMPE;-----指定数据库的默认临时表空间

Database altered.

SQL> SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';------查看数据库默认的临时表空间

PROPERTY_VALUE
--------------------------------------------------------------------------------
TMPE

undo表空間

重点:

1.一个事务只能将它的全部还原数据存放在同一个还原段中。但是多个并行的事务可以写一个还原段。每个还原段都有一个段头,在该段头中包含了一个事务表,该表中存放着有关使用这一还原段的当前事务信息。

2.还原段的目的:事务回滚,事务恢复,保证事务的一致性。

3.还原段的类型:

系统还原段:仅为系统表空间中的对象变化所用

非系统还原段(自动模式和手动模式):为其他表空间中的对象变化所用,包含私有还原段(单实例)和公有还原段(RAC)

延迟还原段:当脱机的表空间online时用到

4.不能删除一个正在使用的undo表空间,除非这个表空间没有活动的事务

5.一个实例可以有多个undo表空间存在,但是同时只能有一个活动的undo表空间
 

SQL> select name,value
  2  from v$parameter 
  3  where name like'%undo%';---------undo_retention的单位时秒

NAME                   VALUE
------------------------------ --------------------------------------------------
temp_undo_enabled           FALSE
undo_management            AUTO
undo_tablespace            UNDOTBS1
undo_retention               900

SQL> select tablespace_name,retention,contents
  2  from dba_tablespaces
  3  where tablespace_name like'UNDO%';------并不能保证undo段一定都能保存900s

TABLESPACE_NAME            RETENTION   CONTENTS
------------------------------ ----------- ---------------------
UNDOTBS1               NOGUARANTEE UNDO

-------------如果将retention设置成guarantee,此时如果某个事务需要还原段,而又没有还原段,oracle就不能覆盖哪些提交后需要保留的数据,因此这个事务会执行失败。
 


undo信息存放在undo段,undo段只能放在undo表空间(system表空间也会存放undo段),undo表空间中不能包含其他任何对象。

undo段中的数据可以保存多久呢?

分为inactive(已经提交的事务)和active(未提交的事务)。

show parameter undo;-----里面有一个undo_retention参数,这个参数可以设置undo段中的数据可以保存的时间,单位时秒。

已经提交但是还没有达到保留时间的undo数据称为unexpired数据,达到保留时间的数据成为expired数据,expired数据oracle会自动清除,unrxpired数据会自动保存,但是,如果undo段中的数据不够新事物用,oracle也会把inactive的unexpired数据清除,可以将表空间的数据设置成guarantee retention,但是这有可能导致新事物的失败。

SQL> show parameter undo;--------查看undo段信息保留的时间

NAME                                   TYPE     VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled             boolean        FALSE
undo_management               string             AUTO
undo_retention                      integer           900
undo_tablespace                   string             UNDOTBS1
SQL> select tablespace_name ,retention from dba_tablespaces;-----查看表空格键是否设置guarantee,这里面可以看出是只有undo表空间才可以这样设置的。

TABLESPACE_NAME        RETENTION
------------------------------ -----------
SYSTEM                             NOT APPLY
SYSAUX                             NOT APPLY
UNDOTBS1                        NOGUARANTEE
TEMP                                  NOT APPLY
USERS                                NOT APPLY

SQL> alter tablespace undotbs1 retention guarantee;----这样设置之后,autoextend的undo表空间依然会在新事物空间不够时清除inactive的undo数据,但是fixd管理的undo段会把undo数据保留到设定时间再清除,所以这可能会导致新事物的失败。

SQL> select property_name,property_value,description from database_properties where property_name like'%UNDO%';-----如果是CDB数据库,可以通过这样的方式查看这个pdb使用的本地undo表空间还是共享undo表空间,pdb的表空间如果是本地,那么全部的pdb都是本地,共享也是如此。

PROPERTY_NAME
--------------------------------------------------------------------------------
PROPERTY_VALUE
--------------------------------------------------------------------------------
DESCRIPTION
--------------------------------------------------------------------------------
LOCAL_UNDO_ENABLED
TRUE
true if local undo is enabled

閃回技術
閃回版本查詢:根據scn查詢某一個表在一段scn範圍内所作的修改

閃回查詢:查詢某一個scn時表的數據

閃回事務查詢:根據事務的xid在flashback_transaction_query 視圖查詢數據所作的更改,然後可以執行與操作相反的sql語句還原數據的狀態

閃回刪除:回收站

閃回表:

用戶不小先刪除了子表的數據,子表的數據被刪除后,主表的數據是可以存在的,然後現在我想用閃回表技術閃回子表的數據,但是我在執行這個操作的時候,主表的數據也被刪除了,那我這個閃回操作是不能執行成功的,因爲閃回的子表數據在主表中找不到記錄。

表的結構如果被更改也會閃回失敗;

Undo數據被覆蓋也會閃回失敗

將表閃回到某一個時間點或者scn之前的狀態

閃回數據歸檔:原理是將原本存儲在undo表空間的數據存儲在一個永久表空間。

閃回數據庫:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值