Chinaunix首页 | 论坛 | 博客
  • 博客访问: 25639
  • 博文数量: 5
  • 博客积分: 1622
  • 博客等级: 上尉
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-04 19:42
文章分类

全部博文(5)

文章存档

2010年(5)

分类:

2010-08-13 00:36:40

 
 
 
  对于数据库来说,保证数据的完整性是极其重要的,然而EDB提供一个比较简单实用的工具:COPY  此工具虽不能与Oracle的exp/imp或其他工具(如强大的RMAN)媲美,但是它完全可以做到快速备份和恢复(针对 表), 下面通过几个简单的例子来说明它是如何备份和恢复数据的。
 
1. 创建一个临时表, 具体表结构如下:
 
 
些时,一个叫 copytest 的表已经创建完毕,接下来模拟插入一些数据:
 
从上图可以看到已经成功插入2行数据,当然你也可以模拟插入10条、100条及N条数据。 有了数据后,接下来就要进行备份。
 
2. 备份:COPY...TO 
具体的语法是:COPY table_name TO 'bak_directory';
table_name       备份的表名称
bak_directory    备份文件存放的路径
下面开始备份 copytest 表:
 
以上就是备份 copytest 表到 /home/enterprisedb 这个目录,copytest.bak 为备份文件(文件名可以自定义),通过 Linux 的 cat 命令可以查看到 copytest.bak 文件的具体内容。能过上图就能看到copytest.bak文件确实有数据,而且完全正确及完整,每列的内容用TAB键来分隔。
 
    到了这里,比较细心的朋友可能就会问:“假如内容本身包括TAB怎么办?”,这个问题问的好,其实很好解决,只需要加个USING DELIMITER,请看例子:
 
 
在备份的时候通过USING DELIMITERS '|',就可以把默认的TAB分隔符设置为自定义的,此例的分隔符为“|”,使用cat 可以清楚的看到每个字段的数据。
 
 
3.  屏幕输入或输出
    有时候我们不想把备份的内容输出到文件,而是直接输出到屏幕,这时怎么办?这个也好办,那就是STDOUT,在讲到STDOUT之前,先说下STDIN,使用明确指定STDIN,它将可以接收我们从键盘输入的数据,如下图所示:
 
注意,当输入 COPY coptest FROM stdin 后,系统提示要您键入一行新的数据,并以一行“\.”来结束。此处我们可以看出数据成功插入到 copytest表中,再通过 TO STDOUT可以将内容打印到终端而不是文件。
 
4. 空(NULL)值和反斜扛(backslash)
   有时,并不是每行的每列数据都有值,也就是这列为空,对于系统来说,它就是NULL。为了演示,这里又将模拟一条含有NULL及特殊符号“|”值的数据,SQL如下:
 

INSERT INTO copytest VALUES (4,837.20,'abc|def',NULL);

 

当我们使用分隔符为“|”的时候,为了辨别真实数据还是分隔符,EDB会在真实数据“|”的前面加个反斜扛,这样一来,就不会有错了。 另外,如果真实数据中含有反斜扛呢? 这个还是一样的,在反斜扛前面再加个反斜扛,即这样:“\\”  除了这两个特殊符号外,还些其他的,例如TAB 换行等等,以下是从网上找一张详细的需要转义的表格,供参考:

 

5. 数据恢复 COPY..FROM

具体的语法是:COPY table_name FROM 'bak_directory';
table_name       备份的表名称
bak_directory    备份文件存放的路径
其中 table_name 必须在数据库中存在,否则会报如下错误:

知道了如何备份后,恢复相当来说就比较简单些,只需要把关键字TO改为FROM,请看以下例子:

首先将 copytest 表的数据清空(真实环境下绝不可能这么操作,这里完全只是为了演示从文件恢复数据的过程),然后使用COPY..FROM 就将数据成功恢复到数据库中。

  以上就是整个备份和恢复的简单过程,对于真正的生产库来说,这些功能完全还达不到要求,等偶以后学会高级的备份恢复技巧,将第一时间和大家共享,谢谢!

 


阅读(1792) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~