Oracle TTS ORA-39322: Cannot use transportable tablespace with different timezone version 说明

 

一.问题描述

 

Oracle 11.2.0.3 做TTS 测试,在impdp时报错,信息如下:

rac1:/> impdp directory=backupdumpfile=ANQING.DMPtransport_datafiles=/u02/app/oracle/oradata/anqing/ANQING01.DBFremap_schema=anqing:dave logfile=anqing.log         

 

Import: Release 11.2.0.3.0 - Production onMon Feb 20 22:22:17 2012

 

Copyright (c) 1982, 2011, Oracle and/or itsaffiliates.  All rights reserved.

 

Username: / as sysdba

 

Connected to: Oracle Database 11gEnterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, OLAP, Data Miningand Real Application Testing options

ORA-39002: invalid operation

ORA-39322: Cannot use transportabletablespace with timestamp with timezone columns and different timezone version.

 

Oracle 传输表空间的相关说明,参考:

Oracle Transportable TableSpace(TTS) 传输表空间 说明

http://blog.csdn.net/tianlesoftware/article/details/7267582

 

测试环境是windows 到 Oracle Linux:

 

在windows 上查看timezone:

SQL> select * from v$version;

 

BANNER

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

Oracle Database 11g Enterprise EditionRelease 11.2.0.1.0 - 64bit Production

PL/SQL Release 11.2.0.1.0 - Production

CORE   11.2.0.1.0      Production

TNS for 64-bit Windows: Version 11.2.0.1.0- Production

NLSRTL Version 11.2.0.1.0 – Production

 

SQL> SELECT NAME,VALUE$ FROM PROPS$WHERE NAME='DST_PRIMARY_TT_VERSION';

 

NAME                           VALUE$

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

DST_PRIMARY_TT_VERSION         11

 

在Linux 上查看timezone:

SQL> select * from v$version;

 

BANNER

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

Oracle Database 11g Enterprise EditionRelease 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

 

SQL> SELECT NAME,VALUE$ FROM PROPS$WHERE NAME='DST_PRIMARY_TT_VERSION';

 

NAME                           VALUE$

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

DST_PRIMARY_TT_VERSION         14

 

 

rac1:/home/oracle> oerr ora 39322

39322, 00000, "Cannot usetransportable tablespace with timestamp with timezone columns and differenttimezone version."

// *Cause:  The source database was at a different timesonze version than the

//          target database and there were tables in the dumpfile with

//          timestamp with timezone columns.

// *Action: Convert the target database to the same timezone version as the

//          source database or use Data Pump without transportable tablespace.

 

 

二.解决方法:

MOS 上的说明:

Data Pump TTS Import Fails With ORA-39002And ORA-39322 Due To TIMEZONE Conflict [ID 1275433.1]

 

导致这个问题是source 和target 端timezones的不兼容,比如我们这里target 端的timezone 是14,高于source端的11. 当Data pump 检查dump 文件中timezones是否改变时,就会失败。

 

Oracle Database9i includes version 1 of the time zone files, and Oracle Database10g includes version 2. For Oracle Database 11g, release 2, all time zonefiles from versions 1 to 14 are included. Various patches and patch sets, whichare released separately for these releases, may update the time zone fileversion as well.

       Oracle 9i 的time zone 文件version是1,10g 是2,到了11gR2,time zone files 可以从1到14.

       默认情况下,11.2.0.1 的time zone 是11.

       11.2.0.2的time zone 是14

       11.2.0.3的time zone 是14.

 

 

对应的解决方法有两种:

 

2.1 解决方法一:创建一个新db 与 source 库 timezone相同

Create a newdatabase with the same timezone as the source database and use that to convertthe tablespace :

Before creatingthe new database set the environment variable, ORA_TZFILE, to match the sourcedatabase timezone version by setting it to the appropriate value, for example:-

$ export ORA_TZFILE=$ORACLE_HOME/oracore/zoneinfo/timezlrg_13.dat


- Import the source table space into the newly created database, for example:

$ impdp userid=\"/ as sysdba\"directory=DATA_PUMP_EXADATA dumpfile=<SOURCE_DATA.dmp>


- Use the 'dbms_dst' package to upgrade the new database timezone to version 14( in this example). 
- Note: The default timezone version for 11.2.0.2 is14.. 

--注意11.2.0.2 的timezone 默认是14.

 

2.2 解决方法二:升级source db的Timezone

Upgrade the thesource database Time Zone File and Timestamp with Time Zone Data (TSTZ) to thesame version as the target database version and redo the export.

 

