一、数据库实例的导出:
登录到源数据库所在的redhat系统中,执行如下语句:
echo $ORACLE_SID
如果为自己想要的数据库实例,则进入:
用主机自带超级权限登录:
sqlplus /nolog;
conn / as sysdba;
登录后,使用如下语句将oracle数据实例导出,实例名以sqccdb1为例,sqsmk用户为dba权限:
exp sqsmk/sqsmk@sqccdb1 full=y file=/home/oracle/sqccdb1.dmp log=/home/oracle/exp.log
二、数据库实例的导入:
1)新建数据库实例:
在redhat桌面,打开终端,输入dbca,进入数据库配置助手,可视化界面,新建数据库实例,名称为sqccdb1,字符集为:简体中文,即ZHS16GBK,语言选择SIMPLED CHINESE;
2)导入数据库dmp文件:
将dmp文件传输到目标数据库;如放到/home/oracle路径下:
3)登录目标数据库操作系统,执行:echo $ORACLE_SID ,如果不是目标实例,则export ORACLE_SID=sqccdb1 切换为目标实例,登录数据库,并启动数据库:
sqlplus /nolog;
conn / as sysdba;
查看数据库字符集:select userenv('langauge') from dual;
如果不是:SIMPLIFIED CHINESE_CHINA.ZHS16GBK,则将其更为如下字符集:
操作步骤如下:
shutdown immediate;
startup 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 internal_use ZHS16GBK ;
shutdown immediate;
startup;
create user sqsmk identified by sqsmk;
grant dba to sqsmk;
imp sqsmk/sqsmk@sqccdb1 full=y ignore=y file=/home/oracle/sqccdb1.dmp
至此数据库实例导入完毕
说明:导入过程中切记注意导出的dmp编码和新创建的数据库实例编码是否一致,否则中文字段会出现乱码;
使用如下java代码:
package file;
import java.io.FileInputStream;
public class ReadDmpCharsetBytes {
import java.io.FileInputStream;
public class ReadDmpCharsetBytes {
public static void main(String[] args) throws Exception {
byte[] bytes = new byte[3];
new FileInputStream("D:\\oracle\\176db\\desdb1.dmp").read(bytes);
String bytestr = String.format("%02x", bytes[1]) + String.format("%02x", bytes[2]);
System.out.println(bytestr);
System.out.println("select nls_charset_name(to_number('" + bytestr + "','xxxx')) from dual");
}
byte[] bytes = new byte[3];
new FileInputStream("D:\\oracle\\176db\\desdb1.dmp").read(bytes);
String bytestr = String.format("%02x", bytes[1]) + String.format("%02x", bytes[2]);
System.out.println(bytestr);
System.out.println("select nls_charset_name(to_number('" + bytestr + "','xxxx')) from dual");
}
}
查出的字符长度为:0354 对应字符格式为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK ;
0369对应的是AL32UTF8