首頁 資料庫 mysql教程 从Export DMP文件看导出字符集

从Export DMP文件看导出字符集

Jun 07, 2016 pm 03:10 PM
數位

Oracle从10g开始,正式推出了新一代数据逻辑备份还原工具Data Pump(数据泵),以期替代ldquo;历史悠久rdquo;的Exp/Imp工具。经

Oracle从10g开始,正式推出了新一代数据逻辑备份还原工具Data Pump(数据泵),以期替代“历史悠久”的Exp/Imp工具。经过近10年的发展,依然有不少用户,特别是开发人员,对这对工具有比较强的依赖性。很多开发环境中数据传输依然是使用Exp/Imp进行。

在使用Exp/Imp工具过程中,字符集、版本兼容一致是比较困扰用户的两个重点难点。字符集决定我们导出数据能否正确的导入到目标系统,是否从根本出现乱码故障。版本兼容问题涉及到原系统、目标系统数据库版本、导入客户端和导出客户端版本四个版本问题。Oracle官方MOS上曾经对这个问题用系列的矩阵来描述之前关系和兼容性,但是能记住的朋友实际寥寥。

笔者本篇主要介绍通过Export导出的Dmp文件检查字符集的方法,同时也看出一些字符集使用过程中常见的问题。

1、环境介绍

Endian是操作系统底层技术的一个重要方面。数据传输、设备通信都伴随着源与目标系统之间字符协议的认知。Endian问题所涉及的基础问题是:当通信发生的时候,信息单元(比特、字节、字和双字)以什么样的顺序进行传输。如果双方不统一或者不兼容,根本不可能实现数据的交换解码。

在Oracle领域中,比较常见Endian讨论是在可传输表空间技术上。可传输表空间是目前普遍认为比较快速的数据移植策略,基本上近似于文件直接传输。但是,可传输表空间不能实现跨Endian操作系统的传输操作。

我们在实际中,两种常见的Endian结构,即Big-Endian和Little-Endian。Big-Endian通常为Sparc, PowerPc, PARisc, RS/6000, SGI R4000 systems,经常接触的Unix系统一般为Big-Endian操作系统。Little-Endian系统读写顺序与Big-Endian相反,代表系统为Intel/AMD x86 and Alpha。

不同Endian环境下形成的DMP文件结构是有所不同的。Oracle在操作的时候,兼容两种Endian传输模式。这也就是我们为什么可以方便的在Unix和Linux之间交换传输数据的原因。

通过对DMP文件的直接读取,我们是可以分析看出DMP文件导出过程中使用的字符集配置的。下面通过一系列实验来进行测试:

2、Big-Endian下DMP分析实验

首先我们测试Big-Endian结构。我们选择Unix系统数据库环境。

[oracle@MISDB:~]$uname -a

AIX MISDB 1 6 00F7FCC94C00

我们首先不做任何环境变量设置,观察Export工作行为。

[oracle@MISDB:~]$exp \"/ as sysdba\" owner=scott file=scott_test.dmp

Export: Release 11.2.0.3.0 - Production on Wed Jul 1 18:25:15 2015

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

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

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export done in US7ASCII character set and UTF8 NCHAR character set

server uses AL32UTF8 character set (possible charset conversion)

About to export specified users ...

. exporting pre-schema procedural objects and actions

. exporting foreign function library names for user SCOTT 

. exporting PUBLIC type synonyms

. exporting private type synonyms

. exporting object type definitions for user SCOTT 

About to export SCOTT's objects ...

. exporting database links

. exporting sequence numbers

. exporting cluster definitions

. about to export SCOTT's tables via Conventional Path ...

. . exporting table                          BONUS          0 rows exported

EXP-00091: Exporting questionable statistics.

. . exporting table                          DEPT          4 rows exported

EXP-00091: Exporting questionable statistics.

EXP-00091: Exporting questionable statistics.

(篇幅原因,有省略……)

. exporting statistics

Export terminated successfully with warnings.

注意标红的两个部分:其一是EXP-00091错误提示信息,之前笔者文章中已经对这个错误有过说明,主要是没有设置NLS_LANG环境变量。另一个是标记的US7ASCII字符集参数。

Oracle Export工具的特点是这样,,如果在执行前没有设置NLS_LANG环境变量,就直接取Oracle早期默认字符集US7ASCII作为导出的对象。从数据库中原有的字符集(例如AL32UTF8)都要转化为US7ASCII进行保存。

这样是潜藏着一些问题的:如果没有设置NLS_LANG环境变量,数据导出被整理为US7ASCII格式。一旦数据库中保存的是WE8DEC类型的数据,也会被强制转化为US7ASCII,所有没有对应US7ASCII的字符就会自动被破坏成乱码。

下面,我们从dmp文件中检查字符集。

[oracle@MISDB:~]$ls -l | grep dmp

