Orcle 12c DG 新特性---ADG备库支持序列

1 说明

从12c开始,Oracle Active Data Guard支持序列,备库通过临时表可以使用主库创建的序列。序列也可以创建为会话级别的序列。

2 实验-DG使用CACHE序列

CACHE的作用就是存入缓存中序列值的个数。

2.1 主库创建临时表和序列

SQL> CREATE GLOBAL TEMPORARY TABLE gtt (a int);
Table created.

SQL> CREATE SEQUENCE g CACHE 10;
Sequence created.

2.2 备库上向临时表插入序列值

SQL> INSERT INTO gtt VALUES (g.NEXTVAL);
1 row created.

SQL> INSERT INTO gtt VALUES (g.NEXTVAL);
1 row created.

SQL> SELECT * FROM gtt;
 A
----------
 1
 2

可以看到插入没有问题,且序列按顺序插入。

2.3 主库查询序列值

SQL> SELECT g.NEXTVAL FROM dual;
   NEXTVAL
----------
11

SQL> SELECT g.NEXTVAL FROM dual;
   NEXTVAL
----------
12

可以看到从11开始了,这就是CACHE 10的作用。如果要是有第二个备库,那么第二个备库的该序列的值会从21开始。

3 实验-会话级别序列

会话级别序列,新会话都会从序列的开始重新使用该序列,而不管另一个会话已经使用了多少个序列值。

3.1 主库创建会话级别序列

SQL> CREATE SEQUENCE sess_seq SESSION;
Sequence created.

–可以通过ALTER SEQUENCE…BLOBAL|SESSION来修改序列类型。GLOBAL为常规的序列。

3.2 备库使用该序列

SQL> insert into gtt values(sess_seq.NEXTVAL);
1 row created.

SQL> insert into gtt values(sess_seq.NEXTVAL);
1 row created.

SQL> SELECT * FROM gtt;
 A
----------
 1
 2

3.3 另一个会话使用该序列

SQL> conn lei/lei@sihong
Connected.

SQL> select * from gtt;
no rows selected

SQL> insert into gtt values(sess_seq.NEXTVAL);
1 row created.

SQL> insert into gtt values(sess_seq.NEXTVAL);
1 row created.

SQL> select * from gtt;
 A
----------
 1
 2

可以看到,序列被初始化了,从1开始重新使用。

你可能感兴趣的:(Oracle,12c)