如何保护MySQL 中的重要数据

时间:2023-05-25 08:25:23 其他范文 收藏本文 下载本文

如何保护MySQL 中的重要数据(共10篇)由网友“kwwldnvmq”投稿提供,以下是小编为大家准备了如何保护MySQL 中的重要数据,欢迎参阅。

如何保护MySQL 中的重要数据

篇1:如何保护MySQL 中的重要数据数据库教程

在日常的工作中,保护数据免受未授权用户的侵犯是系统管理员特别关心的问题,如果你目前用的是MySQL,就可以使用一些方便的功能来保护系统,来大大减少机密数据被未授权用户访问的风险。

企业最有价值的资产通常是其数据库中的客户或产品信息。因此,在这些企业中,数据库管理的一个重要部分就是保护这些数据免受外部攻击,及修复软/硬件故障。

在大多数情况下,软硬件故障通过数据备份机制来处理。多数数据库都自带有内置的工具自动完成整个过程,所以这方面的工作相对轻松,也不会出错。但麻烦却来自另一面:阻止外来 入侵窃取或破坏数据库中的信息。不幸的是,一般没有自动工具解决这一问题;而且,这需要管理员手工设置障碍来阻止 ,确保公司数据的安全。

不对数据库进行保护的常见原因是由于这一工作“麻烦”而“复杂”。这确实是事实,但如果你应用MySQL,就可以使用一些方便的功能来显著减少面临的风险。下面列出了以下几个功能:

◆删除授权表中的通配符

MySQL访问控制系统通过一系列所谓的授权表运行,从而对数据库、表格或栏目级别的用户访问权利进行定义。但这些表格允许管理员为一名用户设定一揽子许可,或一组应用通配符的表格。这样做会有潜在的危险,因为 可能会利用一个受限的账户来访问系统的其他部分。由于这一原因,在设置用户特权时要谨慎,始终保证用户只能访问他们所需的内容。在给个别用户设定超级特权时要尤其小心,因为这种级别允许普通用户修改服务器的基本配置,并访问整个数据库。

建议:对每个用户账户应用显示特权命令,以审查授权表,了解应用通配符许可是否恰当。

◆要求使用安全密码

用户账号的安全与用来保护它们的密码密切相关。因此,在安装MySQL时第一件事就应该设置MySQL根账号的密码(默认为空)。修复这一漏洞后,接下来就应要求每个用户账号使用一个密码,且不要使用生日、用户名或字典中的单词这些容易识别的启发式密码,

建议:应用MySQL-安全-授权选项避免使用旧的,不大安全的MySQL密码格式。

◆检查配置文件许可

一般来说,要使服务器连接更为快速方便,单个用户和服务器管理员必须把他们的用户账号密码存储在单用户MySQL选项文件中。但是,这种密码是以纯文本形式存储在文件中的,很容易就可以查阅。因此,必须保证这样的单用户配置文件不被系统中的其他用户查阅,且将它存储在非公共的位置。理想情况下,你希望单用户配置文件保存在用户的根目录,许可为0600。

◆加密客户与服务器之间数据传送 :

MySQL(及其它)客户与服务器构架的一个重要问题就是通过网络传送数据时的安全问题。如果客户与服务器间的交互以纯文本形式发生, 就可能“嗅出”被传送的数据包,从而获得机密信息。你可以通过激活MySQL配置中的SSL,或应用一个OpenSSH这样的安全应用来为传送的数据建立一个安全的加密“通道”,以关闭这一漏洞。以这种形式加密客户与服务器连接可使未授权用户极难查阅往来的数据。

◆禁止远程访问

如果用户不需要远程访问服务器,你可以迫使所有MySQL连接通过UNIX插槽文件来完成,从而大大减少网络受攻击的风险。这一过程可通过跳过网络选项启动服务器来完成。这样可以阻止TCP/IP网络连接到MySQL上,保证没有用户可以远程连接系统。

建议:可以在MySQL服务器配置中添加捆绑地址127.0.0.1指令来增强这一功能,迫使MySQL捆绑当地机器的IP地址来保证只有同一系统中的用户可以连接到MySQL。

◆积极监控MySQL访问记录

MySQL中带有很多不同的日志文件,它们记录客户连接,查询和服务器错误。其中,最重要的是一般查询日志,它用时间标签记录每名客户的连接和中断时间,并记录客户执行的每个查询。如果你怀疑发生了不寻常的行为,如网络入侵,那么监控这个日志以了解行为的来源是个好方法。

保护你的MySQL数据库是一个日常工作。因此,即使完成了上述步骤,也还需要你利用更多的时间去了解更多的安全建议,积极监控并更新你的系统安全。

篇2:导入mysql数据库命令

导入mysql数据库命令

1、

cmd->mysql -hlocalhost(地址) -u用户名 -p密码

-P端口->use 需要导入的数据库->source D:\demo.sql

2、

导入速度快

cmd->mysql --default-character-set=utf8 --hlocalhost

(地址) -u用户名 -p密码 -P端口 数据库名

篇3:保护U盘重要数据的方法

U盘的称呼最早来源于朗科公司生产的一种新型存储设备,名曰优盘,使用USB接口进行连接,而之后生产的类似技术的设备由于朗科已进行专利注册(实质是一种垄断)而不能再称之为优盘,而改称谐音的U盘或形象的称之为闪存闪盘等,

很多拥有U盘的朋友,经常将U盘插入USB接口后,为了随时拷贝的方便而不将它拔下。你可知道,这样做法对你的个人数据带来极大的安全隐患。

其一,如果你使用的是Windows或是WindowsXP操作系统,并且打开了休眠记忆功能,那么在系统进入休眠待机状态下返回到正常状态下,很容易对U盘中的数据造成修改,一旦发生,重要数据的丢失将使你欲哭无泪。

篇4:如何从 MySQL 数据库表中检索数据数据库教程

1、从数据库表中检索信息

实际上,前面我们已经用到了SELECT语句,它用来从数据库表中检索信息,

select语句格式一般为:

SELECT 检索关键词 FROM 被检索的表 WHERE 检索条件(可选)

以前所使用的“ * ”表示选择所有的列。

下面继续使用我们在上篇文章中创建的表mytable。

2、查询所有数据:

mysql>select * from mytable;

+----------+------+------------+----------+

| name | sex | birth | birthaddr |

+----------+------+------------+--------+

| abccs |f | 1977-07-07 | china |

| mary |f | 1978-12-12 | usa |

| tom |m | 1970-09-02 | usa |

+----------+------+------------+----------+

3 row in set (0.00 sec)

3、修正错误记录:

假如tom的出生日期有错误,应该是1973-09-02,则可以用update语句来修正: mysql>update mytable set birth = “1973-09-02” where name = “tom”;

再用2中的语句看看是否已更正过来。

4、选择特定行

上面修改了tom的出生日期,我们可以选择tom这一行来看看是否已经有了变化:

mysql>select * from mytable where name = “tom”;

+--------+------+------------+------------+

| name |sex | birth | birthaddr |

+--------+------+------------+------------+

| tom |m | 1973-09-02 | usa |

+--------+------+------------+------------+

1 row in set (0.06 sec)

上面WHERE的参数指定了检索条件。我们还可以用组合条件来进行查询:

mysql>SELECT * FROM mytable WHERE sex = “f” AND birthaddr = “china”;

+--------+------+------------+------------+

| name |sex | birth | birthaddr |

+--------+------+------------+------------+

| abccs |f | 1977-07-07 | china |

+--------+------+------------+------------+

1 row in set (0.06 sec)

5、选择特定列

假如你想查看表中的所有人的姓名,则可以这样操作:

mysql>SELECT name FROM mytable;

+----------+

| name |

+----------+

| abccs |

| mary |

| tom |

+----------+

3 row in set (0.00 sec)

如果想列出姓名和性别两列,则可以用逗号将关键词name和birth分开: myaql>select name,birth from mytable;

6、对行进行排序

我们可以对表中的记录按生日大小进行排序:

mysql>SELECT name, birth FROM mytable ORDER BY birth;

+----------+------------+

| name | birth |

+----------+------------+

| tom | 1973-09-02 |

| abccs | 1977-07-07 |

| mary | 1978-12-12 |

+----------+------------+

3 row in set (0.00 sec)

我们可以用DESC来进行逆序排序:

