数据库创建新特性--仅供参考(第二十四期)

xzdxmynet 发布于 2024-01-27 阅读(70)

概述

今天我简单介绍一下一些新功能,仅供参考。

参考:

1. 不可见字段 ( )

在 12c R1 中,可以在表中创建不可见字段。 当某个字段不可见时,除非在 SQL 语句或条件或表定义中明确指定,否则该字段不会出现在查询结果中。

例子:

创建表TEST,设置其一列为字段查询观察结果。

1.1. 创建表

create table emp (id number,name varchar2(20) invisible);
insert into emp(id,name) values(1,'tom');
insert into emp(id,name) values(2,'mike');
commit;

1.2. 字段查询

select * from emp;
select id,name from emp;

1.3. PLSQL视图

2.同一个字段上的多个索引(在同一组上)

在12c中,可以使用参数在表的同一字段上创建不同类型的索引。

例子:

2.1. 创建表和索引

create table dup(name varchar2(10),sex varchar2(10),adr varchar2(200),id number(10),birth date);
create index idx_dup_adr on dup(adr);
create bitmap index bitidx_dup_adr on dup(adr) invisible;
SELECT OWNER,INDEX_NAME,INDEX_TYPE,TABLE_NAME,STATUS,VISIBILITY FROM DBA_INDEXES WHERE TABLE_NAME='DUP';

2.2. 如果想让索引生效,请将btree索引设置为hidden

alter index idx_dup_adr invisible;
alter index bitidx_dup_adr visible;

3.DDL日志

DDL日志打开后,可以在记录的xml文件中找到对应的时间戳和主机IP。

以下 DDL 语句可能会记录在 xml 或日志文件中:

3.1. 启用DDL日志功能

 ALTER SYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE;

3.2. 删除表重复项

 drop table dup;

3.3. 查看日志

 $cat  /u01/app/oracle/diag/rdbms/srm/SRM/log/ddl/log.xml 

4.新增备份用户权限

在11g R2中,引入了特权来执行ASM的特定操作。 同样,12c 中引入了在 RMAN 中执行备份和恢复命令的权限。 因此,您可以在数据库中创建本地用户,并授予其在RMAN中执行备份和恢复相关任务的能力,而无需为其授予权限。

grant sysbackup to admin
rman
connect target "admin/oracle@pdb as sysbackup"

5.数据泵的增强

5.1. 关闭重做日志生成

导入大型表时,可以添加选项来关闭重做日志的生成,以加快导入速度。

impdp admin/oracle@pdb directory=dump dumpfile=admin.dmp logfile=admin_nolog.log \
schemas=admin TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y

5.2. 导出以将视图转换为表

expdp admin/oracle@pdb directory=dump dumpfile=admin.dmp logfile=admin.log \
views_as_tables=view_test

6.完整的可转让导出/导入迁移数据库(Full/)

Database 12c 的完整可传输导出/导入 (Full/) 功能可将数据库升级/迁移到 Database 12c(12.1.0.2 及更高版本),同时减少停机时间。 (支持单实例迁移到RAC集群)

可以使用完整/功能将整个数据库从一个数据库实例复制到另一个数据库实例。 您可以使用数据泵生成导出转储文件。 如果需要将此转储文件传输到目标数据库,则导入该转储文件。 此外,您还可以使用Data Pump通过网络复制数据库。

待传输的数据库中的表空间可以是字典管理的表空间,也可以是本地管理的表空间。 源数据库中表空间的块大小不必与目标数据库中的标准块大小相同。

这种传输数据库的方法要求将要传输的用户创建的表空间设置为只读状态,直到导出转储文件。 如果不能满足这个条件,可以使用备份功能来完成表空间的转移。

稍后将单独演示这一点。 。 。

要通过导出转储文件来传输数据库,必须执行以下步骤:

1) 在源数据库上,将每个用户表空间设置为只读状态。 执行导出操作时请务必设置参数=和full=y。 如果源数据库版本为11.2.0.3或11G以上,还必须设置版本号=12或更高。 导出的转储文件包含用户表空间中存储的对象的元数据以及托管表空间中存储的用户创建对象的元数据和实际数据(例如 和 )。

2)将导出的dump文件传输到目标数据库

