一、压缩表空间
压缩表空间是通过压缩表空间内的对象来实现的。数据的压缩体现在数据块上,简单的说就是通过清除数据块上的重复内容来达到降低I/O,提升性能性能的目的。在表空间的创建语句中通过指定default关键字,可以让在该表空间上创建的所有表进行压缩(实际上,压缩是在数据插入时进行的)。
根据表空间存储数据对象的不同,表空间压缩类型可以分为OLTP压缩、非结构化文件副本清除、非结构化文件压缩和备份数据压缩等。其中OLTP压缩是指在发生DML操作(包括insert,delete,update)期间进行的压缩。一个压缩的表可以存储在更少的数据块中,从而节省了储存空间,而使用更少的数据块也意味着性能的提高。 在一个I/O受到一定限制的环境中对一个压缩的表进行查询通常可以更快速地完成,因为他们需要扫描的数据库数据块要少得多。
# 创建默认压缩表空间 SQL> create tablespace test datafile ‘D:\app\oracle\oradata\orcl\test01.dbf‘ 2 default compress for oltp; 表空间已创建。 # 修改压缩表空间 SQL> alter tablespace test default nocompress; 表空间已更改。 # 确定一个表空间是否压缩 SQL> select tablespace_name,def_tab_compression from dba_tablespaces; TABLESPACE_NAME DEF_TAB_COMPRESS ------------------------------------------------------------ ---------------- SYSTEM DISABLED SYSAUX DISABLED UNDOTBS1 DISABLED TEMP DISABLED USERS DISABLED EXAMPLE DISABLED TEST ENABLED 已选择7行。
二、加密表空间
在永久性表空间上可以使用加密技术来保护敏感的数据。表空间的加密技术对于用户来说完全是透明的,其主要目的是为了在数据库之外,保护数据避免未经授权的访问,例如通过操作系统的文件系统直接访问数据文件。但是表空间加密技术并没有解决所有的安全问题,例如,它没有提供数据库访问内容的访问控制技术,任何一个有权限的用户都可以访问和存储表空间内的对象,而无需提供额外的密码或秘钥。
当加密一个表空间,表空间内的所有数据块都将被加密,所有的段类型都支持加密,包括表段,索引段等等。为了提供最大化的安全性,当来自加密表空间的数据被写入undo表空间、临时表空间时仍然是被加密的,而无需创建加密的undo表空间和加密的temporary表空间。实际上,我们也不能创建这样的表空间。
常见的表空间加密算法有:AES128,AES192,AES256,3DES168。
在使用加密表空间时应考虑以下问题:
- 无法对已存在的表空间进行加密。
- 加密表空间在进行表空间传输时收到限制。
- 在备份和恢复时要打开Oracle Wallet。
使用表空间加密技术要创建Oracle Wallet,以我的Windows环境为例,创建方法如下:
# 指定Oracle Wallet目录,D:\app\oracle\admin\orcl\wallet # 编辑D:\app\oracle\product\11.2.0\dbhome_1\database\sqlnet.ora文件,说明Wallet的实现方式和物理位置,完成后重启数据库。 ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=D:\app\oracle\admin\orcl\wallet))) # 在Wallet下创建加密文件 SQL> alter system set encryption key identified by "oracle"; 系统已更改。 # 打开和关闭Oracle Wallet,在windows上创建wallet完成后wallet默认是打开状态 SQL> alter system set encryption wallet open identified by "oracle"; 系统已更改。 SQL> alter system set encryption wallet close identified by "oracle"; 系统已更改。 SQL> select * from v$encryption_wallet; WRL_TYPE WRL_PARAMETER STATUS ---------- ----------------------------------- ------ file D:\APP\ORACLE\ADMIN\ORCL\WALLET OPEN # 创建加密表空间 SQL> create tablespace encrypt_tbs 2 datafile ‘D:\app\oracle\oradata\orcl\securefile.dbf‘ reuse 3 encryption using ‘AES192‘ 4 default storage(encrypt); 表空间已创建。 # 查看表空间加密的情况 SQL> select t.name,e.encryptionalg algorithm 2 from v$tablespace t,v$encrypted_tablespaces e 3 where t.ts#=e.ts#; NAME ALGORITHM ------------------------------------------------------------ -------------- ENCRYPT_TBS AES192