Oracle表空间跨平台跨版本迁移测试

Oracle表空间跨平台跨版本迁移测试

Oracle 官方文档里说到表空间可以跨平台迁移挂版本,但是有前提条件要满足

1.源和目标数据库使用相同字节顺序(也就是说little endian与big engian)
2.目标数据库不能有和源库有相同的表空间
3.源和目标数据库拥有相同的块大小
4.必须传输自包含的对象集(我的理解是表空间内的对象不能跨表空间)

以下是测试机环境
系统                          数据库版本 
oracle linux 4(U8) X86 32位   10.2.0.1.0   ---  源数据库
oracle linux 6(U3) x86 32位   11.2.0.1.0   ---  目标数据库
windown xp       32位   10.2.0.1.0   ---  目标数据库

检查字节顺序
源数据库
SQL> select d.platform_name,endian_format
  2  from v$transportable_platform. tp,v$database d
  3  where tp.platform_name=d.platform_name;

PLATFORM_NAME                  ENDIAN_FORMAT
-----------------------        ---------------

Linux IA (32-bit)              Little
目标库:oracle linux 6.3
SQL> select d.platform_name,endian_format
  2  from v$transportable_platform. tp,v$database d
  3  where tp.platform_name=d.platform_name;

PLATFORM_NAME                 ENDIAN_FORMAT
----------------------        ------------------
Linux IA (32-bit)             Little

目标库:winXP 32位
SYS@test>select d.platform_name,endian_format
  2  from v$transportable_platform. tp,v$database d
  3  where tp.platform_name=d.platform_name;

PLATFORM_NAME                                     ENDIAN_FORMAT
-----------------------------------               --------------------------
Microsoft Windows IA (32-bit)                     Little

检查版本兼容性

NAME     TYPE                  VALUE
--------------------     -----------              -------------------
compatible     string                  10.2.0.1.0    ----------------------&gt要满足平台兼容性10.0.0.0.0 以上


开始测试
---在源库
在源数据库上创建一个用户及表空间是该用户所有
SQL> create tablespace test datafile '/u01/app/oracle/oradata/orcl/test01.dbf'
  2  size 10M;
  
SQL> create user test identified by test default tablespace test;
SQL> grant dba to test;

3.在test用户在建一个表并插入数据-------------------------&gt保证该表空间下的对象自包含
SQL> create table t as select * from scott.dept;

4.将test表空间设置为只读
SQL> alter tablespace test read only;

5.使用exp实用程序导出test表空间元数据
[oracle@Ora10gR2 ~]$ exp \'system/oracle as sysdba\' file='test.dmp' tablespaces=test TRANSPORT_TABLESPACE=y log=exptest.log

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses WE8ISO8859P1 character set (possible charset conversion)
Note: table data (rows) will not be exported
About to export transportable tablespace metadata...
For tablespace TEST ...
. 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.

6.将test表空间下的数据文件和刚才导出文件拷贝到目标库响应目录下

---在目标库 oracle linux 6.3

1.在目标库下创建一个名为test的用户
SQL> create user test identified by test;

2.用imp 使用程序导入test表空间元数据

[oracle@lyj-linux ~]$ imp \'sys/oracle@prod as sysdba\' file='test.dmp' tablespaces=test TRANSPORT_TABLESPACE=y \
TTS_OWNERS=test DATAFILES='/u01/app/oracle/oradata/prod/test01.dbf'

Import: Release 11.2.0.1.0 - Production on Wed Apr 3 10:08:16 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export file created by EXPORT:V10.02.01 via conventional path
About to import transportable tablespace(s) metadata...
import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses WE8MSWIN1252 character set (possible charset conversion)
. importing SYS's objects into SYS
. importing SYS's objects into SYS
. importing TEST's objects into TEST
. . importing table                            "T"
. importing SYS's objects into SYS
Import terminated successfully without warnings.

3.导入成功后查看test表空间状态
SQL> select tablespace_name,status,plugged_in from dba_tablespaces;