mysql>SELECT name, birth FROM mytable ORDER BY birth DESC;

+----------+------------+

| name | birth |

+----------+------------+

| mary | 1978-12-12 |

| abccs | 1977-07-07 |

| tom | 1973-09-02 |

+----------+------------+

3 row in set (0.00 sec)

7、行计数

数据库经常要统计一些数据,如表中员工的数目,我们就要用到行计数函数COUNT,

COUNT()函数用于对非NULL结果的记录进行计数:

mysql>SELECT COUNT(*) FROM mytable;

+----------+

| COUNT(*) |

+----------+

| 3 |

+----------+

1 row in set (0.06 sec)

员工中男女数量:

mysql>SELECT sex, COUNT(*) FROM mytable GROUP BY sex;

+------+----------+

| sex | COUNT(*) |

+------+----------+

| f | 2 |

| m | 1 |

+------+----------+

2 row in set (0.00 sec)

注意我们使用了GROUP BY对SEX进行了分组。

篇5:DB2与MySQL数据转移

如果您是一位要同时管理 MySQL 和 IBM® DB2® Express-C 的 DBA,就需要理解这两种数据库服务器的功能差异,本文是系列文章中的第 4 篇,这个系列帮助具有 MySQL 背景的 DBA 学习如何管理 DB2 Express。在本文中,学习在这两种产品中数据转移技术有何差异。讨论的技术包括 Import、Export、Load 以及专门用于数据转移的其他实用程序。

简介和背景知识

在 年 7 月 28 日,IBM 发布了下一个 DB2 for Linux®, UNIX®, and Windows® 版本,这是一种为满足当今复杂的业务需求而设计的混合型数据服务器。这个版本提供了第一个支持本机 XML 存储的工业强度的数据服务器。压缩、安全和自治功能等其他特性也得到了改进。

在 developerWorks DB2 for Linux, UNIX, and Windows 信息管理参考资料页面 上可以找到对 DB2 Express-C 9 支持的特性的概述和深入讨论。这些特性包括 PureXML™,这个特性确保企业能够以本机方式利用 XML 功能。有了 DB2 Express-C 9 PureXML 特性,就不再需要将文档存储在大对象(LOB)中或者将它们分解成对象。尽管 IBM DB2 Express-C 非常适合中小型企业的需求,但是它没有提供更高版本中的所有可用特性。DB2 Express-C 不包含其他 DB2 9 版本中的以下特性:

·Replication(但是支持 Homogeneous Replication)

·数据库分区特性

·Connection Concentrator

·DB2 Geodetic Extender

·Query Patroller

·Net Search Extender

·Compression

·Label Base Access Control - LBAC

另外,要记住 IBM DB2 Express-C 9 是 “免费开发”、“免费部署” 和 “免费发布” 的。

从 DB2 Express-C 8 到 DB2 Express-C 9,有许多改进,这些改进超出了本文的范围。但是,数据转移的特性和功能大体上保持不变。本文概述 IBM DB2 Express-C 9.1 的数据转移特性。本文主要关注它们的功能,同时提及 MySQL 的数据转移功能。如果您熟悉 MySQL 的数据转移,那么可以跳过 “MySQL 数据转移” 一节,直接学习IBM DB2 Express-C 9.1 的数据转移。

讨论的主题 - 概述

本文首先介绍 MySQL 中的数据转移。接下来,本文讨论 IBM DB2 Express-C 的数据转移,这可以分为以下主题。

·导入 - Import 实用程序和 DB2 Load

·导出 - Export 实用程序

·其他可用工具

MySQL 数据转移

MySQL 提供的用于数据转移的实用程序主要有两个。它们是 mysqldump 和 mysqlhotcopy。尽管这两个实用程序主要用来进行备份和恢复,但是它们可以用来建立现有表或整个数据库的拷贝,因此能够将数据从一个数据库(常常是中小规模的数据库)转移到同一服务器或其他服务器中的另一个数据库中。选择 mysqldump 还是 mysqlhotcopy 取决于要复制的数据库的规模、设置的成本、锁机制、恢复选项、表的类型等等。表 1 对比了 MySQL 提供的这两个实用程序。

尽管有许多建立数据库或部分数据库的拷贝的方法,比如操作系统级复制、select ... into outfile、mysqlsnapshot 以及 InnoDB 的热备份,但是本文只关注 mysqldump 和 mysqlhotcopy。各种方法之间的比较及其优缺点超出了本文的范围。

例如,对于 mysqldump,要想建立整个数据库的拷贝,最常见的方法可能是发出以下命令:

清单 1. 使用 mysqldump 创建完整的数据库拷贝

mysqldump --opt db_name >backup-file.sql

导入它的方法是发出以下命令:

清单 2. 使用 mysqldump 导入完整的数据库

mysql db_name < backup-file.sql

清单 3 中列出了 mysqldump 支持的一些重要标志。发出 mysqldump -? 命令可以获得完整的列表。

清单 3. mysqldump 选项

-A, --all-databases Dump all the databases. This will be same as --databases

with all databases selected.

--add-drop-database Add a 'DROP DATABASE' before each create.

--add-drop-table Add a 'drop table' before each create.

--add-locks Add locks around insert statements.

--allow-keywords Allow creation of column names that are keywords.

--character-sets-dir=name

Directory where character sets are.

-c, --complete-insert

Use complete insert statements.

-C, --compress Use compression in server/client protocol.

--create-options Include all MySQL specific create options.

-B, --databases To dump several databases. Note the difference in usage;

In this case no tables are given. All name arguments are

regarded as databasenames. 'USE db_name;' will be

included in the output.

Set the default character set.

--delayed-insert Insert rows with INSERT DELAYED;

--delete-master-logs

Delete logs on master after backup. This automatically

enables --master-data.

-e, --extended-insert

Allows utilization of the new, much faster INSERT syntax.

--fields-terminated-by=name

Fields in the textfile are terminated by ...

--fields-enclosed-by=name

Fields in the importfile are enclosed by ...

--fields-optionally-enclosed-by=name

Fields in the i.file are opt. enclosed by ...

--fields-escaped-by=name

Fields in the i.file are escaped by ...

--order-by-primary Sorts each table's rows by primary key, or first unique

key, if such a key exists. Useful when dumping a MyISAM

table to be loaded into an InnoDB table, but will make

the dump itself take considerably longer.

--single-transaction

Creates a consistent snapshot by dumping all tables in a

single transaction. Works ONLY for tables stored in

storage engines which support multiversioning (currently

only InnoDB does); the dump is NOT guaranteed to be

consistent for other storage engines. Option

automatically turns off --lock-tables.

-T, --tab=name Creates tab separated textfile for each table to given

path. (creates .sql and .txt files). NOTE: This only

works if mysqldump is run on the same machine as the

mysqld daemon.

--tablesOverrides option --databases (-B).

--triggers Dump triggers for each dumped table

-X, --xmlDump a database as well formed XML.

尽管 mysqldump 适合对中小规模的表和数据库进行备份,但是 mysqlhotcopy 的能力更强。不过要注意,mysqlhotcopy 不具有 mysqldump 那么大的灵活性。要记住一点,它只能在数据库目录所在的机器上运行。

表 1. mysqldump 和 mysqlhotcopy 的对比特性/功能mysqldumpmysqlhotcopy注释 复制数据库的子集YesYes它们都允许复制数据库的子集 复制完整的数据库YesYes它们都允许复制完整的数据库 复制多个数据库YesYesmysqldump 使用选项 --all-databases 同时转储多个数据库

mysqlhotcopy 使用标志 --regexp 匹配要复制的数据库 远程支持YesYes它们都支持远程转储数据 文本文件格式YesNoMysqldump 采用文本文件格式 压缩支持YesNoMysqldump 支持压缩 正则表达式支持NoYesmysqlhotcopy 的 --regexp 标志允许使用正则表达式来复制名称与给定的正则表达式匹配的所有数据库 内置YesYes这两个实用程序都是免费的 DDL 包含YesYesMysqldump 允许这个标志 转储演习NoYesmysqlhotcopy 允许使用 --dryrun 标志进行演习而不实际进行数据转储 在转储中包含/排除索引YesYes它们都允许包含/排除索引。Mysqldump 使用 --disable-keys 标志抑制 MyISAM 表的索引创建。而 Mysqlhotcopy 使用 --noindices 标志 在转储时进行锁定NoYesMysqldump 使用 --add-locks 标志,在每个表转储前后加上 lock tables 和 unlock tables 语句。Mysqlhotcopy 使用 lock tables 和 flush tables 支持所有引擎YesNoMysqldump 支持所有引擎,而 mysqlhotcopy 只支持 MyISAM 和 ARCHIVE

