[20160910]快速修改表的schema.txt

[20160910]快速修改表的schema.txt

--以前也做过例子:
http://blog.itpub.net/267265/viewspace-741154/
http://blog.itpub.net/267265/viewspace-744787/

--第1种就是修改数据字典的情况,但是这种存在一定的风险,我当时的测试版本11.2.0.1还有修改obj$的字段spare3.
--第2种就是利用交换分区的方法。这种方式小量很行,大量也是不合适。

--第1种合适大量修改,但是确实存在一定风险,至少要严格测,除了以上方法,其实还可以传输表空间模式。
--还是通过例子来说明问题.

1.环境:
SCOTT@test01p> @ ver1
PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.1.0.1.0     Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

CREATE TABLESPACE LFREE DATAFILE
  'D:\APP\ORACLE\ORADATA\TEST\TEST01P\LFREE01.DBF' SIZE 100M AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

SCOTT@test01p> create table t tablespace lfree as select * from  dba_objects;
Table created.

SCOTT@test01p> select count(*) from t;
  COUNT(*)
----------
     91698

grant dba to test identified by test;

2.传输表空间:
--以sys用户登录:
SYS@test01p> execute dbms_tts.transport_set_check('lfree');
PL/SQL procedure successfully completed.

SYS@test01p> select * from transport_set_violations;
no rows selected

SYS@test01p> alter tablespace lfree read only;
Tablespace altered.

--奇怪windows 要使用双引号。
D:\tmp\expdp>exp userid=\"/@test01p as sysdba\" transport_tablespace=y tablespaces=lfree file=lfree.exp
exp userid=\"/@test01p as sysdba\" transport_tablespace=y tablespaces=lfree file=lfree.exp
Export: Release 12.1.0.1.0 - Production on Sat Sep 10 21:43:42 2016
Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set
Note: table data (rows) will not be exported
About to export transportable tablespace metadata...
For tablespace LFREE ...
. exporting cluster definitions
. exporting table definitions
. . exporting table                              T
. exporting referential integrity constraints
. exporting triggers
. end transportable tablespace metadata export
Export terminated successfully without warnings.

--备份表空间。可以使用os命令来拷贝,因为现在是read only。12c drop表空间支持keep datafiles。
SYS@test01p> drop tablespace lfree including contents keep datafiles;
Tablespace dropped.

D:\tmp\expdp>imp userid=\"/@test01p as sysdba\" transport_tablespace=y tablespaces=lfree datafiles=D:\APP\ORACLE\ORADATA\TEST\TEST01P\LFREE01.DBF fromuser=scott touser=test file=lfree.exp
imp userid=\"/@test01p as sysdba\" transport_tablespace=y tablespaces=lfree datafiles=D:\APP\ORACLE\ORADATA\TEST\TEST01P\LFREE01.DBF fromuser=scott touser=test file=lfree.exp
Import: Release 12.1.0.1.0 - Production on Sat Sep 10 21:52:04 2016
Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

Export file created by EXPORT:V12.01.00 via conventional path
About to import transportable tablespace(s) metadata...
import done in ZHS16GBK character set and AL16UTF16 NCHAR character set
. importing SCOTT's objects into TEST
. . importing table                            "T"
Import terminated successfully without warnings.

--以test用户登录,检查:
TEST@test01p> select count(*) from scott.t;
select count(*) from scott.t
                           *
ERROR at line 1:
ORA-00942: table or view does not exist

TEST@test01p> select count(*) from test.t;
  COUNT(*)
----------
     91698

--可以发现现在表t已经变成了test schema。

SYS@test01p> alter tablespace lfree read write ;
Tablespace altered.

--这种方式存在风险就是注意drop tablespace时注意要保留数据文件,不要删除数据文件!!

时间: 2024-09-12 04:33:16

[20160910]快速修改表的schema.txt的相关文章

[20120816]快速修改表的schema.txt

