Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92123110
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Sybase

2008-04-10 21:09:39

  来源:赛迪网    作者:Sybase

重建数据库(不整理碎片)

您可参照以下步骤来执行一个不整理磁盘碎片的重建任务。

1、 关闭SQL Anywhere 和Adaptive Server Anywhere 数据库服务器因为版本10 的dbunload

实用工具不能针对运行在较早版本数据库服务器上的数据库工作。例如:

dbstop -c "DBF=mydb.db;UID=DBA;PWD=sql"

2、 确保版本10 的实用工具在系统路径中优先于别的工具。

3、 使用dbunload 实用工具创建一个reload.sql 文件。例如:

dbunload -c "connection-string" directory-name

4、 使用初始化工具(dbinit)创建一个新数据库。或在Sybase Central 中创建一个新数据库。例

如:

dbinit new.db

5、使用Interactive SQL 连接新数据库:

dbisql -c "DBF=new.db;UID=DBA;pwd=sql"

6、 执行以下命令将磁盘空间加入数据库中以便将数据加载。请务必增加足够大的磁盘空间以

容纳数据。磁盘空间必须是连续的,这样可以提高加载的性能。例如:

ALTER DBSPACE system 
ADD 200MB

7、 在Interactive SQL 中将reload.sql 应用到数据库中。

dbisql -c "DBF=new.db;UID=DBA;pwd=sql" reload.sql

已知问题

如果在运行dbunload 实用工具或卸载向导的过程中重建失败,您可使用以下步骤来帮助

判断失败原因:

1、 运行使用-n 选项的dbunload 命令:

dbunload -c "connection-string" -n directory-name

2、创建新的,空白的版本10 数据库

dbinit test.db

3、 将reload.sql 应用至空白的数据库中:

dbisql -c "DBF=test.db;UID=DBA;pwd=sql" reload.sql
 

4、 根据将reload.sql 文件应用到新数据库的消息,酌情修改reload.sql 或原始数据库。

以下表格列出了可能导致重建失败的原因和其解决办法。

已知问题:

如果表名有对象拥有者前缀时,存储过程或触发

器语句中的DECLARE LOCAL TEMPORARY

TABLE 语句产生表达式错误。

解决办法:

去掉对象拥有者。

已知问题:

如果CREATE TRIGGER 语句不包含触发器依

赖表的拥有者,而出现“Table 'table-name' not

found”错误的。

解决办法:

将表名加上对象拥有者前缀。

已知问题:

如果一个对象名称(例如表、列、变量或参数名)

与最新版本的SQL Anywhere 保留字相关(例如

NCHAR),则加载失败。例如:

CREATE PROCEDURE p( ) 
BEGIN 
DECLARE NCHAR INT; 
SET NCHAR = 1; 
END

解决办法:

将使用的保留字替换成别的名称。对于变量,前

缀的@字符通常可用来避免命名冲突。详情请参

阅SQL Anywhere 文档的“保留字”。

已知问题:

如果数据库是被版本9 或更早版本的dbunload

卸载的,则reload.sql 文件中包含了对

ml_add_property 系统过程的调用,但这个过程

在版本10 中不存在

解决办法:

请使用版本10 的卸载工具。

已知问题:

如果数据库是被版本9 或更早版本的dbunload

卸载的,则使用T-SQL 书写的外连接(OUTER

JOINS, *=或者=*)所创建的视图可能不会被正确

加载:

解决办法:

在加载脚本中加入以下行:

SET TEMPORARY 
OPTION tsql_outer_joins='on'

您必须后续使用T-SQL 重写视图。

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