本文的其余部分讨论 IBM DB2 Express-C 数据转移是如何运作的。

DB2 Import

什么是 DB2 Import?MySQL 的 mysqldump 和 mysqlhotcopy 有双重用途 —— 备份和恢复以及数据转移,但是 DB2 Import 只有一种用途。DB2 Import(db2import)是 IBM DB2 Express-C 9.1(以及所有其他 DB2 数据服务器版本)提供的一种实用程序,用来将数据从各种格式的文件导入表或可更新视图中。与 MySQL 不同,DB2 使用 db2backup 和 db2recover 提供备份和恢复机制。文章 “DB2 versus MySQL backup and recovery”(developerworks,2006 年 6 月)概述了 MySQL 和 IBM DB2 Express-C 9.1 的备份和恢复机制。

DB2 Import 有几个关键的特征。为了使用 DB2 Import,必须获得正确的权力和特权,否则就无法顺利地执行导入。下表列出了将文件导入数据库所需的权力和特权:

表 2. DB2 Import 所需的权力和特权

操作权力特权注释 创建新的表SYDADM/DBADMCREATETABDB2 Import 允许在导入期间动态地创建新表。这只能应用于表 在现有的表中插入数据SYDADM/DBADMCONTROL、INSERT 和 SELECT可应用于表和视图 替换现有表中的数据SYDADM/DBADMCONTROL/(INSERT、SELECT、UPDATE 和 DELETE)也应用于视图 在现有的表中追加数据SYDADM/DBADMSELECT 和 INSERT 特权也应用于视图

与大多数管理任务相似,可以从命令行处理程序(CLP)和 DB2 Control Center 运行 DB2 Import。稍后将更详细地讨论导入选项以及它们的运作方式。

DB2 Import 提供了导入来自外部应用程序的文件的灵活方法,包括其他来源,比如市场上的其他数据库。IBM DB2 Express-C 还具有 XML 本机存储功能(而不仅仅是支持 XML)以及相应的导入支持。在 IBM DB2 Express-C 中,可以将 XML 文档导入数据库中。DB2 以本机方式将 XML 按照经过解析的层次化格式存储在 XQuery Data Model(XDM)中。在导入期间,可以检验要导入的 XML 文档。如果启用了检验,在 XML 导入期间对于无效数据会报告错误。

通过在命令行处理程序中发出 db2 ? import 命令,可以获得 DB2 Import 的语法:

清单 4. DB2 Import 语法

