今天测试一下ORACLE 12C的一个新功能-在线移动表或分区,这其实在10g版本就已经支持了,难道是官方文档写错了,先不按照文档描述的去测试,看看是否堆表也可以在线迁移。以下是实验过程:

下面先看下11g版本,测试环境是OEL5.7 ORACLE 11.2.0.3。

session 1 > select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

PL/SQL Release 11.2.0.3.0 - Production

CORE 11.2.0.3.0 Production

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 - Production

创建测试表。

session 1 > conn stream/stream

session 1 > create table move_test as select * from dba_tables;

Table created.

session 1 > delete from move_test where rownum=1;

1 row deleted.

SESSION1创建测试表并删除一条记录,没有提交,在SESSION2移动这个表到其他表空间看看是否可以。

session 2 >alter table move_test move tablespace ogg;

alter table move_test move tablespace ogg

*

ERROR at line 1:

ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

SESSION1回滚DELETE操作。

session 1 >rollback;

Rollback complete.

此时SESSION2可以移动表。

session 2 >alter table move_test move tablespace ogg;

Table altered.

可见,11g的堆表上是不可以直接在线移动表的,在看看12C是否可以呢?

测试环境:OEL5.7 ORACLE 12.1.0.1。

SESSION 1>select BANNER from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

PL/SQL Release 12.1.0.1.0 - Production

CORE    12.1.0.1.0      Production

TNS for Linux: Version 12.1.0.1.0 - Production

NLSRTL Version 12.1.0.1.0 - Production

创建测试表。

SESSION 1>create table move_test as select * from dba_tables;

Table created.

SESSION 1>delete from move_test where rownum=1;

1 row deleted.

删除一条记录后不提交,看看其他会话是否可以移动这张表。

SESSION 2>alter table move_test move tablespace test;

alter table move_test move tablespace test

*

ERROR at line 1:

ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

直接移动是不行的,那么加上ONLINE子句呢?

SESSION 2>alter table move_test move tablespace move_tbs online;

alter table move_test move tablespace move_tbs online

*

ERROR at line 1:

ORA-01735: invalid ALTER TABLE option

很奇怪吧,ORACLE12C既然说可以在线移动表或分区,为什么移动不了呢?看看官方文档的介绍。

move_table_clause

The move_table_clause lets you relocate data of a nonpartitioned table or of a partition of a partitioned table into a new segment, optionally in a different tablespace, and optionally modify any of its storage attributes.

You can also move any LOB data segments associated with the table or partition using the LOB_storage_clause and varray_col_properties clause. LOB items not specified in this clause are not moved.

If you move the table to a different tablespace and the COMPATIBLE parameter is set to 10.0 or higher, then Oracle Database leaves the storage table of any nested table columns in the tablespace in which it was created. If COMPATIBLE is set to any value less than 10.0, then the database silently moves the storage table to the new tablespace along with the table.

ONLINE Clause This clause is valid only for top-level index-organized tables and for nested table storage tables that are index organized. Specify ONLINE if you want DML operations on the index-organized table to be allowed during rebuilding of the primary key index of the table.

Restrictions on Moving Tables Online Moving tables online is subject to the following restrictions:

•You cannot combine this clause with any other clause in the same statement.

You cannot specify this clause for a partitioned index-organized table.

Parallel DML and direct path INSERT operations require an exclusive lock on the table. Therefore, these operations are not supported concurrently with an ongoing online table MOVE, due to conflicting locks.

You cannot specify this clause if the index-organized table contains any LOB, VARRAY, Oracle-supplied type, or user-defined object type columns.

原来只支持IOT表,可是在10g开始就已经支持在线移动IOT表了,下面测试12C版本的这个功能。

12C:

SESSION1>CREATE TABLE MOVE_TEST_IOT(OBJECT_ID NUMBER,OBJECT_NAME VARCHAR2(40),CONSTRAINT O_ID_PK PRIMARY KEY (OBJECT_ID)) ORGANIZATION INDEX;

Table created.

SESSION1>INSERT INTO MOVE_TEST_IOT SELECT OBJECT_ID,OBJECT_NAME FROM DBA_OBJECTS;

90784 rows created.

SESSION1创建表并插入数据,不提交。SESSION2执行迁移操作。

SESSION2>ALTER TABLE MOVE_TEST_IOT MOVE TABLESPACE MOVE_TBS ONLINE;

此时操作会被挂起,等待SESSION1提交。此时SESSION1还可以进行其他DML操作,不会受影响。

SESSION1>delete from MOVE_TEST_IOT where rownum <=10000;

10000 rows deleted.

此时查看到相关的锁信息。

SESSION3>select p.spid,a.serial#, c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a.process=b.process and c.object_id=b.object_id;

SPID          SERIAL# OBJECT_NAME          SESSION_ID ORACLE_USERNAME OS_USER_NA

---------- ---------- -------------------- ---------- --------------- ----------

15734            1089 MOVE_TEST_IOT                24 STREAM          oracle

15570            1705 MOVE_TEST_IOT               261 STREAM          oracle

15570            1705 SYS_JOURNAL_91703           261 STREAM          oracle

在线移动表时,会自动生成一张中间表,本案例中间表名字是SYS_JOURNAL_91703,迁移过程完成后,ORACLE会自动清理中间表。下面看下SESSION1提交后,移动是否可以成功完成。

SESSION1>commit;

Commit complete.

在SESSION1提交后,SESSION2迁移表操作成功完成。

SESSION2>ALTER TABLE MOVE_TEST_IOT MOVE TABLESPACE USERS ONLINE;

Table altered.

在线迁移IOT表并不能说是12C的新功能,在10g版本就已经支持在线迁移IOT表了(测试过程和12C的测试过程一样,这里就不描述了),我猜测是在下一个版本可能ORACLE会推出在线迁移堆表的特性,之所以在12.1.0.1版本提前说支持在线迁移表了,可能是ORACLE的一贯作风(忽悠),但一般ORACLE提说出这个功能在下一个版本就会推出,一起期待吧。

———————————————————-end——————————————————————