For the steps todo this upgrade see the "Oracle Database Globalization Support Guide,11gRelease 2 (11.2)" steps under "Upgrading the Time Zone File andTimestamp with Time Zone Data" here:

http://download.oracle.com/docs/cd/E11882_01/server.112/e10729/ch4datetime.htm#CACFFHCJ

 

2.3 MOS 上的升级time zone 说明

 

TSLTZ (TIMESTAMP WITH LOCAL TIME ZONE) dataand DST updates [ID 756454.1]

How To Upgrade The Timezone File Older ThanVersion 11 Using DBMS_DST Package [ID 944122.1]

Updating the RDBMS DST version in 11gR2(11.2.0.1 and up) using DBMS_DST [ID 977512.1]

Actions For DST Updates When Upgrading ToOr Applying The 11.2.0.3 Patchset [ID 1358166.1]

Actions For DST Updates When Upgrading ToOr Applying The 11.2.0.2 Patchset [ID 1201253.1]

Actions For DST Updates When Upgrading To11.2.0.1 Base Release [ID 815679.1]

 

 

官网上提到的方法是对于oracle 8i,9i,10g的time zone 升级到11g的方法,基本是运行utltzver.sql脚本,或对于11.2.0.1到11.2.0.3则是直接升级DB.

        我这里也直接升级DB,不采用其他的操作了。

 

这个问题引出的表空间传输的注意事项:

TTS 要求source 和 Target 数据库版本一致,否则就出出现Time zone 的问题,导致impdp 无法成功进行。

 

 

 

 

 

 

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

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

QQ:492913789

Email:ahdba@qq.com

Blog:  http://www.cndba.cn/dave

Weibo: http://weibo.com/tianlesoftware

Twitter: http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware

 

-------加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请----

DBA1 群:62697716(满);   DBA2 群:62697977(满)  DBA3 群:62697850(满)  

DBA 超级群:63306533(满);  DBA4 群:83829929   DBA5群: 142216823

DBA6 群:158654907    DBA7 群:172855474   DBA总群:104207940