IMPORT FROM filename OF {IXF | ASC | DEL | WSF}[LOBS FROM lob-path [ {,lob-path} ... ] ][XML FROM xml-path [ {,xml-path} ... ] ][MODIFIED BY filetype-mod ...][METHOD {L ( col-start col-end [ {,col-start col-end} ... ] )[NULL INDICATORS (col-position [ {,col-position} ... ] )] |N ( col-name [ {,col-name} ... ] ) |P ( col-position [ {,col-position} ... ] )}][XMLPARSE {STRIP | PRESERVE} WHITESPACE][XMLVALIDATE USING {XDS [DEFAULT schema-sqlid][IGNORE (schema-sqlid [ {,schema-sqlid} ... ])][MAP ((schema-sqlid,schema-sqlid) [ {(schema-sqlid,schema-sqlid)} ... ])] |SCHEMA schema-sqlid | SCHEMALOCATION HINTS }][ALLOW {NO | WRITE} ACCESS][COMMITCOUNT {n | AUTOMATIC}] [{RESTARTCOUNT | SKIPCOUNT} n][ROWCOUNT n] [WARNINGCOUNT n] [NOTIMEOUT] [MESSAGES message-file]{{INSERT | INSERT_UPDATE | REPLACE | REPLACE_CREATE}INTO {table-name [( insert-column , ... )] | hierarchy-description}| CREATE INTO {table-name [( insert-column , ... )] |hierarchy-description {AS ROOT TABLE | UNDER sub-table-name}[IN tablespace-name [INDEX IN tablespace-name] [LONG IN tablespace-name]]} filetype-mod: COMPOUND=x, INDEXSCHEMA=schema, FORCEIN, INDEXIXF, IMPLIEDDECIMAL, NOCHECKLENGTHS, NOEOFCHAR, NULLINDCHAR, RECLEN=x, STRIPTBLANKS, STRIPTNULLS, NO_TYPE_ID, NODOUBLEDEL, LOBSINFILE, USEDEFAULTS, CHARDELx, COLDELx, DLDELx, DECPLUSBLANK, DECPTx, DATESISO, DELPRIORITYCHAR, IDENTITYMISSING, IDENTITYIGNORE, GENERATEDMISSING, GENERATEDIGNORE, DATEFORMAT=x, TIMEFORMAT=x, TIMESTAMPFORMAT=x, KEEPBLANKS, CODEPAGE=x, NOROWWARNINGS, NOCHARDEL, USEGRAPHICCODEPAGE hierarchy-description: {ALL TABLES | (sub-table-name [(insert-column, ...)], ...)} [IN] HIERARCHY {STARTING sub-table-name | (sub-table-name, ...)}

除了可用选项之外,还要注意 DB2 Import 支持四种文件格式:

DEL:分界的 ASCII,用于在许多数据库管理程序和文件管理程序之间进行数据交换。这种常用的数据存储方法使用特殊的分界符分隔列值。默认的分界符是逗号。

ASC:非分界的 ASCII,用于导入或装载来自其他应用程序的数据,这些应用程序可以创建包含对齐的列数据的平面文本文件。

PC/IXF:Integrated Exchange Format(IXF)的 PC 版本,这是在数据库管理程序中进行数据交换的首选方法。PC/IXF 是数据库表的结构化描述,其中包含内部表的外部表示。

WSF:工作表单格式,用于与 Lotus 1-2-3 和 Symphony 等产品进行数据交换。

现在,我们来看几个使用命令 CLP 的 DB2 Import 示例。然后,看看如何使用 DB2 Control Center 执行相似的任务。为了尝试进行导入,可以 下载 IBM DB2 Express-C 9。安装它之后,运行命令 db2 db2sampl -sql -xml -schema 'db2admin'。(一定要启用数据库的 UTF-8 功能,否则会收到 SQL 1239N 错误。)

本文包含的导入示例是:

导入 XML 数据(带检验或不带检验)

用插入模式导入一个用管道符(|)分界的文件

为了导入 XML 文档,常常需要确保 XML 文档是良好的。未经检验的格式不良的 XML 文档会在导入期间导致问题。一种好做法是,总是注册模式并在导入期间选择检验所针对的正确模式。本文演示在进行检验和不进行检验的情况下如何进行导入。导入 XML 文档很简单。采用的步骤如下:

1.确保已经创建了包含 XML 列的表。

2.使用 清单 5 中的命令导入 XML 文档而不进行检验。注意,在任何导入中包含消息总是明智的。如果发生任何故障,就可以利用消息文件进行调试。这是快速地纠正问题的简便方法。

清单 5. 使用命令 CLP 导入 XML 文档

IMPORT FROM “D:\XMLPoT\labdoc\scripts\data\import.del” OF DEL XML FROM “D:\XMLPoT\labdoc\scripts\data” METHOD P (1) MESSAGES “D:\db2in\xmlemp1.log” INSERT INTO DB2ADMIN.XMLEMP (EMP);

其中的 D:\XMLPoT\labdoc\scripts\data\import.del 包含指向实际文档的行指针。

import.del 示例文件的内容如下:

清单 6. import.del 示例文件的内容

在成功的装载之后,应该会在消息文件中看到下面这样的消息:

清单 7. 成功的导入

SQL3109N The utility is beginning to load data from file

“D:\XMLPoT\labdoc\scripts\data\import.del”.

SQL3110N The utility has completed processing.

“42” rows were read from the input file.

SQL3221W ...Begin COMMIT WORK. Input Record Count = “42”.

SQL3222W ...COMMIT of any database changes was successful.

SQL3149N “42” rows were processed from the input file.

“42” rows were successfully inserted into the table.

“0” rows were rejected.

3.在大多数情况下,数据是从外部系统获得的,所以最好对 XML 导入进行检验。为此,使用 db2 register xmlschema 命令将 XML 模式注册到 XML 模式存储库(XSR)中,并使用 db2 complete xmlschema 完成这个过程。可以在系统编目表 SYSCAT.XSROBJECTS 中看到已经注册的模式的列表。注册模式之后,就可以在导入 XML 文档的命令中包含 XMLVALIDATE 关键字。

清单 8. 使用命令 CLP 导入 XML 文档 —— 进行检验

IMPORT FROM “D:\XMLPoT\labdoc\scripts\data\import.del”

OF DEL XML FROM “D:\XMLPoT\labdoc\scripts\data”

METHOD P (1) XMLVALIDATE USING SCHEMA DB2ADMIN.XMLEMP

MESSAGES “D:\db2in\xmlemp2.log”

INSERT INTO DB2ADMIN.XMLEMP (EMP);

4.进行检验会确保数据是有效的,任何不符合模式的数据都会在消息文件中记录错误消息。

清单 9. 出现检验错误的 DB2 Import

SQL3109N The utility is beginning to load data from file

“D:\XMLPoT\labdoc\scripts\data\import.del”.

SQL3148W A row from the input file was not inserted into the table.

SQLCODE “-16196” was returned.

SQL16196N XML document contains an element “deptno” that is

not correctly specified. Reason code = “37” SQLSTATE=2200M

SQL3185W The previous error occurred while processing data

from row “42” of the input file.

SQL3110N The utility has completed processing.

“42” rows were read from the input file.

SQL3221W ...Begin COMMIT WORK. Input Record Count = “42”.

SQL3222W ...COMMIT of any database changes was successful.

SQL3149N “42” rows were processed from the input file.

“41” rows were successfully inserted into the table.

“1” rows were rejected.

5.为了在 DB2 Control Center 中执行相似的任务(带检验的 XML 文档导入),只需执行几个步骤,这些步骤大都很直观,而且有在线帮助。为了调用 DB2 Import,启动 DB2 Control Center,找到目标表,右击并选择 Import,见 图 1:

图 1. 从 DB2 Control Center 调用 DB2 Import

6.指定导入文件、导入模式(INSERT、INSERT_UPDATE、REPLACE)和消息文件。消息会指出在导入期间什么出了错。

图 2. DB2 Import - 导入文件、模式和消息文件

7.点击 DEL OPTIONS 找到 XML 模式检验复选框。打开它。点击 OPTIONS 选择检验所针对的模式。这是第二个选项,Validate all documents using a specific XML schema,这是最常用的 XML 检验方法。在这种情况下,选择 XMLEMP 并点击 OK。

图 3. DB2 Import - 选择 XML 检验

8.在这一步中,选择要导入的 XML 文档的位置。注意,DB2 Import 实用程序也支持导入 LOB 对象。还可以通过设置默认、忽略和缺失来控制标识列和生成的列。

图 4. DB2 Import - 选择 XML 文档位置

9.最后,可以安排 XML 文档的导入立即执行或重复执行。

图 5. DB2 Import - 导入的调度

正如可以使用 DB2 Import 实用程序导入 XML 文档,可以以相同方式使用命令提示 CLP 导入分界的文件。例如,下面的命令将一个以管道符分界的文件导入表 employee:

清单 10. 导入以管道符分界的文件

IMPORT FROM “D:\db2out\employee.dat” OF DEL MODIFIED BY COLDEL|

METHOD P (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)

MESSAGES “D:\db2out\employee2.log”

INSERT INTO DB2ADMIN.EMPLOYEE

(EMPNO, FIRSTNME, MIDINIT, LASTNAME, WORKDEPT, PHONENO, HIREDATE, JOB, EDLEVEL,

SEX, BIRTHDATE, SALARY, BONUS, COMM);

DB2 Import 实用程序支持两种表锁定模式 —— 离线模式和在线模式。在离线模式下(ALLOW NO ACCESS),不允许对正在导入的表进行访问。离线模式是默认模式,因为在导入开始时会获得一个排他锁。但是,在线模式允许用户在导入进行期间访问数据。这个模式允许以特定的间隔进行提交以避免死锁。LOB 对象可以像一般数据那样导入。对于在多个文件中单独存储的 LOB 文件,需要 LOBSINFILE 文件类型修饰符。DB2 Import 不但能够将数据导入表中,还可以导入层次结构、昵称或视图中。

因为支持各种文件格式,而且 DB2 Import 提供了很强的灵活性,所以有时候需要为这个实用程序提供很长的文件类型修饰符列表。完整的修饰符列表可以在 DB2 9.1 Data Movement Utilities Guide and Reference 上找到。常用的一些修饰符是 codepage、dateformat、timestampformat、reclen 和 coldel。尽管 DB2 Import 很灵活,但是它的速度比不上 DB2 Load。对于大型的表,DB2 Load 是更合适的选择。但是注意,尽管 DB2 Load 速度快,但是它不允许将数据装载进层次结构和昵称中。但是,DB2 Import 也有自己的限制。

完整的 IBM DB2 Express-C 导入限制包括:

依赖表中外键引用的主键不能被替换;只允许追加。

不允许将数据导入系统表或具有结构化类型列的表。

不能将数据导入声明的临时表。

不能通过导入实用程序创建视图;只能创建表。

在从 PC/IXF 文件创建表时,不保留引用约束和外键定义。

导入生成的语句的最大语句大小为 2MB。

不能重新创建包含 XML 列的表。

最后,IBM DB2 Express-C 提供了 API 和示例代码,允许用户编写自己的导入。示例代码是在安装 IBM DB2 Express-C 时附带的。

DB2 Load

DB2 Load 是将大量数据从平面文件、磁带或命名管道装载进 DB2 表的另一种方法。但是,DB2 Load 实用程序不允许在装载期间动态地创建表。换句话说,表及其索引需要在装载前存在。

DB2 Load 有四个阶段:

装载:在这个阶段,数据被写入表中;在将数据装载进表中之后,如果需要的话,还要收集索引键和表统计数据。按照 LOAD 命令中 SAVECOUNT 选项指定的时间间隔建立保存点(一致点)以确保恢复。生成消息,指出在保存点上已经成功地装载了多少个输入行。如果发生故障,可以重新启动装载操作;RESTART 选项会自动地从最近的成功的一致点重新启动装载操作,还可以使用 TERMINATE 选项回滚失败的装载操作。

构建:这个阶段要建立索引。在构建阶段,根据在装载阶段收集的索引键生成索引。索引键在装载阶段进行排序,并收集索引统计数据(如果指定了 STATISTICS USE PROFILE 选项,而且配置文件指出要收集索引统计数据)。这些统计数据与通过 RUNSTATS 命令收集的数据相似。如果在构建阶段发生故障,RESTART 选项会自动地在适当的点上重新启动装载操作。

删除:这个删除阶段会删除表中违反惟一键约束的行。通常,违反惟一键约束的行会记录在异常表中(如果指定了异常表的话),关于被拒绝的行的消息被写入 MESSAGE 选项指定的消息文件。为了确保装载过程成功完成,必须检查这些消息以解决任何问题。这常常要求将纠正后的行插入表中。不要尝试删除或修改装载实用程序创建的任何临时文件。一些临时文件对于删除阶段非常重要。与构建阶段相似,如果在删除阶段发生故障,RESTART 选项会自动地在适当的点上重新启动装载操作。

索引复制:在这个阶段中,将索引数据从一个系统临时表空间复制到原来的表空间。只有在指定了 READ ACCESS 选项的装载操作期间,为索引创建指定了系统临时表空间的情况下,才会执行这个操作。

DB2 Load 支持四种格式:

ASC(非分界的 ASCII 格式)

DEL(分界的 ASCII 格式)

IXF(Integrated Exchange Format,PC 版本),这种文件可以是从同一个或另一个 DB2 表导出的

用户定义的 CURSOR(一种针对 SELECT 或 VALUES 语句声明的游标)。这通常要求用户编写脚本。

与 DB2 Import 相似,DB2 Load 要求授予某些权力和特权。需要 SYSADM 或 DBADM 权力,至少要有 LOAD 权力和相关的特权,见下表:

表 3. DB2 Load 所需的权力和特权

操作权力特权注释 INSERT、TERMINATE 和 RESTART 模式的 LoadLOADINSERTINSERT、TERMINATE 和 RESTART 模式的装载需要 INSERT 特权 REPLACE、TERMINATE 和 RESTART 模式的 LoadLOADINSERT 和 DELETEREPLACE、TERMINATE 和 RESTART 模式的装载需要 INSERT 和 DELETE 特权

可以通过命令行处理程序(CLP)、Control Center 中的 Load 向导或者应用程序编程接口(API)db2Load 调用装载实用程序,

为了演示 DB2 Load 的功能,我们先使用 CLP。输入 db2 ? load可以获得 DB2 Load 的完整命令语法。下面的 清单 11 给出了完整的 DB2 Load 语法。尽管它也可以用于分区的环境,但我们仍然主要关注单分区环境,因为 IBM DB2 Express-C 没有附带 Data Partitioning Feature(DPF)。

清单 11. DB2 Load 语法

LOAD [CLIENT] FROM file/pipe/dev/cursor_name [ {,file/pipe/dev} ... ]

OF {ASC | DEL | IXF | CURSOR}

[LOBS FROM lob-path [ {,lob-path} ... ] ]

[MODIFIED BY filetype-mod [ {filetype-mod} ... ] ]]