oracle+12c+大表,ORACLE 12C新特性-在线迁移表或分区 | 信春哥,系统稳,闭眼上线不回滚!...相关推荐

  1. oracle12c 新增维护时间窗口,ORACLE 12C新特性-自动维护全局索引 | 信春哥,系统稳,闭眼上线不回滚!...

    今天在网上看了一篇关于12C新特性-自动维护全局索引的帖子,经测试,貌似根本不是那么回事呀.如果对分区表进行分区DDL操作,如果不加update index字句,全局索引就会失效,下面先看一下是11. ...

  2. oracle 12c undo,Oracle 12C新特性-临时UNDO段(Temporary Undo Segments) | 信春哥,系统稳,闭眼上线不回滚!...

    在12C版本,为了减少UNDO表空间的使用率及减少REDO和归档日志的产生量,ORACLE推出了临时UNDO段(Temporary Undo Segments)新特性.这个新特性把临时表产生的UNDO ...

  3. oracle desc能看约束,ORACLE 12C新特性-DESC显示不可见字段 | 信春哥,系统稳,闭眼上线不回滚!...

    之前写过一篇关于12C新特性-不可见字段的文章,详见http://www.dbdream.com.cn/2014/01/19/oracle-12c%E6%96%B0%E7%89%B9%E6%80%A7 ...

  4. oracle 回滚 drop的表,使用ODU恢复被DROP的表 | 信春哥,系统稳,闭眼上线不回滚!...

    本实验模拟使用ODU恢复被DROP掉的表的恢复,有关ODU软件的下载和使用说明详见老熊的BLOG http://www.laoxiong.net 本实验以上一篇文章<使用ODU恢复被TRUNCA ...

  5. linuxoracle图形界面无法跳出_Linux 7图形化安装Oracle或者其他软件,打不开图形界面的问题 | 信春哥,系统稳,闭眼上线不回滚!...

    linux 7操作系统图形化安装Oracle软件,需要设置DISPLAY环境变量,之前的版本几乎是不需要设置的,如果不设置DISPLAY环境变量,在启动图形界面的时候,很可能会遇到下面的错误. [ro ...

  6. oracle awr 执行计划,AWR(五)-利用AWR生成SQL执行计划(SQLREPORT)并进行优化 | 信春哥,系统稳,闭眼上线不回滚!...

    有些时候,我们需要分析占用资源比较大的sql的执行计划,也需要将sql的执行计划以报告的形式反馈给客户,由于AWR报告里的SQL通常都是些变量,因此以命令行方式生成sql的执行计划就很麻烦,而且也不美 ...

  7. oracle数据泵导入提示00972,oracle数据库使用expdp指定FLASHBACK_TIME遇到ORA-39150错误 | 信春哥,系统稳,闭眼上线不回滚!...

    目前正在做一个数据库合并的项目,有一套系统使用分库分表并且读写分离的架构,订单系统和用户系统都是6个写库和6个读库,目前订单系统已经由6个写库合并为3个写库,马上要做用户系统的数据库合并工作,用户系统 ...

  8. oracle服务未启动失败,windows服务未启动导致 ORA-12560和RMAN-00554错误 | 信春哥,系统稳,闭眼上线不回滚!...

    今天,有人在群里问RMAN-00554.RMAN-04005.ORA-12560错误,如下: C:Usersstream>rman target / 恢复管理器: Release 11.2.0. ...

  9. linux oracle目录权限不够,Linux 目录权限不足导致ORA-39070错误 | 信春哥,系统稳,闭眼上线不回滚!...

    同事要做数据迁移测试,需要服务器权限,就在操作系统上给他创建了一个用户wzs,给分了dba组,拥有dba组的用户就可以正常操作数据库,而且可以使用最高权限(SYS). [root@SL010A-IVD ...

最新文章

  1. 统计局:居民用于交通活动的平均时间为38分钟
  2. RMAN异机复制数据库(相同路径)
  3. 9.26-mkdir,tree,touch命令
  4. es 怎么嵌入 算法模型_快速ES-RNN: ES-RNN算法的GPU实现
  5. 用VB构键Internet的应用
  6. RabbitMQ——work queue
  7. angularjs的三种注入方式
  8. 1.9_heap_topK_topK问题
  9. binlog数据库不写入binlog_mysql数据库备份及其恢复
  10. win7优化设置_Win10系统优化软件,这是我用的最舒服的一款软件了!
  11. selenium课程笔记3-使用selenium中的webdriver对浏览器操作-页面元素定位及操作
  12. JDBC基础篇(MYSQL)——自定义JDBCUtil工具类
  13. Scripting for Testers 测试人员脚本编程教程 Lynda课程中文字幕
  14. Android组件化开发,组件间的Activity页面跳转。
  15. Android 数据库技术
  16. unity种四种光源
  17. 如何关闭Windows蜂鸣器的嘟嘟声
  18. 项目:数据库表的梳理
  19. Centos mysql5.7 主从复制 之 无损复制,增强版的半同步复制 ( lossless replication )单向同步
  20. DeepFunc:一种深度学习框架,可根据蛋白质序列和相互作用准确预测蛋白质功能

热门文章

  1. 6个经典Python项目让你快速具备独立开发能力
  2. 小学计算机教案范文,小学三年级计算机教案范文
  3. 「企业管理」精诚CRM+——一体化管理企业业务流程
  4. 珠海计算机教师考编笔试,教师考编:珠海面试98.75高分,泪洒考场,非师范圆梦教师...
  5. 论区域健康一卡通的技术及功能
  6. 三星E1200R语言设置_三星也能「多屏协同」?教你开启 Link to Windows
  7. 详解23种设计模式(基于Java)—— 结构型模式(三 / 五)
  8. 用Win 2003架设邮件服务器(转)
  9. 百度云-深度学习tensorflow搭建
  10. python爬虫滑动验证码_python爬虫21 | 对于b站这样的滑动验证码,不好意思,照样自动识别...