oracle dmp字符集处理和数据库字符集修改

合集下载

oracle导入出现字符集问题解决办法

oracle导入出现字符集问题解决办法

oracle导入出现字符集问题解决办法场景:把一台linux上的oracle库的数据捣腾到一台 windows2003上的oracle库中,在捣腾的过程中乱码了!有经验的知道多半是要改windows的注册表。

注册表打开发方式:Win98/98SE/Me运行中输入regedit.exe 无权限限制Win2000/XP1.开始>>运行.中输入regedt322.开始>>运行.中输入regedit第一种方法打开的注册表编辑器和Win98下的一样,而且功能相同,而使用第二种方法打开的注册表编辑器则可以方便的设置权限,建议网络管理员使用第2种方法打开注册表编辑器修改需要修改的权限设置部分以免被他人恶意修改。

Windows Vista/71.在开始菜单搜索框中输入regedit并按回车键.(需要管理员权限)2.在运行中输入regedit.exe(需要管理员权限)1. NLS_LANG 参数组成NLS_LANG参数由以下部分组成:NLS_LANG=<language>_<territory>.<client character set>Language:指定Oracle消息使用的语言,校验,日期中月份和日显示。

Territory:指定默认日期、数字、货币等格式,地区和计算星期及日期的习惯。

Client character set:控制客户端应用程序使用的字符集例如:NLS_LANG=AMERICAN_7ASCIIAMERICAN是语言,AMERICA是地区,US7ASCII是客户端字符集通常设置或者等于客户端(如Windows)代码页或者对于unicode应用设置为UTF8在Windows上查看当前系统的代码页可以使用chcp命令:E:\>chcp活动的代码页: 936代码页936也就是中文字符集 GBK,在Microsoft的官方站点上,我们可以遭到关于936代码页的具体编码规则,请参考以下链接:/globaldev/reference/dbcs/936.htm2. 查看 NLS_LANG 的方法Windows使用:注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG查看Unix使用:env|grep NLS_LANG如:/opt/oracle>env|grep NLS_LANGNLS_LANG=AMERICAN_CHINA.ZHS16GBKWindows客户端设置,可以在注册表中更改NLS_LANG,具体键值位于:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\xx指存在多个ORACLE_HOME时系统编号。

Oracle 导入导出字符集乱码问题

Oracle 导入导出字符集乱码问题

Oracle 导入导出字符集乱码问题导出/导入与字符集进行数据的导入导出时,我们要注意关于字符集的问题。

在EXP/IMP过程中我们需要注意四个字符集的参数:导出端的客户端字符集,导出端数据库字符集,导入端的客户端字符集,导入端数据库字符集。

我们首先需要查看这四个字符集参数。

查看数据库的字符集的信息:SQL> select * from nls_database_parameters;PARAMETER VALUE--------------------------------------------------------------------------------------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_CURRENCY $NLS_ISO_CURRENCY AMERICANLS_NUMERIC_CHARACTERS .,NLS_CHARACTERSET ZHS16GBKNLS_CALENDAR GREGORIANNLS_DATE_FORMAT DD-MON-RRNLS_DATE_LANGUAGE AMERICANNLS_SORT BINARYNLS_TIME_FORMAT HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AMNLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZH:TZMNLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZH:TZMNLS_DUAL_CURRENCY $NLS_COMP BINARYNLS_NCHAR_CHARACTERSET ZHS16GBKNLS_RDBMS_VERSION 8.1.7.4.1NLS_CHARACTERSET:ZHS16GBK是当前数据库的字符集。

Oracle-字符集转换

Oracle-字符集转换

Oracle-字符集转换字符集是按照⼀定的字符编码⽅案,对⼀组特定的符号,分别赋予不同数值编码的集合。

⽇常使⽤时,服务端与客户端字符集需⼀致。

--服务端select*from nls_database_parameters;--客户端SELECT USERENV('LANGUAGE') FROM DUAL;数据库字符集调整最常⽤的是ALTER命令和完全的导出和导⼊两种。

第⼀种,ALTER DATABASE字符集语句是迁移字符集的最快⽅法,但只能在特殊情况下使⽤。

ALTER DATABASE字符集语句不执⾏任何数据转换,因此,当且仅当新字符集是当前字符集的严格超集时,才可以使⽤它。