-rw-r--r--    1 oracle  oinstall      20480 Jul 01 18:25 scott_test.dmp

[oracle@MISDB:~]$cat scott_test.dmp | od -x | head

0000000  0300 0145 5850 4f52 543a 5631 312e 3032

0000020  2e30 300a 4453 5953 0a52 5553 4552 530a

0000040  3430 3936 0a30 0a37 320a 300a 0001 0369

0000060  0367 0001 0000 0000 0000 0000 000e 0020

0000100  2020 2020 2020 2020 2020 2020 2020 2020

*

0000140  2020 2020 2020 2020 2057 6564 204a 756c

0000160  2031 2031 383a 3235 3a31 3520 3230 3135

0000200  7363 6f74 745f 7465 7374 2e64 6d70 0000

0000220  0000 0000 0000 0000 0000 0000 0000 0000

字符集信息通常在DMP文件头的第二和第三个字节信息进行表示。注意:这个顺序是在Big-Endian操作系统情况下。通常头位信息为:03xx(xx为任意位值)。

0x0001是可以在Oracle中找到对应的取值的。

SQL> select nls_charset_id(value) nls_charset_id,  value

  2          from  v$nls_valid_values

  3          where parameter = 'CHARACTERSET'

  4          order by nls_charset_id(value);

NLS_CHARSET_ID VALUE

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

            1 US7ASCII

            2 WE8DEC

(篇幅原因,有省略……)

          1865 ZHT16BIG5FIXED

          2000 AL16UTF16

247 rows selected

US7ASCII对应的为0x0001,说明导出的文件字符集为US7ASCII。下面我们设置一下NLS_LANG环境变量进行测试。

[oracle@MISDB:~]$export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

[oracle@MISDB:~]$exp \"/ as sysdba\" owner=scott file=scott_test_Set.dmp

Export: Release 11.2.0.3.0 - Production on Wed Jul 1 18:29:43 2015

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

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

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export done in AL32UTF8 character set and UTF8 NCHAR character set

About to export specified users ...

(篇幅原因,有省略……)

Export terminated successfully without warnings.

查看文件头信息。

[oracle@MISDB:~]$cat scott_test_Set.dmp | od -x | head

0000000  0303 6945 5850 4f52 543a 5631 312e 3032

0000020  2e30 300a 4453 5953 0a52 5553 4552 530a

0000040  3430 3936 0a30 0a37 320a 300a 0369 0369

0000060  0367 0001 0000 0000 0000 0000 0012 0020

0000100  2020 2020 2020 2020 2020 2020 2020 2020

*

0000140  2020 2020 2020 2020 2057 6564 204a 756c

0000160  2031 2031 383a 3239 3a34 3320 3230 3135

0000200  7363 6f74 745f 7465 7374 5f53 6574 2e64

0000220  6d70 0000 0000 0000 0000 0000 0000 0000

对应位数:0x0369对应AL32UTF8。下面为一些常见字符集的16进制编码。

The values for the most commonly used character sets are below:

Name            ID

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

US7ASCII  0x0001

WE8DEC          0x0002

WE8ISO8859P1    0x001f

EE8ISO8859P2      0x0020

SE8ISO8859P3      0x0021

NE8ISO8850P4      0x0022

CL8ISO8859P5      0x0023

AR8ISO8859P6      0x0024

EL8ISO8859P7      0x0025

IW8ISO8859P8    0x0026

WE8ISO8859P9    0x0027

WE8ISO8859P15  0x002e

TH8TISASCII    0x0029

US8PC437 0x0004

WE8ROMAN8 0x0005

WE8PC850      0x000a

EE8PC852  0x0096

RU8PC855        0X009B         

TR8PC857        0x009C         

WE8PC858        0x001c

WE8PC860        0x00A0

IS8PC861        0x00A1         

N8PC865        0x00BE         

RU8PC866        0x0098

EE8MSWIN1250    0x00aa

CL8MSWIN1251    0x00ab

WE8MSWIN1252    0x00b2

EL8MSWIN1253    0x00ae

TR8MSWIN1254    0x00b1

IW8MSWIN1255    0x00af         

AR8MSWIN1256    0x0230

BLT8MSWIN1257  0x00b3

ZHT16MSWIN950  0x0363

ZHS16GBK 0x0354

ZHT16HKSCS 0x0364

JA16EUC          0x033e

JA16SJIS    0x0340

ZHT16BIG5      0x0361

AL24UTFFSS      0x0366

UTF8            0x0367

AL32UTF8        0x0369

说明:在使用NLS_LANG显示指定字符集合之后,DMP文件中就按照这个编码方式进行组织文件。

下面我们看一下在Little-Endian下的情况是如何的。

更多详情见请继续阅读下一页的精彩内容

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1324
25
PHP教程
1272
29
C# 教程
1251
24
全球數字虛擬幣交易平台排行榜前十(2025權威排名) 全球數字虛擬幣交易平台排行榜前十(2025權威排名) Mar 06, 2025 pm 04:36 PM