TABLESPACE_NAME STATUS  PLU
--------------- --------- ---
SYSTEM ONLINE  NO
SYSAUX ONLINE  NO
UNDOTBS1 ONLINE  NO
TEMP ONLINE  NO
USERS ONLINE  NO
EXAMPLE ONLINE  YES
TEST READ ONLY YES
此时导入test表空间后期状态为只读,更改为读写就可以插入数据了

---- 在目标库winXP
在这个库下我值之前创建有test用户,因此在这里不需要创建了,同时在这个库下没test表空间,正好,如果已有那先重命名它,不然导入时估计会报错
此时已将元数据库test表空间元数据的导出文件及test表空间下的数据文件拷到相应目录
准备导入

C:\Documents and Settings\战鹰>imp 'sys/oracle@test as sysdba' \
file='d:\test.dmp' tablespaces=test transport_tablespace=y tts_owners=test
datafiles='D:\oracle\product\10.2.0\oradata\test\test01.db

Import: Release 10.2.0.1.0 - Production on 星期三 4月 3 22:35:45 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

经由常规路径由 EXPORT:V10.02.01 创建的导出文件
即将导入可传输的表空间元数据...
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
导出客户机使用 US7ASCII 字符集 (可能的字符集转换)
. 正在将 SYS 的对象导入到 SYS
. 正在将 SYS 的对象导入到 SYS
IMP-00017: 由于 ORACLE 错误 29345, 以下语句失败:
 "BEGIN   sys.dbms_plugts.beginImport ('10.2.0.1.0',31,'2000',10,'Linux IA (3"
 "2-bit)',51373,70001,1,0,0,0); END;"
IMP-00003: 遇到 ORACLE 错误 29345
ORA-29345: 无法使用不兼容的字符集将表空间插入到数据库中
ORA-06512: 在 "SYS.DBMS_PLUGTS", line 2386
ORA-06512: 在 "SYS.DBMS_PLUGTS", line 1946
ORA-06512: 在 line 1

报错了 IMP-00003: 遇到 ORACLE 错误 29345 RA-29345: 无法使用不兼容的字符集将表空间插入到数据库中
估计字符集有问题,然后到网上搜了一下也清楚了迁移表空间也要保证源库金额目标库字符集要一致
看看源库的字符集
SQL>select * from sys.props$ where name='NLS_CHARACTERSET';

NAME                 VALUE$                    COMMENT$
-------------------- ------------------------- -------------------
NLS_CHARACTERSET     WE8ISO8859P1                 Character set


在看看目标库(winxp)的字符集
SYS@test>select * from sys.props$ where name='NLS_CHARACTERSET';

NAME                 VALUE$                    COMMENT$
-------------------- ------------------------- -------------------
NLS_CHARACTERSET     AL32UTF8                  Character set

这下清楚了确实不一样啊
这时我想把源库的字符集改为AL32UTF8,改之前还要做点准备的如下
先检测库中的数据内容是否全库可以转换为AL32UTF8字符集,检测使用oracle提供的csscan工具实现
安装csscan相关数据字典
SQL> @?/rdbms/admin/csminst.sql
csscan使用说明
[oracle@Ora10gR2 ~]$ csscan help=y
使用csscan检测当前数据库
[oracle@Ora10gR2 ~]$ csscan userid="'"sys/xifenfei as sysdba"'" full=y \
fromchar=WE8ISO8859P1 tochar=AL32UTF8 log=/tmp/check.log capture=y array=1000000 process=4
查看csscan检查日志
[oracle@Ora10gR2 ~]$ cat /tmp/check.log.txt


Database Scan Summary Report

Time Started  : 2013-04-04 09:49:48
Time Completed: 2013-04-04 09:50:46

Process ID         Time Started       Time Completed
---------- -------------------- --------------------
         1  2013-04-04 09:49:54  2013-04-04 09:50:30
         2  2013-04-04 09:49:54  2013-04-04 09:50:45
         3  2013-04-04 09:49:54  2013-04-04 09:50:42
         4  2013-04-04 09:49:54  2013-04-04 09:50:30