--ALTER DATABASE字符集语句的语法如下,db_name为可选项:ALTER DATABASE[db_name]CHARACTER SET new_character_set;第⼆种,数据泵(EXPDP/IMPDP)⽅式代价较⾼,耗时且占⽤资源多,并且需要在迁移时对数据进⾏扫描,确认在迁移时是否会发⽣数据截断和字符集转换错误。

数据库字符集迁移有两个阶段:数据扫描和数据转换。

在更改数据库字符集之前,使⽤字符集扫描⼯具确定在更改数据库字符集之前所需的⼯作量。

使⽤数据泵导⼊导出脚本⽰例,脚本需在数据库服务器执⾏:--查看管理员⽬录确认导出⽂件位置路径SELECT*FROM dba_directories;--expdp导出带有条件expdp ⽤户/密码@服务名 directory=DATA_PUMP_DIR dumpfile=数据⽂件⽂件名.dmp logfile=⽇志⽂件⽂件名.log tables=导出表名 query='" where lsh in (select lsh from table_1 where code !='1' and flag='1')"' CONTENT选项可选导出结构或数据导出格式默认为.dmp--impdp导⼊导⼊时重命名存在表则增加数据主键重复数据忽略导⼊时也可以限定导⼊时所属表空间impdp ⽤户/密码@服务名 directory=DATA_PUMP_DIR dumpfile=数据⽂件⽂件名.dmp REMAP_TABLE =导出⽤户名.导出表名:导⼊表名 TABLE_EXISTS_ACTION=append data_options=skip_constraint_errors 字符集扫描⼯具 Character Set Scanner 适⽤于 Oracle Database 10g 和 Oracle Database 11g 的字符集扫描程序作为数据库软件的⼀个组件提供。

修改数据库字符集方法

修改数据库字符集方法

修改数据库字符集方法修改数据库字符集通常涉及对数据库的底层编码进行更改。

不同的数据库管理系统(DBMS)有不同的方法来修改字符集。

以下是一些常见数据库的修改字符集的方法:1. MySQL:使用 `ALTER DATABASE` 语句:```sql`ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;````使用 `ALTER TABLE` 语句:```sql`ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;````2. PostgreSQL:修改整个数据库的字符集:```sql`ALTER DATABASE your_database_name WITHLC_COLLATE='en_' AND LC_CTYPE='en_';````修改特定表的字符集:```sql`ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;````3. SQL Server:SQL Server 不直接支持更改字符集,但可以通过使用 `COLLATE` 子句来更改排序规则。

4. Oracle:Oracle 也不直接支持更改字符集,但可以重新创建数据库或使用`ALTER DATABASE` 语句来更改 NLS 参数。

5. SQLite:SQLite 不支持更改字符集,因为它是嵌入式的。

在创建数据库时,应选择正确的字符集。

6. 注意: 在更改字符集之前,请确保备份您的数据库,因为更改字符集可能会导致数据损坏或丢失。

此外,在生产环境中执行此类操作之前,最好在测试环境中进行测试。

达梦数据库要求的字符集

达梦数据库要求的字符集

达梦数据库要求的字符集摘要:1.达梦数据库介绍2.字符集的概念和重要性3.达梦数据库要求的字符集4.字符集设置的方法和注意事项5.总结正文:达梦数据库是一款国产高性能、安全可靠的分布式数据库管理系统。

在我国众多企业和政府部门中得到了广泛的应用。

在使用达梦数据库的过程中,字符集的设置是非常关键的。

本文将详细介绍达梦数据库要求的字符集及相关设置方法。

字符集(Character Set)是一个用于表示文本的字符编码集合。

在数据库中,字符集用于定义数据库中可以存储和处理的字符范围。

正确设置字符集对于保证数据的正确存储、检索和显示具有重要意义。

达梦数据库要求的字符集主要取决于数据库创建时所使用的字符集。

达梦数据库支持多种字符集,如GBK、UTF-8、LATIN1 等。

在创建数据库时,用户需要根据实际需求选择合适字符集。

一般情况下,选择UTF-8 字符集可以满足多种语言文本的存储需求。

设置字符集的方法如下:1.在创建数据库时,选择合适的字符集。

在达梦数据库的创建语句中,可以使用“CHARSET”关键字指定字符集,例如:“CREATE DATABASEdb_name CHARSET UTF-8;”2.如果已经创建好的数据库需要更改字符集,可以通过修改数据库属性来实现。

可以使用“ALTER DATABASE”语句,将数据库字符集更改为需要的字符集。