[METHOD {L ( col-start col-end [ {,col-start col-end} ... ] )

[NULL INDICATORS (col-position [ {,col-position} ... ] )]

| N ( col-name [ {,col-name} ... ] )

| P ( col-position [ {,col-position} ... ] )}]

[SAVECOUNT n]

[ROWCOUNT n] [WARNINGCOUNT n] [MESSAGES msg-file]

[TEMPFILES PATH pathname]

{INSERT | REPLACE | RESTART | TERMINATE}

INTO table-name [( insert-column [ {,insert-column} ... ] )]

[FOR EXCEPTION table-name [NOUNIQUEEXC NORANGEEXC]]

[STATISTICS {NO | USE PROFILE}]

[{COPY {NO | YES { USE TSM [OPEN num-sess SESSIONS]

| TO dir/dev [ {,dir/dev} ... ]

| LOAD lib-name [OPEN num-sess SESSIONS]}}

| NONRECOVERABLE} ]

[HOLD QUIESCE] [WITHOUT PROMPTING] [DATA BUFFER buffer-size]

[SORT BUFFER buffer-size] [CPU_PARALLELISM n] [DISK_PARALLELISM n]

[INDEXING MODE {AUTOSELECT | REBUILD | INCREMENTAL | DEFERRED}]

[SET INTEGRITY PENDING CASCADE {DEFERRED | IMMEDIATE}]

[ALLOW NO ACCESS | ALLOW READ ACCESS [USE tblspace-name]] [LOCK WITH FORCE]

[[PARTITIONED DB CONFIG] partitioned-db-option [{partitioned-db-option}...]]

filetype-mod:

NOROWWARNINGS, ANYORDER, BINARYNUMERICS, CODEPAGE=x,

DUMPFILE=x, FASTPARSE, NOHEADER, TOTALFREESPACE=x,

INDEXFREESPACE=x, PAGEFREESPACE=x, FORCEIN, IMPLIEDDECIMAL,

PACKEDDECIMAL, NOCHECKLENGTHS, NOEOFCHAR, NULLINDCHAR=x,

RECLEN=x, STRIPTBLANKS, STRIPTNULLS, NODOUBLEDEL, LOBSINFILE,

CHARDELx, COLDELx, DLDELx, DECPLUSBLANK, DECPTx, DATESISO,

DELPRIORITYCHAR, USEDEFAULTS, DATEFORMAT=x, TIMEFORMAT=x,

TIMESTAMPFORMAT=x, ZONEDDECIMAL, KEEPBLANKS, IDENTITYMISSING,

IDENTITYIGNORE, IDENTITYOVERRIDE, GENERATEDMISSING,

GENERATEDIGNORE, GENERATEDOVERRIDE, USEGRAPHICCODEPAGE

partitioned-db-option:

HOSTNAME x, FILE_TRANSFER_CMD x, PART_FILE_LOCATION x, OUTPUT_DBPARTNUMS x,

PARTITIONING_DBPARTNUMS x, MODE x, MAX_NUM_PART_AGENTS x, OMIT_HEADER,

ISOLATE_PART_ERRS x, STATUS_INTERVAL x, PORT_RANGE x, CHECK_TRUNCATION,

MAP_FILE_INPUT x, MAP_FILE_OUTPUT x, TRACE x, NEWLINE, DISTFILE x

接下来,研究如何调用 DB2 Load,从而继续讨论 DB2 Load 的实际使用。同样,有三种调用 DB2 Load 的方法 —— 通过命令行处理程序(CLP)、Control Center 中的 Load 向导或者应用程序编程接口(API)db2Load。例如,为了装载分界的文件,可以发出以下命令(这是比较简单的形式):

清单 12. DB2 Load 命令

LOAD FROM “D:\db2out\employee.dat” OF DEL METHOD P (1, 2, 3, 4, 5, 6, 7,

8, 9, 10, 11, 12, 13, 14)

MESSAGES “D:\db2load\employee.log”

INSERT INTO DB2ADMIN.EMPLOYEE (EMPNO, FIRSTNME, MIDINIT, LASTNAME, WORKDEPT,

PHONENO, HIREDATE, JOB, EDLEVEL, SEX, BIRTHDATE,

SALARY, BONUS, COMM)

COPY NO INDEXING

MODE AUTOSELECT;

尽管命令行方式灵活而且强大,但是在命令提示语法中选择众多的选项是很麻烦的。调用 DB2 Load 的另一个方法是使用 DB2 Control Center,它会以向导驱动的方式为用户提供在线帮助。DB2 Control Center 可以引导用户轻松地完成成功的装载,即使用户不熟悉 DB2 Load 也没关系。在下面的步骤中,将一个分界的文件装载进表 employee 中,从而体会一下如何在 DB2 Control Center 中进行数据装载。

1.选择表 employee 并选择 Load,从而调用 DB2 Load。这时会显示 图 6 所示的屏幕。

注意,这个向导中有八个步骤。但是,可以通过点击 Next 选用默认设置。每个步骤都提供了不同的选项,根据您的装载需求,其中一些选项是必需的。在这个简单的演示中,第一步采用默认的 Append data to a table。在这种模式下,允许用户在装载期间访问数据。点击 Next 继续。

图 6. DB2 Load - 步骤 1. 追加还是替换

2.第二步带领用户选择文件格式(默认格式是 DEL)。在这一步中,选择输入文件和消息文件的位置 —— 本地(即调用 DB2 Load 的地方)还是远程。还可以指定要处理的总行数。点击 Next 继续。

图 7. DB2 Load - 步骤 2. 指定文件位置

3.在这一步中,可以指定 LOB 对象的位置。可以指定标识列和生成列行为。另外,可以选择在装载中包含哪些列。接受默认设置并点击 Next。

图 8. DB2 Load - 步骤 3. 指定 LOB 对象的位置

4.对于索引创建有三个选项:递增式,重新构建,或者让 DB2 Load 自己决定构建索引的最佳方式。有几个应用程序控制级别,而且 DB2 Load 有能力使装载后的性能达到最优。

图 9. DB2 Load - 步骤 4. 索引、应用程序和性能选项

5.在 DB2 Load 运行期间,系统可能会崩溃。为了能够从系统崩溃中恢复,DB2 Load 提供了崩溃恢复选项,使用户能够指定一致点。因为 DB2 Load 在事务期间很少进行日志记录,所以有可能需要进行向前恢复。在这一步中,可以选择可恢复(在这里可以保存备份映像的拷贝),或者选择不可恢复从而不允许在发生故障时进行恢复。

图 10. DB2 Load - 步骤 5. 恢复选项

6.如果您不确定合适的性能参数的话,明智的做法是让 DB2 配置顾问进行选择。在这里可以设置的其他选项是异常表的位置、包含被拒绝的行的异常转储文件以及抑制接收任何警告。

图 11. DB2 Load - 步骤 6. 更多选项

步骤 7 和 8 允许进行调度(就像对 DB2 Import 进行调度一样)。最后一步是总结您已经选择的选项。