---------- -------------------- --------------------

[Database Size]

Tablespace                           Used            Free           Total       Expansion
------------------------- --------------- --------------- --------------- ---------------
SYSTEM                            472.13M           7.88M         480.00M         684.00K
UNDOTBS1                           10.25M          14.75M          25.00M            .00K
SYSAUX                            227.81M           2.19M         230.00M           7.99M
TEMP                                 .00K            .00K            .00K            .00K
USERS                             448.00K           4.56M           5.00M            .00K
TEST                              128.00K           9.88M          10.00M            .00K
------------------------- --------------- --------------- --------------- ---------------
Total                             710.75M          39.25M         750.00M           8.66M

The size of the largest CLOB is 1625114 bytes

[Database Scan Parameters]

Parameter                      Value                                           
------------------------------ ------------------------------------------------
CSSCAN Version                 v2.1                                            
Instance Name                  orcl                                            
Database Version               10.2.0.1.0                                      
Scan type                      Full database                                   
Scan CHAR data?                YES                                             
Database character set         WE8ISO8859P1                                    
FROMCHAR                       WE8ISO8859P1                                    
TOCHAR                         AL32UTF8                                        
Scan NCHAR data?               NO                                              
Array fetch buffer size        1000000                                         
Number of processes            4                                               
Capture convertible data?      YES                                             
------------------------------ ------------------------------------------------

[Scan Summary]

All character type data in the data dictionary are convertible to the new character set
All character type application data remain the same in the new character set

[Data Dictionary Conversion Summary]

Datatype                    Changeless      Convertible       Truncation            Lossy
--------------------- ---------------- ---------------- ---------------- ----------------
VARCHAR2                     1,890,386                0                0                0
CHAR                             1,097                0                0                0
LONG                           147,015                0                0                0
CLOB                            19,764              786                0                0
VARRAY                          21,362                0                0                0
--------------------- ---------------- ---------------- ---------------- ----------------
Total                        2,079,624              786                0                0
Total in percentage             99.962%           0.038%           0.000%           0.000%

The data dictionary can be safely migrated using the CSALTER script

[Application Data Conversion Summary]

Datatype                    Changeless      Convertible       Truncation            Lossy
--------------------- ---------------- ---------------- ---------------- ----------------
VARCHAR2                        29,991                0                0                0
CHAR                                 0                0                0                0
LONG                                 0                0                0                0
CLOB                                 0                0                0                0
VARRAY                           1,436                0                0                0
--------------------- ---------------- ---------------- ---------------- ----------------
Total                           31,427                0                0                0
Total in percentage            100.000%           0.000%           0.000%           0.000%

[Distribution of Convertible, Truncated and Lossy Data by Table]

USER.TABLE                                              Convertible       Truncation            Lossy
-------------------------------------------------- ---------------- ---------------- ----------------
MDSYS.SDO_COORD_OP_PARAM_VALS                                   200                0                0
MDSYS.SDO_GEOR_XMLSCHEMA_TABLE                                    1                0                0
MDSYS.SDO_STYLES_TABLE                                           78                0                0
MDSYS.SDO_XML_SCHEMAS                                             4                0                0
SYS.METASTYLESHEET                                               80                0                0
SYS.RULE$                                                         4                0                0
SYS.WRH$_SQLTEXT                                                162                0                0
SYS.WRH$_SQL_PLAN                                               143                0                0
SYS.WRI$_ADV_OBJECTS                                              5                0                0
SYS.WRI$_DBU_FEATURE_METADATA                                    90                0                0
SYS.WRI$_DBU_FEATURE_USAGE                                        2                0                0
SYS.WRI$_DBU_HWM_METADATA                                        17                0                0
-------------------------------------------------- ---------------- ---------------- ----------------

[Distribution of Convertible, Truncated and Lossy Data by Column]

