我们被另一个团队递交了一个转储文件,这些团队在今年剩下的时间里都离开了。当我们尝试将转储导入我们自己的数据库时,我们收到以下错误:
IMP-00038: Could not convert to environment character set's handle
经过一些研究,我们的猜测是我们在源机器的NLS_LANG设置和本地机器之间存在不匹配。我们目前无法检查NLS_LANG在源计算机上的值。
那么,只有一个转储文件在我们手中,有没有办法找出导出完成的NLS_LANG值?从它的外观来看,我们应该能够在运行导入客户端(imp)之前覆盖NLS_LANG环境变量。
另一件事是,转储是从11g实例完成的,我们的imp版本是10.我读到imp不是向前兼容的。这可能是问题(而不是NLS_LANG不匹配)吗?
答案 0 :(得分:11)
Ates,尝试impdp - 有时可能会有所帮助: - )
答案 1 :(得分:6)
unix最简单的方法是:
#>imp username/password file=test.dmp show=y
Import: Release 10.2.0.3.0 - Production on Fri Nov 26 08:38:47 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Export file created by EXPORT:V10.02.01 via conventional path
import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses WE8ISO8859P1 character set (possible charset conversion)
版本exp / imp是个问题: 我通常使用V10导出程序并使其连接到V11数据库。 确保你在dev10的oracle_home中的tnsnames.ora中有dev11的别名。
hostname{oracle}# . oraenv
ORACLE_SID = [oracle] ? dev10
hostname{oracle}#
hostname{oracle}#>exp username/password@dev11 full=y dumpfile=dump.exp
答案 2 :(得分:3)
即使文件是二进制文件,也有一些人类可读的文本摘录。我在那里看到了以下字符串,我认为这回答了我的问题:
<CHARSET>AL32UTF8</CHARSET><NCHARSET>AL16UTF16</NCHARSET> ... NLS_LANGUAGE='AMERICAN' NLS_TERRITORY='AMERICA'
答案 3 :(得分:1)
另一件事是,转储完成了 从11g实例和我们的imp 版本是10.我读到imp不是 向前兼容。这可能是 问题在这里(而不是NLS_LANG 不匹配)?
A:你是对的;您无法导入使用给定Oracle客户端创建的转储文件,因为目标Oracle数据库的Oracle客户端较旧。
虽然不推荐,但您可以使用较旧的 Oracle客户端(即10g)导出较新的源Oracle数据库(即10g +) ),因为您使用相同的Oracle客户端版本导入旧的目标oracle数据库(即10g)。
假设:源数据库的Oracle客户端版本与目标Oracle数据库版本相同或更新。请注意,混合工具 Datapump (11g)和 imp ( - 10g)导入实用程序不起作用。
Interessant链接 Using Different Releases and Versions of Export
答案 4 :(得分:1)
也许它是使用expdp
导出的....尝试impdp
....这就是我在搜索谷歌时看到的内容,而且真正适合我同样的问题。