最后(但是并非不重要),您应该注意 DB2 Load 有以下限制:

不支持将数据装载进昵称、层次结构、有类型表、声明的临时表、包含 XML 列的表或具有结构化类型列的表。

如果在 LOAD REPLACE 操作期间发生错误,那么表中原来的数据会丢失。保护措施是保留输入数据的拷贝,从而允许在发生故障时重新启动装载操作。

在新装载的行上不激活触发器。装载实用程序并不实施与触发器相关联的业务规则。

最后,为了总结装载实用程序,我们来看看它与 DB2 Import 之间的差异。下表列出了 DB2 Import 和 Load 之间的一些差异:

表 4. DB2 Import 和 Load 之间的差异

特性/功能DB2 ImportDB2 Load注释 速度相当慢高速装载装载的速度可能是在 DB2 Import 和 Load 之间进行选择的主要标准 文件格式支持ASC、DEL、WSF 和 IXF(请参见前面对这些文件格式的解释)ASC、DEL、IXF 和 CURSORDB2 Load 允许使用用户定义的游标,从而为从应用程序装载数据增加了灵活性。注意,DB2 Load 不支持 WSF 数据源主要是平面文件平面文件、磁带和命名管道DB2 Load 还可以使用 Tivoli Storage Manager(TSM) 目标表、视图、层次结构、昵称只能是表DB2 Load 不支持层次结构 并行性支持几乎没有支持DB2 Load 支持 CPU、DISK 和 FETCH 级并行性 索引重建否是如果选择进行索引重建,在 DB2 Load 操作之后就会重新构建所有索引 递增式索引否是DB2 Import 在导入期间逐一插入索引。如果选择递增式索引,在 DB2 Load 操作期间会在现有的索引树上追加索引。另一个选项 Autoselect 让 DB2 决定是进行索引重建,还是递增式地建立索引 保存拷贝否是可以使用 DB2 Load 保存装载的数据的拷贝。这对于 LOAD REPLACE 操作尤其有用 远程客户机否是DB2 Import 只能操作调用 DB2 Import 的客户机上本地的文件。但是,DB2 Load 允许远程客户机装载 可恢复否是DB2 Import 不需要可恢复特性,因为在大多数情况下它用于中小规模的表。尽管如此,它允许指定选项 COMMITCOUNT,从而在发生错误的地方重新启动导入。但主要原因是所有事务都被记入日志。但是,DB2 Load 可以使装载可恢复,因此可以在数据库恢复期间进行前滚。这会将表空间置于备份未决状态。使它们脱离未决状态的惟一方法是完成装载过程 异常表否是在 DB2 Load 中,可以将装载错误定向到异常表中 XML 装载是否当前不支持使用 DB2 Load 装载 XML 数据

DB2 Export

为了使用 DB2 Export 导出数据,首先必须具有 SYSADM 或 DBADM 权力,或者参与导出操作的每个表的 CONTROL 或 SELECT 特权。DB2 Export 支持的文件格式与 DB2 Import 相似;包括 DEL、PC/IXF 和 WSF。正如前面提到的,可以在命令 CLP 中获得命令的完整语法。可以通过发出命令 db2 ? export 获得 DB2 Export 的完整语法。清单 13 列出了完整的 DB2 Export 语法:

清单 13. DB2 Export 语法

EXPORT TO filename OF {IXF | DEL | WSF}

[LOBS TO lob-path [ {,lob-path} ... ] ][LOBFILE lob-file [ {,lob-file} ... ] ]

[XML TO xml-path [ {,xml-path} ... ] ][XMLFILE filename [ {,filename} ... ] ]

[MODIFIED BY {filetype-mod ...}][XMLSAVESCHEMA]

[METHOD N ( column-name [ {,column-name} ... ] )] [MESSAGES message-file]

{select-statement | XQUERY xquery-statement |

HIERARCHY {STARTING sub-table-name |

(sub-table-name [{, sub-table-name} ...])} [WHERE ...] }

filetype-mod:

NODOUBLEDEL, LOBSINFILE, CHARDELx, COLDELx, DLDELx, DECPLUSBLANK

DECPTx, DATESISO, 1, 2, 3, 4, CODEPAGE=x, STRIPLZEROS, NOCHARDEL

可以通过命令行处理程序(CLP)、Control Center 中的 Export 向导或者应用程序编程接口(API)调用 DB2 Export 实用程序。我们来看几个使用命令 CLP 调用 DB2 Export 的示例,从而演示导出功能:

首先,看看典型的分界文件导出是什么样的。清单 14 中的命令显示如何导出表 employee。在默认情况下,使用逗号(,)作为分界符,但是也可以使用支持的其他分界符。

清单 14. DB2 Export - 导出分界的文件

EXPORT TO “D:\db2exp\employee.dat”

OF DEL MESSAGES “D:\db2exp\employee.log” SELECT * FROM DB2ADMIN.EMPLOYEE;

第二个示例演示如何将 LOB 对象导出到两个目录中。这将每个 LOB 放在一个文件中,从而防止第一个目录溢出,溢出的部分将包含在第二个目录中。

清单 15. DB2 Export - 将 LOB 对象导出到多个目录中

EXPORT TO “D:\db2exp\Lobs1\exportLoad.dat” OF DEL

LOBS TO “D:\db2exp\Lobs1”, “D:\db2exp\Lobs2” LOBFILE “Lob1”, “Lob2”

MODIFIED BY LOBSINFILE LOBSINSEPFILES

MESSAGES “D:\db2exp\exportLoad.log”

SELECT * FROM DB2ADMIN.EMP_PHOTO;