USER.TABLE|COLUMN                                       Convertible       Truncation            Lossy
-------------------------------------------------- ---------------- ---------------- ----------------
MDSYS.SDO_COORD_OP_PARAM_VALS|PARAM_VALUE_FILE                  200                0                0
MDSYS.SDO_GEOR_XMLSCHEMA_TABLE|XMLSCHEMA                          1                0                0
MDSYS.SDO_STYLES_TABLE|DEFINITION                                78                0                0
MDSYS.SDO_XML_SCHEMAS|XMLSCHEMA                                   4                0                0
SYS.METASTYLESHEET|STYLESHEET                                    80                0                0
SYS.RULE$|CONDITION                                               4                0                0
SYS.WRH$_SQLTEXT|SQL_TEXT                                       162                0                0
SYS.WRH$_SQL_PLAN|OTHER_XML                                     143                0                0
SYS.WRI$_ADV_OBJECTS|ATTR4                                        5                0                0
SYS.WRI$_DBU_FEATURE_METADATA|INST_CHK_LOGIC                     11                0                0
SYS.WRI$_DBU_FEATURE_METADATA|USG_DET_LOGIC                      79                0                0
SYS.WRI$_DBU_FEATURE_USAGE|FEATURE_INFO                           2                0                0
SYS.WRI$_DBU_HWM_METADATA|LOGIC                                  17                0                0
-------------------------------------------------- ---------------- ---------------- ----------------

[Indexes to be Rebuilt]

USER.INDEX on USER.TABLE(COLUMN)                                                         
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
网上博客里说只要Truncation和Lossy都为0就可以改字符集,不为0则去看err 日志,然后吧相关问题处理掉
修改字符集--数据库在restricted模式才能修改
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size    1218316 bytes
Variable Size   71305460 bytes
Database Buffers   92274688 bytes
Redo Buffers    2973696 bytes
Database mounted.
SQL> alter system enable restricted session;

System altered.

SQL> alter database open;

Database altered.

SQL> alter database character set internal_use AL32UTF8;

Database altered.

接着在按上面步骤吧test表空间设置为read only,再用imp导出test表空间元数据,拷贝test表空间下的数据文件
和刚才导出文件到目标库(winxp)响应目录下
再次导入
在此目标库下我也之前建了个test1, 用户,我想把导入的test表空间让它的拥有者为test1
导入
C:\Documents and Settings\战鹰>imp 'sys/oracle@test as sysdba' \
file='d:\test1.dmp' tablespaces=test transport_tablespace=y tts_owners=test1
datafiles='D:\oracle\product\10.2.0\oradata\test\test011.db

Import: Release 10.2.0.1.0 - Production on 星期四 4月 4 10:32:43 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

经由常规路径由 EXPORT:V10.02.01 创建的导出文件
即将导入可传输的表空间元数据...
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
导出客户机使用 US7ASCII 字符集 (可能的字符集转换)
. 正在将 SYS 的对象导入到 SYS
. 正在将 SYS 的对象导入到 SYS
IMP-00017: 由于 ORACLE 错误 29344, 以下语句失败:
 "BEGIN   sys.dbms_plugts.checkUser('TEST'); END;"
IMP-00003: 遇到 ORACLE 错误 29344
ORA-29344: 所有者验证失败 - 与所有者 'TEST' 不符
ORA-06512: 在 "SYS.DBMS_PLUGTS", line 1895
ORA-06512: 在 line 1
IMP-00000: 未成功终止导入

又报错了,这回不是字符集的问题,问题是ORA-29344: 所有者验证失败 - 与所有者 'TEST' 不符,
说明我想把导入的test表空间让它的拥有者为test1是不行的,而且源库test表空间的拥有者也是test,那换回test用户吧
再导入
C:\Documents and Settings\战鹰>imp 'sys/oracle@test as sysdba' \
file='d:\test1.dmp' tablespaces=test transport_tablespace=y tts_owners=test
datafiles='D:\oracle\product\10.2.0\oradata\test\test011.db

Import: Release 10.2.0.1.0 - Production on 星期四 4月 4 10:36:34 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