[20120816]快速修改表的schema.txt     前几天在测试环境,开发人员把几个表建成system schema,需要修改成别的schema模式.当然方法很多,ctas,exp/imp等等.数据库建立在他自己的机器(数据库是11G的),我建议他可以直接修改sys.obj$对象.最后他发现修改后,查看dba_objects依旧是原来的schema.我自己也做了测试. 测试如下: 1.测试环境 SQL> select * from v$version ; BANNER --------

[20120922]快速修改表的schema.txt

[20120922]快速修改表的schema.txt 如果想快速交换表的schema,常规方法是exp/imp,expdp/impdp或者ctas,在线重定义表等等,如果表很小,方法还可以.如果表大,就不是很好. 我以前写过一篇: http://space.itpub.net/?uid-267265-action-viewspace-itemid-741154 http://www.akadia.com/services/ora_exchange_partition.html 通过底层修改直接修

ORACLE中修改表的Schema的总结

前阵子遇到一个案例,需要将数据库中的几个表从USER A 移动到USER B下面,在ORACLE中,这个叫做更改表的所有者或者修改表的Schema.其实遇到这种案例,有好几种解决方法.下面我们通过实验来测试.验证一下.首先准备简单测试数据,如下所示:     SQL> CREATE TABLE TEST.KKK ( ID   INT   ,    NAME VARCHAR2(12) ,   CONSTRAINT PK_KKK PRIMARY KEY(ID) );   Table created.

InnoDB表快速修改varchar字段长度方案

前一篇文章末尾提到InnoDB快速修改字段长度.其实用场景在于,在设计表时,若需要预留varchar类型字段,还无法确定实际需要的长度.而当需要启用到预留的字段时,表中可能已经有很多数据,此时要根据需要修改字段长度, 若能够不需要重做数据,则能够减少这个修改操作对线上服务的影响. 几点说明 1. 注意到这里适用的是varchar类型, char类型不在本文讨论范围内.实际上,由于varchar类型字段数据并不是直接存储在聚簇索引中,才使得快速修改成为可能.而char类型改变长度至少要将整个聚簇索

[20171113]修改表结构删除列相关问题.txt

[20171113]修改表结构删除列相关问题.txt --//维护表结构删除字段一般都是先 ALTER TABLE <table_name> SET UNUSED (<column_name>); --//然后等空闲时候删除列. ALTER TABLE <table_name> DROP UNUSED COLUMNS CHECKPOINT <n>; --//参考文档: https://docs.oracle.com/cd/E11882_01/server.1

[20171113]修改表结构删除列相关问题2.txt

[20171113]修改表结构删除列相关问题2.txt --//测试看看修改表结构删除列产生的redo向量,对这些操作细节不了解,分析redo看看. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- ----------------------------------------------

[20171113]修改表结构删除列相关问题4.txt

[20171113]修改表结构删除列相关问题4.txt --//连续写了3篇修改表结构删除列的相关问题,链接如下: http://blog.itpub.net/267265/viewspace-2147158/ http://blog.itpub.net/267265/viewspace-2147163/ http://blog.itpub.net/267265/viewspace-2147196/ --//从redo记录日志内容看,日志仅仅记录偏移位置 (piece relative colu

[20171113]修改表结构删除列相关问题3.txt

[20171113]修改表结构删除列相关问题3.txt --//维护表结构删除字段一般都是先 ALTER TABLE <table_name> SET UNUSED (<column_name>); --//然后等空闲时候删除列. ALTER TABLE <table_name> DROP UNUSED COLUMNS CHECKPOINT <n>; --//参考文档: https://docs.oracle.com/cd/E11882_01/server.

[20160713]修改表结构增加1列与缺省值.txt

[20160713]修改表结构增加1列与缺省值.txt --昨天看yangtingkun的blog,提到一个非常有趣的测试,链接: --yangtingkun.net/?p=1483,我自己做一些补充测试: 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -----------------