ORACLE字符集
一,什么是oracle字符集
oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。
有三部分组成(语言,地域,字符集)每个成分控制了NLS子集的特性
Language:指定服务器消息的语言,territory:指定服务器的日期和数字格式
charset:指定字符集。如:AMERICAN_AMERICA.ZHS16GBK
nls_lang的组成可以看出,真正影响数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要是第三部分相同,那么就可以相互的导入与导出,前面影响的只是国家的语言比如,是中文还是英文等等。
二,查看oracle数据库字符集
分成三部分查看
1,oracle服务器端字符集
2,oracle客户端字符集
3,dmp文件的字符集
在做oracle数据库导入导出的时候需要这三个字符集都一致才能正确导入
1,查询oracle SERVER端查看字符集
select userenv('language') from dual;
2.查看dmp文件字符集
dmp文件的第2和第3个字节记录了dmp文件的字符集
cat full.dmp|od-x|head -1|awk '{print $2 $3}'|cut -c 3-6
selectnls_charset_name(to_number('0354','xxxx')) from dual
3,查看客户端字符集
echo $NLS_LANG
查看数据字符集
SERVER:
select * fromnls_database_parameters
CLIENT
select * fromnls_instance_parameters
SESSION
select * fromnls_session_parameters
-------------------------------------------------------------------------------------------
select * fromnls_database_parameters
select * fromprops$;
select * fromv$nls_parameter
查询结果中NLS_CHARACTERSET表示字符集
NLS_NCHAAR_CHARACTERSET表示国家字符集
启动到Mount
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTEDSESSION;
SQL>ALTER SYSTEM SETJOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
SQL>ALTER DATABASE NATIONAL CHARACTER SETAL16UTF16;
--如果是从子集到父集,需要使用INTERNAL_USE 参数,跳过超子集检测
SQL>ALTER DATABASE CHARACTER SETINTERNAL_USE AL32UTF8;
SQL>ALTER DATABASE NATIONAL CHARACTER SETINTERNAL_USE AL16UTF16;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP