iii导出/导入与字符集
明白ORACLE的多国语言设置ORACLE多国语言设置是为了支持世界范围的语言与字符集一般对语言提示货币形式排序方式和CHARVARCHARCLOBLONG字段的数据的显示等有效ORACLE的多国语言设置最主要的两个特性就是国家语言设置与字符集设置国家语言设置决定了界面或提示使用的语言种类字符集决定了数据库保存与字符集有关数据(如文本)时候的编码规则正如刚才上面的一个小例子环境变量NLS_LANG的不同导致EXP帮助发生变化这就是多国语言设置的作用(NLS_LANG包含国家语言设置与字符集设置这里起作用的是国家语言设置而不是字符集)
ORACLE字符集设定分为数据库字符集和客户端字符集环境设置在数据库端字符集在创建数据库的时候设定并保存在数据库props$表中对于i以上产品已经可以采用Alter database character set 字符集来修改数据库的字符集但也仅仅是从子集到超集不要通过update props$来修改字符集如果是不支持的转换可能会失去所有与字符集有关的数据就是支持的转换也可能导致数据库的不正常工作字符集分为单字节字符集与多字节字符集USASCII就是典型的单字节字符集在这种字符集中length=lengthb而ZHSGBK就是常用的双字节字符集在这里lengthb=*length
在客户端的字符集环境比较简单主要就是环境变量或注册表项NLS_LANG注意NLS_LANG的优先级别为参数文件à注册表à环境变量àalter sessionNLS_LANG的组成为国家语言设置字符集如nls_lang=simplified chinese_chinazhsgbk客户端的字符集最好与数据库端一样(国家语言设置可以不一样如zhsgbk的字符集客户端可以是nls_lang =simplified chinese_chinazhsgbk或Ameircan_Americazhsgbk都不影响数据库字符的正常显示)如果字符集不一样而且字符集的转换也不兼容那么客户端的数据显示与导出/导入的与字符集有关的数据将都是乱码
使用一点点技巧就可以使导出/导入在不同的字符集的数据库上转换数据这里需要一个进制文件编辑工具即可如uedit用编辑方式打开导出的dmp文件获取字节的内容如 先把它转换为进制数为使用函数NLS_CHARSET_NAME即可获得该字符集
SQL> select nls_charset_name() from dual;
NLS_CHARSET_NAME()
USASCII
可以知道该dmp文件的字符集为USASCII如果需要把该dmp文件的字符集换成ZHSGBK则需要用NLS_CHARSET_ID获取该字符集的编号
SQL> select nls_charset_id(zhsgbk) from dual;
NLS_CHARSET_ID(ZHSGBK)
把换成进制数为把字节的 换成 即完成了把该dmp文件字符集从usascii到zhsgbk的转化这样再把该dmp文件导入到zhsgbk字符集的数据库就可以了(注意十进制数与十六进制之间的转换想明白其中的道理)
Iv跨版本使用Exp/Imp
Exp/Imp很多时候可以跨版本使用如在版本与版本之间导出导入数据但这样做必须选择正确的版本规则为
·总是使用IMP的版本匹配数据库的版本如果要导入到则使用的导入工具
·总是使用EXP的版本匹配两个数据库中低的那个版本如在与之间互导则使用的EXP工具
OS备份
操作系统备份有两类冷备份(Cold backup)与热备份(Hot backup)操作系统备份与以上的逻辑备份有本质的区别逻辑备份提取数据库的数据内容而不备份物理数据块而操作系统备份则是拷贝整个的数据文件
i冷备份
在文件级备份开始前数据库必须彻底关闭关闭操作必须用带有normalimmediatetransaction选项的shutdown来执行
数据库使用的每个文件都被备份下来这些文件包括
☆所有数据文件
☆所有控制文件
☆所有联机REDO LOG 文件
☆INITORA文件(可选)
作冷备份一般步骤是
a正常关闭要备份的实例(instance);
b备份整个数据库到一个目录
c启动数据库
如
SVRMGRL>connect internal
SVRMGRL >shutdown immediate
SVRMGRL >! cp <file> <backup directory>
或
SVRMGRL >!tar cvf /dev/rmt/ /u/oradata/prod
SVRMGRL >startup
注意如果利用脚本对数据库进行冷备份必须对关闭数据库的命令进行逻辑检查如果发生关闭数据库的命令不能正常执行而导致数据库没有正常关闭那么所有的冷备份将回是无效的
ii热备份
热备份是当数据库打开并对用户有效是的OS级的数据备份热备份只能用于ARCHIVELOG方式的数据库在数据文件备份之前对应的表空间必须通过使用ALTER TABLESPACE …… BEGIN BACKUP以备份方式放置然后组成表空间的数据文件可以使用类似冷备份的操作系统命令进行拷贝在数据文件用操作系统命令拷贝后应使用ALTER TABLESPACE …… END BACKUP命令使表空间脱离热备份方式
热备份没有必要备份联机日志但必须是归档状态在实例恢复的时候可能需要用到归档日志当前联机日志一定要保护好或是处于镜相状态当前联机日志的损坏对于数据库的损坏是巨大的只能以数据的丢失来进行数据库的恢复工作
对于临时表空间存放的是临时信息在热备份是也可以考虑不用备份如果临时文件发生故障可以删除该数据文件与表空间重建一个临时表空间
热备份的优点是显而易见的
a.可在表空间或数据文件级备份备份时间短
b.备份时数据库仍可使用
c.可达到秒级恢复(恢复到某一时间点上)
d.可对几乎所有数据库实体作恢复
e.恢复是快速的在大多数情况下在数据库仍工作时恢复
操作系统作热备份的一般步骤为
①连接数据库
SVRMGRL>connect internal;
②将需要备份的表空间(如User)设置为备份方式
SVRMGRL>Alter tablespace User begin backup;
③拷贝数据文件
SVRMGRL>!cp /u/oradata/prod/userora /backup/prod/userora
Or
$cp cp /u/oradata/prod/userora /backup/prod/userora
④在数据文件拷贝完成后将表空间拖体备份方式
SVRMGRL>Alter tablespace User end backup;
⑤对所有需要备份的表空间重复
⑥使用如下的命令备份控制文件ALTER DATABSE …… BACKUP CONTROLFILE
如备份成二进制文件
alter database backup controlfile to new fielname;
备份成文本文件
alter database backup controlfile to trace;
因为热备份的时候用户还在操作数据库所以最好是每个表空间处于备份状态的时间最短这样就要求一个表空间一个表空间的备份不要一起使表空间处于备份状态而同时拷贝数据文件
注意如果在热备份的时候如果数据库中断(如断电)那么在重新启动数据库的时候数据库将提示有数据文件需要恢复你需要把正在断电时候的处于备份状态的数据文件通过ALTER TABLESPACE …… END BACKUP结束备份方式具体哪个数据文件或表空间处于备份状态可以通过v$backup与v$datafile来获得
RMAN(备份与恢复管理器)
i使用RMAN进行备份
Recovery manager(RMAN)是ORACLE提供的DBA工具用语管理备份和恢复操作RMAN只能用于ORACLE或更高的版本中它能够备份整个数据库或数据库部件其中包括表空间数据文件控制文件和归档文件RMAN可以按要求存取和执行备份和恢复
RMAN备份有如下优点
☆支持在线热备份
☆支持多级增量备份
☆支持并行备份恢复
☆减少所需要备份量
☆备份恢复使用简单
重要的是使用恢复管理器允许您进行增量数据块级的备份(这个与导出/导入的增量截然不同)增量RMAN备份是时间和空间有效的因为他们只备份自上次备份以来有变化的那些数据块另一个空间有效的RMAN特性是它只备份数据文件中使用的数据块忽略空的未用的数据块这个对于预分配空间的表空间有很大的好处
从i开始还增加了RMAN的数据块级别的恢复可以进一步减少数据库恢复时间
RMAN支持以下不同类型的备份
FULL数据库全备份包括所有的数据块
INCREMENTAL 增量备份只备份自上次增量备份以来修改过的数据块需要一个级的增量作为增量的基础可以支持级增量
OPEN 在数据库打开的时候使用
CLOSED 在数据库安装(MOUNT)但不打开的时候备份关闭备份可以是CONSISTENT或IN CONSISTENT类型的
CONSISTENT 在数据库安装单不打开并且在安装之前数据库被彻底关闭(而不是被破坏或异常退出)时使用CONSISTENT备份可以简单的进行复原(RESTORE)而不是恢复(RECOVER)
INCONSISTENT 在数据库打开或安