3) 将所有用户表空间的所有数据文件传输到目标数据库。 如果源平台与目标平台不同,则需要检查字节编码,可以通过查询v$rm视图查看。 如果源平台的字节编码与目标平台的字节编码不同,请使用以下方法转换数据文件:

(1)使用包中的or进程来传输数据文件。 这些进程自动将源数据文件转换为目标平台的字节编码。

(2)使用rman命令将源数据文件转换为目标平台的字节编码

4)可选操作,将源数据库中待转移的表空间设置为读写状态

5) 将数据导入目标数据库。 导入完成后,用户表空间将被设置为可读写状态。

7.扩展数据类型长度32k

、RAW 这些数据类型的大小可以从 4K 和 2K 字节扩展到 32K 字节。

如何激活:

7.1. 关闭CDB

 alter pluggable database SRMPDB close;

7.2. 启动数据库进入模式

 startup upgrade;

7.3. 修改cdb中的初始化参数

ALTER SESSION SET CONTAINER=CDB$ROOT;
ALTER SYSTEM SET max_string_size=extended SCOPE=SPFILE;

7.4. 以 sys 用户身份执行扩展脚本

 @?/rdbms/admin/utl32k.sql

7.5。 重新启动数据库至模式

shutdown immediate;
startup;

7.6。 执行脚本编译无效对象

 @?/rdbms/admin/utlrp.sql

8、通过SQL语句中的with语句定义函数(12.1.0.2)

12C可以在sql语句中编写函数。 在只读状态或不想创建新函数时,可以使用此方法。

创建如下函数来判断输入数据是否为数字。 如果是数字则输出Y,如果不是数字则输出N。

with function Is_Number
      (x in varchar2) return varchar2 is
        Plsql_Num_Error exception;
         pragma exception_init(Plsql_Num_Error, -06502);
     begin
       if (To_Number(x) is NOT null) then
         return 'Y';
       else
         return '';
      end if;
    exception
     when Plsql_Num_Error then
       return 'N';
    end Is_Number;

使用语句调用函数

select is_number('1') from dual; 
/

9. 在线移动和重命名数据文件

在传输数据文件时,最终用户可以执行查询、DML 和 DDL 任务

--移动数据文件并且重命名(容器数据只能移动自己所属数据文件)
alter database move datafile '/u01/app/oracle/oradata/orcl/pdborcl/admin.dbf' to '/home/oracle/admin1.dbf';
--文件系统移动到ASM磁盘(如果rac环境中数据文件创建在某个节点,移动数据文件之后,需要在另外节点重启cdb)
alter database move datafile '/home/oracle/admin.dbf' to '+DATA/pdborcl_admin.dbf';

10.高级索引压缩(LOW)

使用高级索引压缩后,可以在一定程度上减少数据库IO。

情景实验; a表普通索引,b表压缩索引,简单看段大小

10.1. 在表a上创建普通索引

create table a(id int,object_name varchar2(20));
insert into a values(1,'hwb');
create index idx_obname_a on a(object_name);
select segment_name,bytes/1024/1024 from dba_segments where segment_name =upper('idx_obname_a');

10.2. 在表b上创建压缩索引

create table b(id int,object_name varchar2(20));
insert into b values(1,'hwb');
create index idx_obname_b on b(object_name) COMPRESS ADVANCED LOW;
select segment_name,bytes/1024/1024 from dba_segments where segment_name =upper('idx_obname_b');

这里的数据量太小了,一个段的空间没有被占用,所以我看到的都是一样的。

11. PGA 大小限制

在12C之前,PGA内存的管理是通过参数来控制的,但这个参数只是一个目标值,可能会超出设定的大小。 PGA 的大小无法直接限制。

在12C中,可以使用参数来限制实例PGA使用内存的上限。 如果超出限制,会话将被终止,以减少 PGA 内存的使用。

注:如果使用ASMM,则大小为2G(初始化参数不超过2G)或2倍(超过2G)

12. RMAN表级恢复

12C之前,RMAN只能在数据库级别(数据文件)和表空间级别进行完全恢复或不完全恢复。 如果表被截断或删除,可以通过闪回表或闪回数据库或dmp文件快速恢复。 但到了12C,RMAN可以通过备份将数据表恢复到故障时间,而其他表不受影响。 流程是在恢复过程中创建辅助实例,基于redo或application恢复系统数据文件(,,),最后通过data Pump导入目标。 自动创建的辅助实例恢复后会自动删除。