例如:“ALTER DATABASE db_name CHARSET UTF-8;”在设置字符集时,需要注意以下几点:1.字符集的更改可能会影响已经存在的数据,因此建议在更改前备份数据。

2.字符集的设置与客户端和服务器的字符集设置要保持一致,否则可能会导致乱码等问题。

3.在使用过程中,要确保所有涉及到的字符集设置都正确无误,以免造成不必要的麻烦。

总之,正确设置达梦数据库的字符集是非常重要的。

选择合适的字符集可以确保数据的正确存储和处理,提高系统的稳定性和兼容性。

数据库表编码格式修改

数据库表编码格式修改

修改数据库表的编码格式通常是为了适应特定的字符集需求,例如从旧的编码格式升级到新的编码格式,或者更改为支持多语言的编码。

以下是一般的步骤,具体操作可能因数据库类型和版本而有所不同:MySQL 数据库:1. 备份数据:在修改数据库表编码格式之前,请务必备份数据库以防止数据丢失。

2. 确定目标编码格式:确定你想要将表更改为的目标编码格式,例如UTF-8。

3. 修改表编码格式:使用`ALTER TABLE`语句来更改表的编码格式。

例如,将表`your_table`的编码格式更改为UTF-8:ALTER TABLE your_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;请根据实际情况调整目标编码格式。

4. 重建索引:在表更改后,可能需要重建索引以确保它们正确地与新编码格式一起工作。

PostgreSQL 数据库:1. 备份数据:在修改数据库表编码格式之前,请备份数据库以防止数据丢失。

2. 确定目标编码格式:确定你想要将表更改为的目标编码格式,例如UTF-8。

3. 使用`pg_dump`导出数据:使用`pg_dump`工具导出数据,指定目标编码格式。

例如:pg_dump -h your_host -U your_user -W -F c -b -v -f your_backup.dump -E utf8 your_database4. 创建新表并导入数据:使用`CREATE TABLE`创建一个新表,使用指定的编码格式,并使用`COPY`命令将数据导入新表。

CREATE TABLE new_table (LIKE your_table INCLUDING ALL);ALTER TABLE new_table SET TABLESPACE your_tablespace;COPY new_table FROM '/path/to/your_backup.dump' WITH (FORMAT 'c');5. 重命名表:使用`ALTER TABLE`语句将新表重命名为原始表的名称。

64位oracle数据库安装和初始化字符集设置

64位oracle数据库安装和初始化字符集设置

64位oracle数据库安装和初始化字符集设置以下以安装oracle11g 为例,安装环境为win764位机器,为了减少因浏览器不兼容带来的问题,推荐使用IT。

首先分为四大步骤,一、安装oracle数据库二、安装oracle数据库客户端三、安装sql/plus开发工具四、初始化字符集设置(调试字符集乱码问题)咱们看一下详细情况:一、安装oracle数据库,从网上下载一下oracle数据库,按要求安装。