在最后一个示例中,我们看看如何导出 XML 文档。以下命令导出 XEmployee 表。每个 XML 文档放在单独的文件中,这些文件的基本名称是 XEmployee。使用以下命令之后,XEmployee.del 包含文档的列表(比如 ,而包含数据的实际文档(比如 XEmployee.001.xml)导出到 XML TO 选项指定的目录中。在以下示例中没有展示使用 XMLSAVESCHEMA 选项保存 XML 模式拷贝。

清单 16. DB2 Export - 将 XML 文档导出到单独的文件中

EXPORT TO “D:\db2XML\XEmployee.del” OF DEL

XML TO “D:\db2XML\data”

XMLFILE “XEmployee”

MODIFIED BY XMLINSEPFILES

MESSAGES “D:\db2XML\XEmployee.log”

SELECT * FROM “ALLAN WH THAM”.XEMPLOYEE;

为了演示如何使用 DB2 Control Center 进行导出,我们看一个导出 XML 文档的示例。

1.右击需要导出的表,并选择 Export。在 DB2 Export 的第一步中,显示输出和消息文件选项。

图 12. DB2 Export - 目标位置

2.在 Columns 选项卡上,指定要导出的 XML 文档的实际路径。还要指定基本名称,也就是在 XEmployee.del 中使用的名称。注意,Place each XML document in a separate file 复选框表示 XMLINSEPFILES 选项。这个选项将单独存储 XML 文档。

图 13. DB2 Export - XML 导出的更多选项

3.最后一个选项卡允许立即运行导出,或者安排导出运行一次或重复运行。

最后,关于 DB2 Export 要记住几点:

除了默认的逗号分界符之外,还可以使用支持的其他分界符。

可以将许多 XML 文档存储在一个文件中,除非设置了 XMLINSEPFILES 文件类型修饰符(这会将输出单独存储在每个文件中)。

在进行导出之前,要确保没有以任何方式锁定要导出的表。

如果要在数据库之间转移数据,那么使用 PC/IXF 格式进行导出。

在导出语句中允许使用表的别名。

不必导出所有列;可以只导出您感兴趣的列。

对于 LOB 和 XML,可以指定溢出路径。

其他工具

除了 DB2 Import、Load 和 Export,DB2 提供的其他实用程序/工具也可以简化数据转移过程。其中一些是内置特性,比如 db2move 和 DB2 Replication(使用 SQL-Rep 的同构复制)。对于高速和异构的复制,可以单独购买 IBM WebSphere Replication Server。对于大量的装载和卸载,可以购买 IBM DB2 High Performance Unload for Multiplatform。IBM DB2 High Performance Unload for Multiplatform. 是一种用于 Linux、UNIX 和 Windows 的高速卸载工具。在数据量非常大的情况下,可以使用这个工具替代导出。这个工具可以从表空间或备份拷贝中卸载 DB2 表。对于希望从 MySQL 迁移到 DB2 Express-C 的客户,可以使用 IBM DB2 Migration Toolkit(MTK),而且这是个免费工具。

余下的几节研究 db2move,这是一个内置的跨平台数据转移实用程序。然后看看用于从 MySQL 迁移到 DB2 Express-C 的 IBM DB2 Migration Toolkit(MTK)提供的一些关键特性。

db2move

作为将表从一个数据库转移到另一个数据库的实用程序,db2move 的优点是能够在导入和导出之间进行选择。它将表导出到 PC/IXF 格式的文件中,然后将这些文件导入或装载回同一机器或另一个平台上的数据库中。因为不同平台之间的硬件体系结构有差异,这会导致备份和恢复的差异,所以目标和源平台上的 DB2 可能不兼容。例如,AIX、HPUX、Sun Solaris 和 PowerPC 上的 Linux 都采用 big endianess,而 IA-64 上的 Linux、AMD64 和 Intel EM64T 上的 Linux 以及 x86 上的 32 位 Linux 采用 small endianess。因此,db2move 被设计成能够跨这些平台转移数据。db2move 的另一个优点是能够根据模式的所有者创建副本。-co 选项允许创建副本模式。

使用 db2move 很容易。它结合使用 DB2 Import、Export 和 Load。语法本身并不复杂,但是一些选项是 Import、Load、Export 或 Copy 特有的。语法如下所示:

清单 17. DB2Move 语法

Usage: “db2move [options]”

is the name of the database.

is one of:

EXPORT - Export all tables that meet the filtering criteria in [options]

(If no [options] specified, export all tables).

Internal staging information is stored in file 'db2move.lst'.

Messages are stored in 'EXPORT.msg'.

IMPORT - Import all tables listed in the staging file 'db2move.lst'.

Messages are stored in 'IMPORT.msg'..

Use the -io option for IMPORT specific actions.

LOAD - Load all tables listed in the staging file 'db2move.lst'.

Messages are stored in 'LOAD.msg'.

Use the -lo option for LOAD specific actions.

COPY - Duplicate a schema(s) into a target database.

Use the -sn option to specify one or more schemas.

See the -co option for COPY specific options.

Use the -tn or -tf option to filter tables in LOAD_ONLY mode.

Messages are stored in 'COPY..msg'

Error only messages in 'COPY..err'

Load messages in 'LOADTABLE..msg'

List of tables that failed Load in 'LOADTABLE..err'

Some of the options available:

-tc Table Definers. Filter on EXPORT

SYSCAT.TABLES.DEFINER

-tn Table Names. Filter on EXPORT

SYSCAT.TABLES.TABNAME COPY

-sn Schema Names. Filter on EXPORT,

SYSCAT.TABLES.TABSCHEMACOPY

-ts Tablespace Names. Filter on EXPORT

SYSCAT.TABLES.TBSPACE

-tf Fully qualified list of EXPORT

table names in COPY

-aw Allow warnings EXPORT

-io IMPORT specific actions.IMPORT

Default is REPLACE_CREATE

(see docs for limitations

of Import create function)

-lo LOAD specific options. LOAD

Default is INSERT

-l

Path to lobfiles. EXPORT,

Default is cwd IMPORT,

LOAD

-u Userid to connect to db.ALL

Default is current user

-p Password to connect to db. ALL

-co COPY specific options. COPY

给出几个实际示例可以更好地说明它的用法:

按照最简单的形式,从数据库 sample 中导出所有表:

清单 18. DB2Move - 导出 Sample 中所有的表

db2move sample export

使用通配符导出某些表:

清单 19. DB2Move - 使用通配符导出表

db2move sample export -tn emp*

将所有表装载进 Sample 数据库中。要确保已经预先创建了这些表:

清单 20. DB2Move - 将所有表装载进 sample 数据库中

db2move sample load -l d:\db2exp

最后,建立 sample 数据库中的 allan 模式的拷贝,并将它复制到 sample1 数据库中。来自 allan 模式的数据被复制到 allan1 中。这个命令还将源数据库 sample 的 allan 模式复制为目标数据库 sample1 中的 allan1。也可以只复制 DDL(DDL_ONLY)和表空间映射(TABLESPACE_MAP)。COPY 模式操作使用 COPYSCHEMA_.MSG 消息文件,而且在工作目录中可以找到 COPYSCHEMA_.err 错误文件。

清单 21. DB2Move - 使用 COPY 选项进行数据转移

db2move sample COPY -sn allan -co TARGET_DB sample1 USER awt USING password

SCHEMA_MAP ((allan,allan1))

对于使用带 COPY 选项的 db2move 来复制模式,有一些限制。它会复制所有允许的模式对象,但是以下类型的对象除外:

表层次结构

分段表(在多分区数据库环境中装载实用程序不支持这种表)

Jar(Java 例程存档)

昵称

视图层次结构

对象特权(创建的所有新对象都具有默认授权)

统计信息(新对象不包含统计信息)

索引扩展(与用户定义的结构化类型相关)

用户定义的结构化类型及其转换函数

IBM DB2 Migration Toolkit(MTK)

尽管 IBM Migration Toolkit 不是专门为从 MySQL 到 DB2 的迁移而设计的,但是可以用于将数据从 MySQL 迁移到 DB2 中。

可以 下载 DB2 Migration Toolkit MySQL 2.0.1.1 的最新更新。

在产品的 README 中可以找到这个版本支持的特性列表和它的文档。DB2 Migration Toolkit MySQL 2.0.1.1 包含以下新特性和改进特性:

支持从 MySQL 4 和 MySQL 5 迁移到:

◦Informix Dynamic Server V9 和更高版本

◦DB2 LUW V8.2 和更高版本

◦DB2 iSeries V5 和更高版本

IBM DB2 Migration Toolkit 2.0.1.1 处于 alpha 测试阶段,它支持 DDL 构造的迁移,比如表、视图、同义词和约束。

对于用 DB2 Migration Toolkit 对 MySQL 4 和 MySQL 5 进行迁移,有以下限制:

在 specify source 选项卡上不支持 IMPORT 选项

不支持触发器和过程/函数

不支持 MySQL 数据类型属性

只支持到 MySQL 数据库的 JDBC 连接

不支持 ENUM 和 SET 数据类型

不支持特殊寄存器(例如,CURRENT_TIMESTAMP)

在默认情况下,MySQL 在时间戳数据类型中存储当前时间戳;DB2 在默认情况下在时间戳数据类型中存储空值

不支持 ON-UPDATE 子句作为默认值

在 UNIX 系统上,不支持使用 LOAD 选项装载 LOB 数据。但是可以使用 IMPORT 选项

不支持提取视图

不支持 AUTOINCREMENT 属性

--------------------------------------------------------------------------------

结束语

本文概述了 MySQL 的数据转移选项,并用一个表对比了 MySQL 的 mysqldump 和 mysqlhotcopy 实用程序。在简短地讨论 MySQL 数据转移之后,本文介绍了 IBM DB2 Express-C 9.1 的数据转移功能。详细讨论了 DB2 Import、Load 和 Export 等实用程序。最后,讨论了一些其他工具,包括内置特性和单独购买的工具,从而说明了在需要数据库/模式复制、高速装载和卸载或者将整个 MySQL 数据库迁移到 DB2 时,有哪些可用工具以及可行的解决方案。

有了这些知识,MySQL DBA 在遇到 IBM DB2 Express-C 数据转移任务时应该有能力做出适当的选择。

篇6:excel数据导入mysql数据库

方法一、

1.在需要导入的数据最后一列,写入一个Excel公式(例子中是“SQL”下面的单元格,“SQL”是不必要的,仅仅是为了看起来方便),

=CONCATENATE(“insert into employee(name,birthday,email,hobby)values('”,RC[-4],“','”,RC[-3],“','”,RC[-2],“','”,RC[-1],“');”)

“)

这样就会生成insert语句,正如你在例子Excel文件中看到的(当你单击SQL下面的单元格时,可以看到公式)。

如果有日期格式使用下面的方面

=CONCATENATE(”insert into employee(name,birthday,email,hobby)values('“,RC[-4],”','“,TEXT(RC[-3],”yyyy-mm-dd hh:mm:ss“),”','“,RC[-2],”','“,RC[-1],”');“)