13.可选

启用 IMO 非常简单。 在12.1.0.2及更高版本中,将其设置为0以外的值可以启用IM商店功能。

它是实例级参数,默认为0。设置非零值时,最小值为100M。

通常情况下,sys用户下的对象和表空间上的对象不能使用IMO功能,但也可以通过设置“”隐式参数来使用。

打开DB In-的过程如下:

1)修改参数:

SQL> ALTER SET =1G 范围=;

2)检查sga参数的设置,确保设置参数后数据库实例能够正常启动。 如果数据库使用ASMM,则需要检查参数。 如果使用AMM,还需要检查参数,以及(或)。

注意:从12.2开始,In-区域的大小可以动态增加。 为此,只需通过 ALTER 命令增加参数值即可。

3)重启数据库实例

4)检查IM功能是否开启

 SHOW PARAMETER inmemory;

14. 完整库缓存(强制完整模式)

通常,这决定了哪些数据将保留在缓冲区中。 当空间不足时,数据就会从内存中写出。 另外,为了防止大量读取将有用信息挤出缓冲区,某些操作可能会采取绕过缓冲区的措施。 (12.1.0.2) 引入了完整数据缓冲的概念。 如果缓冲区被认为足够大以容纳整个数据库,它将缓冲所有数据块。 此外,可以强制启用全数据缓冲模式。

要强制开启该模式,需要先将其关闭,并将库置于挂载状态。 否则,对打开的数据库执行ALTER命令会报错。

要启用强制全库缓存模式,数据库兼容级别必须为12.0.0或更高;

14.1. 检查是否启用全数据库缓存

G 来自 V$;

14.2. 启用完整数据库缓存

startup mount;
ALTER DATABASE FORCE FULL DATABASE CACHING;
ALTER DATABASE OPEN;

15.

是12.2版本推出的新功能,也叫数据分片,适合(OLTP)。 基于表分区技术,是在数据层将数据水平分区存储到不同数据库的技术。 它可以实现分区表,不同的分区存储在不同的数据库中。 每个数据库位于不同的服务器上。 每个数据库称为一个分片。 这些分片形成一个逻辑数据库,称为(SDB)。 此表也称为表。 每个分片数据库保存不同的表数据集(按键分区),但它们具有相同的列()。

分片是一种每个分片数据库使用独立的服务器硬件(CPU、内存等)的技术。 Shard可以运行在独立数据库或/ADG数据库中。

16.在线将非分区表转换为分区表(12.2.0.1)

在.2版本之前,如果想将非分区表转换为分区表,常用的方法有以下几种:

1)建立分区表并向分区表插入数据;

2)使用在线redefinition()方法。

该版本提供了一项新功能,可以通过一条语句将非分区表转换为分区表,例如:

alter table tablename modify
partition by range (字段) interval (10)
( 
partition p1 values less than (10),
partition p2 values less than (20)
) online
;

17.表在线运动

在11g和12C R1中,如果通过alter table move降低高水位线,则移动后表的索引将失效。 在12C R2中,表可以通过唯一关键字子句在线移动,而不会出现索引失败。

 alter table tablename move online;

18.通过网络恢复数据文件

在12C中,可以使用rman指定网络服务名来恢复主备数据库之间的数据库文件。 有以下几种方法:

19. 数据库内归档

通常,在应用程序开发中设计表时,不可避免地要删除表中的数据。 如果直接使用硬删除,则无法有效追踪删除的数据; 如果采用软删除(如软删除,表中已添加有删除标记的字段)。 虽然可以追踪已删除的字段,但如果使用未删除的数据,则需要添加='N'。 这种带有删除标记的数据对应用程序是可见的。 ,并占用一定的存储空间。

In-12c 引入了一项新功能,允许用户通过将表上的行标记为非活动来归档数据。 这些数据行可以通过压缩进一步优化,并且默认情况下对应用程序不可见。 该功能可以通过对现有代码进行最小的改动来实现这种“标记删除”的功能和需求。

标签:  表空间 数据库文件 数据库 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。