<think>好的,我现在遇到了Oracle创建表空间时报错ORA-02180的问题,需要仔细分析可能的原因和解决方案。首先,我需要理解这个错误的含义。根据错误代码,ORA-02180表示在创建表空间时使用了无效的选项。也就是说,在CREATE TABLESPACE语句中可能包含了一些不被支持的参数或语法错误。 首先,我应该回顾用户提供的引用内容。用户引用了三个参考资料,其中引用[3]提到了类似的错误,用户尝试创建表空间时路径是'C:\YCISMUST\DATAFILE\YCISMUST_TS_D00.ora',但出现了无效选项的错误。这可能意味着文件路径或语法存在问题。 接下来,我需要检查CREATE TABLESPACE的标准语法。正确的语法通常包括指定数据文件的路径、大小以及可能的其他选项。例如: ``` CREATE TABLESPACE tablespace_name DATAFILE 'file_path' SIZE size [AUTOEXTEND ON NEXT next_size MAXSIZE max_size]; ``` 用户提供的语句可能不符合这个结构,或者存在拼写错误。 用户提供的引用[3]中的语句是: ``` 'C:\YCISMUST\DATAFILE\YCISMUST_TS_D00.ora' size 1024M ``` 这里可能的问题有几个方面: 1. **文件路径格式问题**:在Oracle中,文件路径应该使用正确的格式,尤其是在Windows系统中,路径分隔符应为反斜杠,但可能需要转义或者使用单引号。另外,文件扩展名通常为.dbf,而用户使用的是.ora,这可能不是Oracle数据文件的常规扩展名,虽然Oracle可能允许,但更常见的是.dbf。 2. **语法结构错误**:用户可能在创建表空间时缺少必要的关键字,例如DATAFILE。正确的语句应该以DATAFILE开头指定文件路径和大小,而不是直接写路径。例如: ``` CREATE TABLESPACE TS_NAME DATAFILE 'C:\path\to\file.dbf' SIZE 1024M; ``` 如果用户漏掉了DATAFILE关键字,会导致语法错误,触发ORA-02180。 3. **无效的选项**:除了基本的DATAFILE和SIZE之外,可能用户误用了其他选项,比如在Oracle版本中不支持的参数,或者在语法中放置了不正确的子句。 接下来,我需要验证这些可能性。首先,检查用户的具体SQL语句是否正确。假设用户的语句是: ``` CREATE TABLESPACE YCISMUST_TS 'C:\YCISMUST\DATAFILE\YCISMUST_TS_D00.ora' SIZE 1024M; ``` 这里缺少了DATAFILE关键字,正确的应该是: ``` CREATE TABLESPACE YCISMUST_TS DATAFILE 'C:\YCISMUST\DATAFILE\YCISMUST_TS_D00.dbf' SIZE 1024M; ``` 这样修正后,可能解决语法问题。此外,文件路径中的目录是否存在,Oracle进程是否有权限写入该目录,也是需要考虑的因素。如果目录不存在或权限不足,可能会引发其他错误,但此处主要是语法问题导致ORA-02180。 另外,检查Oracle版本是否支持某些选项。例如,某些存储选项可能在旧版本中不可用,但一般来说,基本的DATAFILE和SIZE在大多数版本中是支持的。因此,版本问题可能性较低,但也不能完全排除。 用户提供的引用[2]中展示了添加临时表空间数据文件的正确语法: ``` alter tablespace TEMP add datafile 'E:\Oracle\app\yanbj\oradata\YANBINGJIE\temp12.dbf' size 10m; ``` 这里使用了正确的关键字和路径格式,可以作为参考。而用户创建表空间时的语句可能缺少了类似的关键字。 总结可能的原因: - 缺少DATAFILE关键字。 - 文件路径格式不正确,比如使用了错误的扩展名或路径分隔符。 - 存在拼写错误或大小写问题(尽管Oracle通常不区分大小写)。 解决方案步骤: 1. 检查CREATE TABLESPACE语句是否包含DATAFILE关键字。 2. 确保文件路径正确,使用.dbf扩展名,并确保目录存在且有权限。 3. 验证其他选项是否符合当前Oracle版本的语法要求。 如果用户确认语句结构正确,可能需要进一步检查是否有特殊字符或空格在路径中,是否使用了正确的引号(单引号),以及是否在语句末尾遗漏了分号等。 最后,建议用户使用Oracle官方文档中的CREATE TABLESPACE语法示例进行比对,确保所有必要部分都正确无误。</think>针对Oracle创建表空间时出现的ORA-02180错误,以下是逐步解决方案: ### 原因分析 1. **语法错误**:缺少`DATAFILE`关键字或路径格式错误[^3]。 2. **无效选项**:使用了当前Oracle版本不支持的参数。 3. **路径问题**:文件扩展名非`.dbf`、路径权限不足或目录不存在。 --- ### 解决方案 #### 步骤1:检查基础语法 确保`CREATE TABLESPACE`语句包含`DATAFILE`关键字并正确指定路径: ```sql -- 正确示例 CREATE TABLESPACE YCISMUST_TS DATAFILE 'C:\YCISMUST\DATAFILE\YCISMUST_TS_D00.dbf' SIZE 1024M AUTOEXTEND ON; ``` - **错误示例**(直接写路径无`DATAFILE`): ```sql CREATE TABLESPACE YCISMUST_TS 'C:\YCISMUST\DATAFILE\YCISMUST_TS_D00.ora' SIZE 1024M; -- 缺少DATAFILE ``` #### 步骤2:验证文件路径格式 - 使用标准扩展名`.dbf`而非`.ora`。 - 确保路径使用单引号包裹,且反斜杠正确转义(Windows中可写为`\\`或直接使用`/`): ```sql -- 转义路径示例 DATAFILE 'C:\\YCISMUST\\DATAFILE\\YCISMUST_TS_D00.dbf' ``` #### 步骤3:检查目录权限 确认Oracle进程有权限写入目标目录`C:\YCISMUST\DATAFILE\`。若目录不存在,需手动创建。 #### 步骤4:排除特殊字符 避免路径中包含空格或特殊符号(如`#`, `%`)。若必须使用,可用双引号包裹路径: ```sql DATAFILE '"C:\Program Files\Oracle\datafile.dbf"' ``` #### 步骤5:核对Oracle版本特性 某些选项(如`BLOCKSIZE`或加密参数)可能受版本限制。通过以下命令查看版本: ```sql SELECT * FROM v$version; ``` 参考[官方文档](https://docs.oracle.com)确认语法兼容性。 --- ### 验证操作 执行修正后的语句: ```sql CREATE TABLESPACE YCISMUST_TS DATAFILE 'C:\YCISMUST\DATAFILE\YCISMUST_TS_D00.dbf' SIZE 1024M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED; ``` 若仍报错,检查`alert.log`日志定位具体问题。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值