2025年全球數字虛擬幣交易平台競爭激烈,本文根據交易量、安全性、用戶體驗等指標,權威發布2025年全球十大數字虛擬幣交易平台排行榜。 OKX憑藉強大的技術實力和全球化運營策略居首,Binance以高流動性和低費用緊隨其後。 Gate.io、Coinbase、Kraken等平台憑藉各自優勢穩居前列。榜單涵蓋Huobi、KuCoin、Bitfinex、Crypto.com和Gemini等交易平台,各有特色,但投資需謹慎。選擇平台需考慮安全性、流動性、費用、用戶體驗、幣種選擇及監管合規性等因素,理性投資

C程式用來求出一個數的最大質因子 C程式用來求出一個數的最大質因子 Aug 27, 2023 am 10:09 AM

質因數 - 在數論中,正整數的質因數是精確整除該整數的質因數。找出這些數字的過程稱為整數分解或質因數分解。例 - 288 的質因數是:288=2x2x2x2x2

幣圈十大交易所2025年最新 數字貨幣app排行榜前十 幣圈十大交易所2025年最新 數字貨幣app排行榜前十 Feb 27, 2025 pm 06:33 PM

虛擬貨幣十大交易平台排行榜(2025年最新): 幣安:全球龍頭,高流動性,監管受關注。 OKX:龐大用戶基數,支持多種幣種,提供槓桿交易。 Gate.io:資深交易所,多種法幣支付方式,提供多種交易對和投資產品。 Bitget:衍生品交易所,高流動性,低費用。 火幣:老牌交易所,支持多種幣種和交易對。 Coinbase:美國知名交易所,受監管嚴格。 Phemex等等。

十大數字貨幣交易平台 數字貨幣交易平台top10榜單最新 十大數字貨幣交易平台 數字貨幣交易平台top10榜單最新 Mar 17, 2025 pm 05:57 PM

十大數字貨幣交易平台:1. OKX,2. Binance,3. Gate.io,4. Huobi Global,5. Kraken,6. Coinbase,7. KuCoin,8. Bitfinex,9. Crypto.com,10. Gemini,這些交易所各具特色,用戶可根據安全性、費用、幣種選擇、用戶界面和客戶支持等因素選擇適合自己的平台。

數字貨幣app十大交易平台 炒幣正規平台app推薦 數字貨幣app十大交易平台 炒幣正規平台app推薦 Mar 07, 2025 pm 06:51 PM

本文推薦十個數字貨幣交易App:1. OKX;2. Binance;3. Gate.io;4. Huobi Global;5. Kraken;6. Coinbase;7. KuCoin;8. Crypto.com;9. Bitfinex;10. Poloniex。選擇平台需考慮安全性、流動性、交易費用、幣種選擇、用戶界面、客服支持及法規合規性等因素,謹慎評估風險,切勿盲目跟風。

全球十大虛擬幣交易平台app正版下載安裝教程 全球十大虛擬幣交易平台app正版下載安裝教程 Mar 12, 2025 pm 05:33 PM

本文提供Binance、OKX、Gate.io、Huobi Global(火幣)、Coinbase、KuCoin(庫幣)、Kraken和Bitfinex等主流數字貨幣交易平台的安卓和蘋果手機APP下載方法。無論是安卓用戶還是蘋果用戶,都能輕鬆找到對應平台的官方APP下載鏈接,並按照步驟完成安裝。 文章詳細指導了在各自官網或應用商店搜索下載,並針對安卓系統安裝APK文件的特殊步驟做了說明,方便用戶快速便捷地下載使用。

靠譜的數字貨幣平台有哪些 十大正規數字貨幣交易平台2025 靠譜的數字貨幣平台有哪些 十大正規數字貨幣交易平台2025 Mar 17, 2025 pm 05:45 PM

靠譜的數字貨幣平台包括:1. OKX,2. Binance,3. Gate.io,4. Huobi Global,5. Kraken,6. Coinbase,7. KuCoin,8. Bitfinex,9. Crypto.com,10. Gemini,這些交易所各具特色,用戶可根據安全性、費用、幣種選擇、用戶界面和客戶支持等因素選擇適合自己的平台。

十大數字虛擬幣交易所推薦 正規的數字貨幣交易app排行榜 十大數字虛擬幣交易所推薦 正規的數字貨幣交易app排行榜 Mar 17, 2025 pm 05:33 PM

十大數字虛擬幣交易所包括:1. OKX,2. Binance,3. Gate.io,4. Huobi Global,5. Kraken,6. Coinbase,7. KuCoin,8. Bitfinex,9. Crypto.com,10. Gemini,這些交易所各具特色,用戶可根據安全性、費用、幣種選擇、用戶界面和客戶支持等因素選擇適合自己的平台。

See all articles