ORACLE在线重定义
2016-07-21 11:52
489 查看
1、检查是否能够重定义
EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('用户名', '源表', DBMS_REDEFINITION.CONS_USE_PK);
2、开始重定义
EXEC DBMS_REDEFINITION.START_REDEF_TABLE('用户名', '源表','目标表');
3、复制约束,索引,授权
DECLARE
num_errors PLS_INTEGER;
begin
DBMS_REDEFINITION.copy_table_dependents(uname=> '用户名',
orig_table => '源表',
int_table => '目标表',
num_errors => num_errors,copy_statistics => true);
end;
/
4、同步数据
EXEC dbms_redefinition.sync_interim_table(uname=> '用户名',orig_table => '源表',int_table => '目标表');
5、结束
EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('用户名', '源表','目标表');
6、若死掉了,用这句终止
EXEC DBMS_REDEFINITION.abort_redef_table('用户名', '源表','目标表');
7、一般会遇到一个bug,
ORA-01442: 要修改为 NOT NULL 的列已经是 NOT NULL
11G可以忽略继续执行,但需要检查是否有无效对象
8、对于有外键的一定要格外小心,外键还是会指定到创建的INIT新表,导致报错
重定义物化视图,定义为有分区的视图
create materialized view FACT_MV_CLI_AREACODE
partition by range(COMDATE)
(
partition P_2013 values less than (TO_DATE(' 2014-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
partition P_2014 values less than (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
partition P_2015 values less than (TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
partition P_2016 values less than (TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
partition P_2017 values less than (TO_DATE(' 2018-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
partition P_2018 values less than (TO_DATE(' 2019-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
)
tablespace 表空间
nologging
build immediate
REFRESH COMPLETE ON DEMAND
WITH ROWID
enable query rewrite
as
原视图查询语句;
EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('用户名', '源表', DBMS_REDEFINITION.CONS_USE_PK);
2、开始重定义
EXEC DBMS_REDEFINITION.START_REDEF_TABLE('用户名', '源表','目标表');
3、复制约束,索引,授权
DECLARE
num_errors PLS_INTEGER;
begin
DBMS_REDEFINITION.copy_table_dependents(uname=> '用户名',
orig_table => '源表',
int_table => '目标表',
num_errors => num_errors,copy_statistics => true);
end;
/
4、同步数据
EXEC dbms_redefinition.sync_interim_table(uname=> '用户名',orig_table => '源表',int_table => '目标表');
5、结束
EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('用户名', '源表','目标表');
6、若死掉了,用这句终止
EXEC DBMS_REDEFINITION.abort_redef_table('用户名', '源表','目标表');
7、一般会遇到一个bug,
ORA-01442: 要修改为 NOT NULL 的列已经是 NOT NULL
11G可以忽略继续执行,但需要检查是否有无效对象
8、对于有外键的一定要格外小心,外键还是会指定到创建的INIT新表,导致报错
重定义物化视图,定义为有分区的视图
create materialized view FACT_MV_CLI_AREACODE
partition by range(COMDATE)
(
partition P_2013 values less than (TO_DATE(' 2014-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
partition P_2014 values less than (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
partition P_2015 values less than (TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
partition P_2016 values less than (TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
partition P_2017 values less than (TO_DATE(' 2018-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
partition P_2018 values less than (TO_DATE(' 2019-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
)
tablespace 表空间
nologging
build immediate
REFRESH COMPLETE ON DEMAND
WITH ROWID
enable query rewrite
as
原视图查询语句;
相关文章推荐
- oracle创建用户,分配表空间,表空间维护
- Agent简化云应用与企业内部部署应用之间的集成
- oracle ebs 采购订单导入 来源参考 Oracle metalink
- 【翻译自mos文章】设置了RemoveIPC=yes 的RHEL7.2 会crash掉Oracle asm 实例和Oracle database实例
- oracle数据库解锁和锁定用户命令
- Oracle的卸载
- 如何查询Oracle中所有用户信息
- oracle用户状态
- oracle 11g安装与部署
- CREATE TABLESPACE——PERMANENT
- oracle计算连续登陆/上班天数
- oracle存储过程-游标
- Oracle数据库常见错误总结(一)
- NLog 自定义字段 写入 oracle
- Oracle修改表空间大小
- oracle的分析函数over及开窗关键字range
- Oracle 删除用户和表空间
- Oracle和MySql面试题
- [李景山php]thinkphp核心源码注释|Oracle.class.php
- 关于Oracle的事务