oracle数据备份经历

前段时间,领导安排个任务,从现有开发库整理一个初始数据环境出来。各种没有文档没有头绪,各种抱怨抛开不说。连环境也没有,网络也不好。于是,悲剧开始。主要是字符集的问题。
一篇较好的oralce字符集教程:[url]http://www.360doc.com/content/10/1210/17/2614615_76834237.shtml[/url]

由于没有空的库供我使用,只能自己弄一个。有由于网络超级差,下个oralce服务端慢的要命,所以别人那里拿了个Oracle 10g Express Edition。不过Oracle XE目前的beta2缺省安装的字符集是WE8MSWIN1252,不是中文字符集,而且不能在安装时配置。并且因为ZHS16GBK不是缺省字符集的超集,所以不能通过直接运行
alter  database  character  set  ZHS16GBK  ;
来修改。

查看当前字符集的代码:
select userenv('language') from dual;


于是,网上搜了一圈,找到一个还算勉强的办法:
connect  system/oracle9i  as  sysdba 
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

不过这个办法会使得web控制台不可用。

所以各种操作需要使用sqlplus来运行命令行。
以DBA身份登录到数据库
connect sys/sys123456 as sysdba;

创建临时表空间
create temporary tablespace test_temp 
tempfile 'E:\oracle\product\10.2.0\oradata\testserver\test_temp01.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;

创建表空间
create tablespace test_data
logging
datafile 'E:\oracle\product\10.2.0\oradata\testserver\test_data01.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;

创建用户并指定表空间
create user testserver_user identified by testserver_user
default tablespace test_data
temporary tablespace test_temp;

授权
grant connect,resource to testserver_user;


由于一开始字符集的问题没搞清楚,所以导入的时候报错,经常需要删除重建。
drop user testserver_user cascade;


各种方式的数据导出
--将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp中
exp system/manager@TEST file=d:daochu.dmp full=y
--将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:daochu.dmp owner=(system,sys)
--将数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat)
--将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'"


数据的导入
--将D:daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:daochu.dmp
--如果表已存在,忽略错误
imp aichannel/aichannel@HUST full=y file=d:datanewsmgnt.dmp ignore=y
--将d:daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:daochu.dmp tables=(table1)


数据在导入导出时,会有几个地方发生字符集转换:
1.导出时,服务端到当前session的字符集转换
2.导入时,dmp的字符集到目标数据库的字符集转换

所以一般统一字符集为上,主要是修改NLS_LANG环境变量。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值