经由常规路径由 EXPORT:V10.02.01 创建的导出文件
即将导入可传输的表空间元数据...
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
导出客户机使用 US7ASCII 字符集 (可能的字符集转换)
. 正在将 SYS 的对象导入到 SYS
. 正在将 SYS 的对象导入到 SYS
. 正在将 TEST 的对象导入到 TEST
IMP-00015: 由于对象已存在, 下列语句失败:
 "CREATE TABLE "T" ("DEPTNO" NUMBER(2, 0), "DNAME" VARCHAR2(14), "LOC" VARCHA"
 "R2(13))  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(SEG_FILE 5 S"
 "EG_BLOCK 11 OBJNO_REUSE 51366 INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 B"
 "UFFER_POOL DEFAULT)                   LOGGING NOCOMPRESS"
. 正在将 SYS 的对象导入到 SYS
成功终止导入, 但出现警告。

这回成功了,但又警告 IMP-00015: 由于对象已存在,我查一下目标库test用户是不是有个对象 t

TEST@test>select object_name ,object_type from user_objects;

OBJECT_NAME                            OBJECT_TYPE
--------------------                   ------------------
T                                      TABLE
SYS_TEMP_FBT                           TABLE
果然有,然后我把它drop掉,刚才导入成的test表空间及其数据文件也drop掉再导入
TEST@test>drop table t ;

SYS@test>select tablespace_name ,status from dba_tablespaces;

TABLESPACE_NAME                                              STATUS
------------------------------------------------------------ ----------------
SYSTEM                                                       ONLINE
UNDOTBS1                                                     ONLINE
SYSAUX                                                       ONLINE
TEMP                                                         ONLINE
USERS                                                        ONLINE
JSTBS1                                                       ONLINE
TESTTBS                                                      ONLINE
TEST                                                         READ ONLY

已选择8行。

SYS@test>drop tablespace test including contents and datafiles;

表空间已删除。

ok,再次导入

C:\Documents and Settings\战鹰>imp 'sys/oracle@test as sysdba' file='d:\test1.dmp' \
tablespaces=test transport_tablespace=y tts_owners=test \
datafiles='D:\oracle\product\10.2.0\oradata\test\test011.dbf'


Import: Release 10.2.0.1.0 - Production on 星期四 4月 4 10:48:53 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

经由常规路径由 EXPORT:V10.02.01 创建的导出文件
即将导入可传输的表空间元数据...
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
导出客户机使用 US7ASCII 字符集 (可能的字符集转换)
. 正在将 SYS 的对象导入到 SYS
. 正在将 SYS 的对象导入到 SYS
. 正在将 TEST 的对象导入到 TEST
. . 正在导入表                             "T"
. 正在将 SYS 的对象导入到 SYS
成功终止导入, 没有出现警告。

这回成功了
第一次从 系统oracle linux 4.8 数据库 10.2.0.1.0 导入到 系统oracle linux 6.3 数据库 11.2.0.1.0  一切顺利,字符集问题没报错
导完两个目标库后我查了 11.2.0.1.0库的字符集
SQL> select * from sys.props$ where name='NLS_CHARACTERSET';

NAME       VALUE$    COMMENT$
---------------------- ---------------- --------------------
NLS_CHARACTERSET   WE8MSWIN1252    Character set
这个库字符集是WE8MSWIN1252,源库我没改字符集之前是WE8ISO8859P1,一对比大同小异,最后网上搜了一下两者关系
WE8ISO8859P1是WE8MSWIN1252的子集,原来是一个系列的。

总结:
迁移之前要规划好,看源库与目标库是否是同一平台,同一字节顺序,同一版本数据库,
同一字符集,另外要迁移的表空间是否自包含。这些问题弄清楚了,过程将变得简单明了。
参考博客:http://www.xifenfei.com/2237.html          http://dl528888.blog.51cto.com/2382721/865850

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26861223/viewspace-757746/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26861223/viewspace-757746/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值