二、安装oracle数据库客户端1、下载instantclient-basic-win32-11.2.0.1.0.zip (一定得是32位的,不要下错了版本,Oracle官网有下载),将其解压至Oracle安装目录的Product下(本机命名为:instantclient_11_2):C:\oracle11g\product拷贝数据库安装根目录下的一个文件夹:C:\oracle11g\product\11.2.0\dbhome_1\NETWORK到Oracle客户端目录下C:\oracle11g\product\instantclient_11_2(其实只需要NETWORK\ADMIN\tnsnames.ora)2、设置环境变量(修改PATH和TNS_ADMIN环境变量):右击"我的电脑" - "属性" - "高级" - "环境变量" - "系统环境变量":1).选择"Path" - 点击"编辑", 把" C:\oracle11g\product \instantclient_11_2;" 加入;2).点击"新建", 变量名设置为"TNS_ADMIN", 变量值设置为" C:\oracle11g\product \instantclient_11_2;", 点击"确定";3>.点击"新建", 变量名设置为"NLS_LANG", 变量值设置为"SIMPLIFIED CHINESE_CHINA.ZHS16GBK", 点击"确定";三、安装sql/plus开发工具从网上下载PLSQL714开发工具,安装时目录选择在如图(路径不正确可能会安装不成功。

Oracle expimp导出导入工具的使用

Oracle expimp导出导入工具的使用

Oracle exp/imp导出导入工具的使用一. 导出工具 exp1. 它是操作系统下一个可执行的文件存放目录/ORACLE_HOME/binexp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移它有三种模式:a. 用户模式:导出用户所有对象以及对象中的数据;b. 表模式:导出用户所有表或者指定的表;c. 整个数据库:导出数据库中所有对象。

2. 导出工具exp交互式命令行方式的使用的例子$exp test/test123@appdbEnter array fetch buffer size: 4096 > 回车Export file: expdat.dmp > m.dmp 生成导出的文件名(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 3Export table data (yes/no): yes > 回车Compress extents (yes/no): yes > 回车Export done in ZHS16GBK character set and ZHS16GBK NCHAR character set About to export specified tables via Conventional Path ...Table(T) or Partition(T:P) to be exported: (RETURN to quit) > cmamenu 要导出的表名. . exporting table CMAMENU 4336 rows exportedTable(T) or Partition(T:P) to be exported: (RETURN to quit) >要导出的表名nTable(T) or Partition(T:P) to be exported: (RETURN to quit) > 回车Export terminated successfully without warnings.3. 导出工具exp非交互式命令行方式的例子$exp scott/tiger tables=(emp,dept) file=/directory/scott.dmp grants=y说明:把scott用户里两个表emp,dept导出到文件/directory/scott.dmp$exp scott/tiger tables=emp query=\"where job=\'salesman\' and sal\<1600\"file=/directory/scott2.dmp说明:在exp里面加上导出emp的查询条件job='salesman' and sal<1600(但我个人很少这样用,还是把满足条件的记录生成临时表后,再exp会方便一些)$exp parfile=username.parfile=/directory1/username_1.dmp,/directory1/username_2.dmp filesize=2000Mlog=/directory2/username_exp.log参数文件username.par内容userid=username/userpasswordbuffer=8192000compress=ngrants=y说明:username.par为导出工具exp用的参数文件,里面具体参数可以根据需要去修改filesize指定生成的二进制备份文件的最大字节数(可用来解决某些OS下2G物理文件的限制及加快压缩速度和方便刻历史数据光盘等)二.导入工具 imp1. 它是操作系统下一个可执行的文件存放目录/ORACLE_HOME/binimp导入工具将EXP形成的二进制系统文件导入到数据库中.它有三种模式:a. 用户模式:导出用户所有对象以及对象中的数据;b. 表模式:导出用户所有表或者指定的表;c. 整个数据库:导出数据库中所有对象。

查oracle字符集编码

查oracle字符集编码

查oracle字符集编码Oracle是一种流行的关系型数据库管理系统,它支持多种字符集编码。

在处理多语言数据时,正确的字符集编码非常重要。

本文将介绍如何查看Oracle字符集编码。

1. 查看数据库字符集编码要查看Oracle数据库的字符集编码,可以使用以下SQL语句:SELECT * FROM nls_database_parameters WHEREparameter='NLS_CHARACTERSET';这将返回一个结果集,其中包含数据库的字符集编码。

2. 查看表的字符集编码要查看特定表的字符集编码,可以使用以下SQL语句:SELECT * FROM all_tab_columns WHEREtable_name='table_name' AND column_name='column_name';将“table_name”和“column_name”替换为要查询的表和列名称。

这将返回一个结果集,其中包含表的字符集编码。

3. 查看会话字符集编码要查看当前会话的字符集编码,可以使用以下SQL语句:SELECT * FROM nls_session_parameters WHEREparameter='NLS_CHARACTERSET';这将返回一个结果集,其中包含当前会话的字符集编码。

4. 修改字符集编码如果需要修改Oracle数据库的字符集编码,需要执行以下步骤:a. 停止数据库实例。

b. 备份数据库。

c. 修改数据库参数文件(init.ora或spfile)中的NLS_CHARACTERSET参数。

d. 启动数据库实例。

e. 使用ALTER DATABASE CHARACTER SET语句修改数据库中现有表和列的字符集编码。

f. 重新创建索引和约束。

g. 修改应用程序以使用新的字符集编码。

总结在处理多语言数据时,正确的字符集编码非常重要。

修改oracle字符集注意事项

修改oracle字符集注意事项

修改oracle字符集注意事项
修改Oracle字符集是一个非常重要的操作,需要特别小心和谨慎。

在进行字符集修改时,需要注意以下几个方面:
1. 数据备份,在修改字符集之前,务必对数据库进行完整备份。

这是非常重要的,因为字符集修改可能会导致数据损坏或丢失,而
备份可以在出现问题时进行恢复。

2. 数据库状态,在修改字符集之前,需要确保数据库处于正常
的状态,并且没有正在进行的重要操作。

最好在非高峰期进行字符
集修改,以避免影响数据库的正常运行。

3. 系统权限,进行字符集修改需要具有足够的权限,通常需要
使用sysdba权限或者具有ALTER DATABASE权限的用户来执行字符
集修改操作。

4. 系统空间,在进行字符集修改之前,需要确保数据库所在的
表空间有足够的空间来存储修改后的字符集数据。

字符集修改可能
会导致数据存储空间的变化,需要提前做好空间规划。

5. 数据转换,在进行字符集修改时,需要对现有数据进行转换,以确保数据能够正确地映射到新的字符集中。

这可能涉及到对表中
数据的逐个修改,因此需要谨慎对待,避免数据丢失或损坏。

6. 系统测试,在字符集修改完成后,需要对系统进行全面的测试,确保系统的各项功能和性能都没有受到影响。

特别需要测试与
字符集相关的功能,如排序、比较和检索等。

总的来说,修改Oracle字符集是一个复杂而且危险的操作,需
要在充分的准备和谨慎的态度下进行。

务必在专业人士的指导下进
行字符集修改,并且做好充分的备份和风险评估。

希望这些注意事
项能够帮助你更好地进行Oracle字符集的修改。

oracle dmp 修改编码

oracle dmp 修改编码

oracle dmp 修改编码
Oracle的dmp文件(通常指的是通过exp或expdp工具导出的数据文件)的编码通常与数据库字符集相匹配。

如果你想修改这些文件的编码,那么通常需要遵循一定的步骤,因为直接更改文件的编码可能会导致数据损坏。

以下是更改Oracle dmp文件编码的一般步骤:
1.了解原始编码:首先,你需要知道dmp文件的原始编
码。

这通常与导出它的数据库的字符集相匹配。

2.创建新的数据库:使用你想要的字符集创建一个新的
Oracle数据库。

确保这个字符集可以支持你希望转换
到的目标编码。

3.导入dmp文件:使用imp或impdp工具将dmp文件
导入到新创建的数据库中。

bash复制代码:
impdp username/password DIRECTORY=dir_name DUMPFILE=your_file.dmp LOGFILE=import.log 4.导出为新的dmp文件:从新数据库中,再次使用exp
或expdp工具将数据导出为新的dmp文件。

5.验证数据:在新dmp文件导入后,确保数据的完整性
和准确性。

6.使用新的dmp文件:现在你可以使用这个新的dmp
文件,它的编码应该与你的新数据库字符集相匹配。

请注意,这只是一个高级概述,具体的步骤和命令可能会因你的环境和Oracle版本而异。

在进行任何此类操作之前,强烈建议备份所有数据和文件,并在非生产环境中首先进行测试。

修改oracle字符集(修改为:ZHS16GBK)

修改oracle字符集(修改为:ZHS16GBK)
Database closed.
Database dismounted.
ORACLE instance shut down.
11.启动数据库到mount状态
SQL&gt; startup mount
ORACLE instance started.
Total System Global Area 205520896 bytes
PARAMETER VALUE
---------------------------------------- ----------------------------------------
NLS_CHARACTERSET WE8ISO8859P1
Total System Global Area 205520896 bytes
Fixed Size 1266608 bytes
Variable Size 100666448 bytes
Database Buffers 100663296 bytes
一、在Redhat上安装Oracle 11g没有设定字符集,采用的是操作系统默认字符集,由于过程不可逆,首先需要备份数据库。
1.数据库全备
2.查询当前字符集
SQL&gt; select * from nls_database_parameters where parameter=&#39;NLS_CHARACTERSET&#39;;
Redo Buffers 2924544 bytes
Database mount&gt; alter system enable restricted session;

oracle19c修改编码

oracle19c修改编码

oracle19c修改编码在Oracle 数据库中,修改数据库编码(字符集)是一个复杂的过程,需要小心操作以确保数据的完整性。

以下是大致的步骤,但请注意在执行这些步骤之前,强烈建议在生产环境中进行充分的备份,并在非生产环境中测试这些步骤。

步骤1: 检查当前字符集在执行修改操作之前,首先检查当前数据库的字符集。

你可以使用以下查询来获取当前数据库字符集的信息:```sqlSELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';```步骤2: 导出数据在修改字符集之前,建议将数据库中的数据导出为SQL 文件,以便在需要时进行还原。

使用`exp` 或`expdp` 工具导出数据。

```bashexp userid=your_username/your_password@your_database file=export_data.dmp```或```bashexpdp userid=your_username/your_password@your_database dumpfile=export_data.dmp```步骤3: 停止数据库在修改字符集之前,需要停止数据库服务。

步骤4: 修改字符集1. **修改`init.ora` 文件:**找到Oracle 数据库的`init.ora` 配置文件,通常位于`$ORACLE_HOME/dbs` 目录下。

编辑该文件,将`NLS_CHARACTERSET` 参数的值修改为目标字符集。

例如:```plaintextNLS_CHARACTERSET = AL32UTF8```请确保你了解目标字符集的选择,以防止数据损坏。

2. **修改`ALTER DATABASE` 命令:**在SQL*Plus 或其他管理工具中执行以下命令:```sqlSTARTUP MOUNT;ALTER SYSTEM ENABLE RESTRICTED SESSION;ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;ALTER SYSTEM SET AQ_TM_PROCESSES=0;ALTER DATABASE OPEN;ALTER DATABASE CHARACTER SET AL32UTF8; --将AL32UTF8 替换为目标字符集```步骤5: 重新编译对象执行以下脚本重新编译数据库中的所有对象:```sql@?/rdbms/admin/utl32k.sql@?/rdbms/admin/utlrp.sql```步骤6: 重建索引由于字符集的改变可能导致索引无效,重新构建索引是一个必要的步骤。

oracle数据库expimp命令详解

oracle数据库expimp命令详解

注:在磁盘空间允许的情况下,应先备份到本地服务器,然后再拷贝到磁带。出于速度
方面的考虑,尽量不要直接备份到磁带设备。
用户模式
备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。
若备份到本地文件,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=6ize=0
file=/dev/rmt0
log=exp_icdmain_yyyymmdd.log
注:如果磁盘有空间,建议备份到磁盘,然后再拷贝到磁带。如果数据库数据量较小,
可采用这种办法备份。
完全模式
备份完整的数据库。业务数据库不采用这种备份方式。备份命令为:
2
5626.
3. 对于新磁带或无需保留现存数据的磁带,使用如下命令:
tar -cvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp
注:A. 该命令将无条件覆盖磁带上的现存数据。
B. 文件名不允许包含路径信息,如:/backup/exp_icdmain_yyyymmdd.dmp。
oracle数据库exp/imp命令详解2008-11-20 15:14exp/imp两个命令可以说是oracle中最常用的命令了.
ORACLE数据库有两类备份方法。第一类为物理备份,该方法实现数据库的完整恢复,但
数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部
tar -tvf /dev/rmt0
显示的结果如下例所示:
-rw-r--r-- 300 400 8089600 Jan 11 14:33:57 2001 exp_icdmain_20010111.dmp

oracle乱码问题

oracle乱码问题

ORACLE数据库中文显示乱码问题的解决一.问题描述系统中ORACLE数据库在安装后不能正确显示中文,而是显示为'???'等此类乱码。

二.问题分析经检查发现,是数据库的安装脚本存在问题,为此需要更改smsc0数据库的安装脚本中的CreateDB.sql文件:需要将如下内容:CHARACTER SET WE8ISO8859P1更改为:CHARACTER SET ZHS16GBK三.问题处理和解决对于已经安装的数据库,需要做如下改动:1 登录SQLPLUS(需在操作系统的ORACLE用户下)sqlplus /nologconnect / as sysdba2 查询目前的字符集SQL> select * from props$ where name='NLS_CHARACTERSET';显示如下:NAME V ALUE$ COMMENT$NLS_CHARACTERSET XXXXX Character set其中VALUE$的值应该不是ZHS16GBK或ZHS16CGB231280等标志中文的字符集.3 修改字符集SQL> update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';SQL>commit;4 关掉数据库SQL>shutdown immediate5 重启动数据库SQL>startup6 查询字符集的设置是否生效SQL> select * from props$ where name='NLS_CHARACTERSET';应该有如下结果:NAME V ALUE$ COMMENT$NLS_CHARACTERSET ZHS16GBK Character set四.问题小结和补充如果还没安装客户端,那么在安装客户端时,指定与服务器相吻合的字符集即可;如果已经安装好了客户端,并且客户端为sql*net 2.0 以下版本,进入Windows的系统目录,编辑oracle.ini文件,用US7ASCII替换原字符集,重新启动计算机,设置生效;否则,如果,客户端为sql*net 2.0 以上版本,在Win98 下运行REGEDIT,第一步选HKEY_LOCAL_MACHINE,第二步选择SOFTWARE,第三步选择Oracle,第四步选择NLS_LANG,键入与服务器端相同的字符集(本例为:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG :AMERICAN _ AMERICA. ZHS16GBK)。

oracle dmp 修改编码

oracle dmp 修改编码

oracle dmp 修改编码要修改Oracle DMP文件的编码,您可以使用以下方法之一:1. 使用Oracle Data Pump工具将DMP文件导入为一个新的数据库,然后在新数据库中修改编码设置。

这可以通过以下步骤完成:- 创建一个新的数据库实例。

- 使用Oracle Data Pump导入DMP文件到新的数据库中。

例如,使用impdp命令:`impdp <用户名>/<密码> directory=<目录名称> dumpfile=<DMP文件名> logfile=<日志文件名>`- 在新数据库中修改编码设置。

您可以使用ALTER DATABASE语句来修改数据库的字符集。

例如,`ALTER DATABASE CHARACTER SET <新编码名称>;`- 在新数据库中导出数据为一个新的DMP文件。

例如,使用expdp命令:`expdp <用户名>/<密码> directory=<目录名称> dumpfile=<新DMP文件名> logfile=<日志文件名>`请注意,在此过程中,您需要确保新数据库的字符集支持您所需的编码,以及确保导入和导出过程中的数据完整性。

2. 使用Oracle提供的工具或第三方工具来直接修改DMP文件的编码。

这需要您使用特定的工具和脚本来转换DMP文件中的数据编码。

请注意,这是一个比较复杂和风险较高的过程,因为它涉及直接操作文件的二进制数据。

不管您选择哪种方法,请确保在进行任何修改之前,备份原始DMP文件,并在操作过程中注意数据的完整性和一致性。

oracle imp导入中文乱码

oracle imp导入中文乱码

客户给了7个dmp文件共15G左右,需要导入到测试环境,结果导入是成功了,但中文都是乱码。

也只怪自己没注意刚开始的提示信息:Java代码1.import done in US7ASCII character set and AL16UTF16 NCHAR character set2.import server uses WE8ISO8859P1 character set (possible charset conversion)3.export client uses ZHS16GBK character set (possible charset conversion)系统有提示编码对不上,查了半天只能重来了,幸好数据库是新安装的,20G的数据量还是比较大,于是先把表空间和用户都删除了干脆一干二净重来。

Java代码1.drop tablespace XXXX INCLUDING CONTENTS;2.drop user XXXX cascade;3.4.然后到之前存放数据文件的目录把20个数据文件也删除了。

附监听命令:启动监听:lsnrctl start查看监听:lsnrctl status停止监听:lsnrctl stop因安装oracle以及新建实例时未注意字符集,修改数据库字符集相对简单也方便就改数据库字符集了。

按照网上:Java代码1.SQL> shutdown immediate;2.SQL> startup mount;3.SQL> alter system enable restricted session;4.SQL> alter system set job_queue_processes=0;5.SQL> alter database open;6.SQL> alter database character set internal_use ZHS16GBK;7.SQL> shutdown immediate;8.SQL> startup;结果关闭没问题,但不能启动了,报错信息:Java代码1.SQL> startup nomount;2.ORA-01078: failure in processing system parameters3.LRM-00109: could not open parameter file '/home/oracle/oracle/product/10.2.0/db_3/dbs/initorcl.ora'把数据库实例对应目录下的复制过去也不行,终于找到解决方法,在运行上面命令前,先把系统环境变量做修改Java代码1.[oracle@localhost table_space]$ export ORACLE_SID=xxxx xxxx表示你的实例名即sid2.[oracle@localhost table_space]$ sqlplus /nolog3.4.SQL*Plus: Release 10.2.0.1.0 - Production on Wed Dec 14 12:29:48 20115.6.Copyright (c) 1982, 2005, Oracle. All rights reserved.7.8.SQL> conn / as sysdba9.Connected to an idle instance.10.SQL> startup mount;11.ORACLE instance started.12.13.Total System Global Area 603979776 bytes14.Fixed Size 1220796 bytes15.Variable Size 113250116 bytes16.Database Buffers 482344960 bytes17.Redo Buffers 7163904 bytes18.Database mounted.19.SQL>接下来继续剩余的操作,因为系统是32位的,创建个大表空间还是有些麻烦:Java代码1.create tablespace xxx datafile '/home/oracle/table_space/icms1.dat' SIZE 3G,2.'/home/oracle/table_space/icms2.dat' SIZE 3G,'/home/oracle/table_space/icms3.dat' SIZE 3G,3.'/home/oracle/table_space/icms4.dat' SIZE 3G,'/home/oracle/table_space/icms5.dat' SIZE 3G,4.'/home/oracle/table_space/icms6.dat' SIZE 3G,'/home/oracle/table_space/icms7.dat' SIZE 3G,5.'/home/oracle/table_space/icms8.dat' SIZE 3G,'/home/oracle/table_space/icms9.dat' SIZE 3G,6.'/home/oracle/table_space/icms10.dat' SIZE 3G,'/home/oracle/table_space/icms11.dat'SIZE 3G,7.'/home/oracle/table_space/icms12.dat' SIZE 3G,'/home/oracle/table_space/icms13.dat'SIZE 3G,8.'/home/oracle/table_space/icms14.dat' SIZE 3G,'/home/oracle/table_space/icms15.dat'SIZE 3G,9.'/home/oracle/table_space/icms16.dat' SIZE 3G,'/home/oracle/table_space/icms17.dat'SIZE 3G,10.'/home/oracle/table_space/icms18.dat' SIZE 3G,'/home/oracle/table_space/icms19.dat'SIZE 3G,11.'/home/oracle/table_space/icms20.dat' size 3g autoextend on next 1g maxsize unlimited;一次性做了60G的表空间,注意上面表空间的名称最好与dmp文件中涉及到的表空间一致,我之前就有类似提示警告,导致有些脚本不能正常执行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

从 NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
二、如何查询Oracle的字符集
很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要有同事咨询oracle数据库字符集相关的问题,如在不同数据库做数据迁移、同其它系统交换数据等,常常因为字符集不同而导致迁移失败或数据库内数据变成乱码。现在我将oracle字符集相关的一些知识做个简单总结,希望对大家今后的工作有所帮助。
一、什么是oracle字符集
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
一旦数据库创建后,数据库的字符集理论上讲是不能改变的。因此,在设计和安装之初考虑使用哪一种字符集十分重要。根据Oracle的官方说明,字符集的转换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,那么字符集的转换是不受oracle支持的。对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。特别说明,我们最常用的两种字符集ZHS16GBK和 ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支持。
1、修改server端字符集(不建议使用)JA16EUCTILDE
在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改 props$表并不完全,可能引起严重的后果。正确的修改方法如下:
0354
然后将dmp文件的2、3字节修改为0354即可。
如果dmp文件很大,用ue无法打开,就需要用程序的方法了。网上有人用java存储过程写了转换的程序(用java存储过程的好处是通用性教好,缺点是比较麻烦)。我在windows下测试通过。但要求oracle数据库一定要安装JVM选项。有兴趣的朋友可以研究一下程序代码
1、查询oracle server端的字符集
有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:SQL>select userenv(‘language’) from dual;
结果类似如下:AMERICAN _ AMERICA. ZHS16GBK
三、修改oracle的字符集
上文说过,oracle的字符集有互相的包容关系。如us7ascii就是zhs16gbk的子集,从us7ascii到zhs16gbk不会有数据解释上的问题,不会有数据丢失。在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。
SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;
ZHS16GBK
如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):
SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
2、修改dmp文件字符集
上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如 US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。
具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为 ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:
SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;
$sqlplus /nolog
SQL>conn / as sysdba;
若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
set nls_lang=AMERICAN_AMERICA.ZHS16GBK
这样就只影响这个窗口里面的环境变量。
在unix平台下,就是环境变量NLS_LANG。
$echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK
如果检查的结果发现server端与 client端字符集不一致,请统一修改为同server端相同的字符集。
影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下:
NLS_LANG = language_territory.charset
它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:
Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK
2、如何查询dmp文件的字符集
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然后用上述SQL也可以得到它对应的字符集。
3、查询oracle client端的字符集
这个比较简单。在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,比如:
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
相关文档
最新文档