这里用到了TEXT函数来将日期格式化成mysql能接受的日期字符串

方法二、

假如要把如图所示的Excel表格导入到MySql数据库中,如图:

步骤一:

选取要导入的数据快儿,另外要多出一列,如下图:

步骤二:

将选中的数据快儿拷贝到一个新建的表格工作薄,然后“另存为” -》“文本文件(制表符分割)(*.txt)”,假如存到“D:\data.txt”这个位置里,

如图:

步骤三:

根据要导入的数据快儿建立MySql数据库和表,然后使用命令

load data local infile 'D:\data.txt' into table exceltomysql fields terminated by '\t';

进行导入操作。如下图:

现在数据已经全部导入到MySql里了,

让我们来select一下吧,如图:

到此,数据由Excel到MySql的转换已经完成。

下面说下,数据从MySql到Excel的转化,其过程其实还是借助那个“制表符分割”的文本文件。

将如要将这个表中的男生信息导入到Excel中,可以这样。

select * into outfile 'D:\man.txt' from exceltomysql where xingbie=”男“;

这样,表中所有男生的信息都被输出到以制表符分割,'\n'结尾的文本文件D:\man.txt文件中。

你可以打开Excel,然后选择“数据”->“导入外部数据”->“导入数据”,选中“D:\man.txt”,一路确定就行了。

作者 xyaxlz

篇7:把ACCESS的数据导入到Mysql

在建设网站的过程中,经常要处理一些数据的导入及导出.在Mysql数据库中,有两种方法来处理数据的导出(一般).

1. 使用select * from table_name into outfile “file_name”;

2. 使用mysqldump实用程序

下面我们来举例说明:

假设我们的数据库中有一个库为samp_db,一个表为samp_table.现在要把samp_table的数据导出.则我们可以利用以下方法来实现:

在Mysql提示符下打入select * from samp_table into outfile “file_name”;

在系统命令提示符下打入mysqldump –u root samp_db samp_table >samp.sql

(当然mysqldump有很多选项.如 -d 表示只导出表结构; -t 表示只导入表数据)

如何来处理数据的导入:一般我们在系统命令提示符下打入mysqlimport –u root samp_db samp_table.txt(注意:这个TXT文件名必须以表的名字命名).对于mysqldump导出的数据我们还可以用mysql –u root samp_db < file_name来导入.在Mysql提示符下我们用Load data infile “file_name” into table samp_table.

另外除了以上方法,对于移动后的数据库系统与原系统一致的前提下,我们可以通过文件的拷贝来实现数据的导入与导出.首先我们用mysqladmin –u root variables(在系统命令提示符下)或者用show variables;(在Mysql提示符下)来找到datadir.如在我的环境下,此目录在c:\mysql\data.然后对其中的一些文件进行拷贝.一切ok!

有了以上知识后,我们进入正题:如何把ACCESS的数据导入到Mysql中.

首先我们把数据从ACCESS中导出为文本文件.在导出过程中注意选择好字段分隔符和文本标识符,且查看一下文本文件,确定一个记录是否在同一行上,如不是,则手工把回车键除掉.假如我们导出的文本文件为c:\samp_table.txt.其内容如下:

1,张新化,男

2,江先进,女

接下来我们用mysqlimport –u root –fields-terminated-by=”\,” samp_db samp_table.txt

或者用load data infile “c:\\samp_table.txt” into table samp_table fields terminated by “\,”;

去试一下(注意转义字符),是不是一切ok!如果还不行,请仔细看一下具体命令的帮助.下面列出一些选项:

--fields-enclosed-by=char 指明列值应包括在指定的字符中.通常用引号.缺省时,假定列值不包括在任何字符中.

--fields-escaped-by=char 表示用于转义特殊字符的转义符.缺省时表示无转义符

--fields-terminated-by=char 指定分隔列的字符.缺省时假定列值由制表符分隔.

--lines-terminated-by=str 指定结束输入行的串(可以是多字符的).缺省时假定由换行符终止行.

篇8:CMD下备份MySQL数据库命令

假设mysql 安装在c:盘,mysql数据库的用户名是root,密码是123456,数据库名是database_name,在d:盘根目录下面存放备份数据库,备份数据库名字为backup0713.sql,

备份数据库:

mysqldump -uroot -p123456 database_name>d:/backup20070713.sql

恢复数据库:删除原有数据库,建立数据库,把备份数据库导入,

mysqladmin -uroot -p123456 drop database_name

mysqladmin -uroot -p123456 create database_name

mysql -uroot -p123456 database_name注:在导入备份数据库前,database_name如果没有,是需要创建的;而且与backup20070713.sql中数据库名是一样的才能导入。

篇9:mysql数据复制到access数据库数据库教程

access|mysql|数据|数据库

mysql数据库表sqltable

字段id,name,sex,email

access数据库表accesstable

id,name,sex,email

$connect = mysql_connect(”localhost“,”“,”“);

mysql_select_db(”mydatabase“);

$sql = ”select * from sqltable;

$result = mysql_query($sql};

$connectodbc=odbc_connect(“DSN”,“USERNAME”,“PASSWORD”);

while($row = mysql_fetch_row($result))

{

$sql=“insert into accesstable

values($row[”id“,$row[”name“,$row[”sex“],$row[”email“])”;

odbc_do($connectodbc,$sql);

}

odbc_close($connectodbc);

mysql_close($conect);

?>

【本文版权归作者与奥索网共同拥有,如需,请注明作者及出处】

篇10:MySQL提数据高分页效率

教程贴士:我的这段代码是大数据量时提高分页的效率的测试代码

我的这段代码是大数据量时提高分页的效率的测试代码

--提高分页效率:实现分页时只读取显示数据,需要先在数据库创建数据库“TestForPaging”

use TestForPaging

go

--创建表SomeData

create table SomeData

(

id int primary key,

name varchar(30) null,

description text

)

go

--插入数据

insert into SomeData values(1,'num1','第1条')

go

insert into SomeData values(2,'num2','第2条')

go

insert into SomeData values(3,'num3','第3条')

go

insert into SomeData values(4,'num4','第4条')

go

insert into SomeData values(5,'num5','第5条')

go

--数据条目总数

select count(*) from SomeData

go

--给每条记录添加一个数据级别

select name,description,ROW_NUMBER() over(order by id desc)as dataLevel from SomeData

go

--查看指定的数据级别间的数据条目

select dataLevel,name,description from

(select name,description,row_number() over(order by id desc)as dataLevel from SomeData)

as datawithleverl where dataLevel between 2 and 4

go

--实现查看指定的数据级别间的数据条目的存储过程

create procedure GetDataPaged

(

@startRowIndex int,

@maximumRows int,

@sort varchar

)

AS

--确保指定sort

if len(@sort)=0

set @sort='id'

--带参数的查询

select dataLevel,name,description from

(select name,description,row_number() over(order by @sort desc)as dataLevel from SomeData) AS datawithleverl

WHERE dataLevel >(@startRowIndex*10) AND dataLevel <= (@startRowIndex*10 + @maximumRows)

go

小技巧:用批处理对MySQL进行数据操作数据库教程

问题分析与解决培训总结

确保PHP应用程序的安全[2]WEB安全

Discuz论坛宣传与优化技巧概述

linux当mysql以root权限登录时提权网站安全

基于XMLSchema的地理信息元数据模式及存储映射研究

调优日志切换(Tuning Log Switches)数据库教程

如何让系统自动备份网站数据经验

了解一下NULLs怎样影响IN和EXISTS数据库教程

php实习报告

如何保护MySQL 中的重要数据
《如何保护MySQL 中的重要数据.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【如何保护MySQL 中的重要数据(共10篇)】相关文章:

如何恢复MYSQL实体文件MYI,MYD到数据库中数据库教程2022-05-04

和LNMP相比,LNMPA是否效率更高?linux服务器应用2022-07-17

MySQL文件系统先睹为快数据库2022-12-06

唯品会php面试题2022-07-26

AMH 4.1 虚拟主机面板 安装配置教程linux操作系统2024-02-05

Windows下安全模式的使用方法2023-06-23

不要让环境流泪作文2024-01-14

拼音处理数据库教程2022-09-24

php 面试题2022-06-12

跟踪标记全攻略数据库教程2022-09-26

点击下载本文文档