标签: sybase-sql-anywhere

Sql Anywhere 11:恢复增量备份失败

我们想在完整备份后创建远程增量备份。这将使我们能够在发生故障时进行恢复,并使用 SQL Anywhere 网络服务器启动另一台具有尽可能接近实时备份的机器。

我们正在做一个完整的备份如下:

dbbackup -y -c "eng=ServerName.DbName;uid=dba;pwd=sql;links=tcpip(host=ServerName)"
    c:\backuppath\full
Run Code Online (Sandbox Code Playgroud)

这会备份数据库和日志文件,并且可以按预期恢复。对于增量备份,如果有多个增量备份,我已经使用重命名方案尝试了实时和增量事务日志:

dbbackup -y -t -c "eng=ServerName.DbName;uid=dba;pwd=sql;links=tcpip(host=ServerName)"
    c:\backuppath\inc

dbbackup -y -l -c "eng=ServerName.DbName;uid=dba;pwd=sql;links=tcpip(host=ServerName)" 
    c:\backuppath\live
Run Code Online (Sandbox Code Playgroud)

但是,在将事务日志应用于还原时,将事务日志应用于数据库时总是收到错误消息:

10092:无法找到事务日志中引用的表的表定义

事务日志恢复命令是:

dbeng11 "c:\dbpath\dbname.db" -a "c:\backuppath\dbname.log"
Run Code Online (Sandbox Code Playgroud)

该错误没有指定它找不到哪个表,但这是一个受控测试,没有创建或删除任何表。我插入几行然后在尝试恢复之前启动增量备份。

有谁知道在 Sql Anywhere 11 上进行增量备份和还原的正确方法吗?

更新:考虑可能与目标数据库的复杂性有关,我做了一个新的空白数据库和网络服务。然后添加了一个包含两列的表格并插入了几行。进行完整备份,然后插入和删除更多行并提交事务,然后进行增量备份。在恢复完整备份后尝试应用事务日志的增量备份时,这也失败并出现相同的错误...

编辑:

您可以点击此链接查看相同的问题,并提供更多关于 SA 的反馈:http : //sqlanywhere-forum.sybase.com/questions/4760/restoring-incrementallive-backup-failure

backup restore sybase-sql-anywhere

16
推荐指数
1
解决办法
1594
查看次数

将逗号分隔的字符串字段拆分/分解为 SQL 查询

我有场 id_list='1234,23,56,576,1231,567,122,87876,57553,1216'

我想用它来搜索IN这个领域:

SELECT * 
FROM table1
WHERE id IN (id_list)
Run Code Online (Sandbox Code Playgroud)
  • idinteger

  • id_listvarchar/text

但是这样就行不通了,所以我需要以某种方式拆分id_list为选择查询。

我应该在这里使用什么解决方案?我正在使用 T-SQL Sybase ASA 9 数据库 (SQL Anywhere)。但是这样就行不通了,所以我需要以某种方式拆分id_list为选择查询。

我看到的方式是使用while循环创建自己的函数,并根据分隔符位置搜索拆分每个元素提取,然后将元素插入到临时表中,该函数将作为结果返回。


对 Sebastian Meine 回答及其解决方案的评论:

Sybase SQL Anywhere 9

  • sa_split_list 系统程序在这里不存在,所以它不起作用

  • CAST 效果很好

Sybase SQL Anywhere 12

  • sa_split_list 系统程序存在并且运行良好

  • CAST 效果很好

对于 Sybase SQL Anywhere 9,我进行了 sa_split_list 系统过程替换:

CREATE PROCEDURE str_split_list(in str long varchar, in delim char(10) default ',')
RESULT(
  line_num integer,
  row_value long varchar)
BEGIN
  DECLARE str2 …
Run Code Online (Sandbox Code Playgroud)

sybase t-sql sybase-sql-anywhere string-splitting

5
推荐指数
1
解决办法
3万
查看次数

如何在 Linux 上通过 ODBC 配置从 Sybase IQ 访问 Sybase Anywhere 的连接

我正在尝试通过 ODBC 驱动程序从 IQ16 访问 ASA16 服务器。两台服务器都安装在同一个 Linux 机器上。

我已经安装unixodbc-bin并添加了一个文件 .odbc.init 到运行数据库的用户的家中:

[mes_input]
Driver=/opt/sqlanywhere16/lib64/libdbodbc16_r.so
uid=dba
pwd=SQL
EngineName=mes_input
CommLinks=tcpip(host=127.0.0.1;port=49152)
AutoStop=no
DatabaseName=mes_input
Run Code Online (Sandbox Code Playgroud)

ASA 在那个盒子上的 49152 上运行;IQ 运行默认值 2638。

另外,我在接口文件锁定中添加了一个条目,如下所示:

mes_input
        master tcp ether myserver 49152
        query tcp ether myserver 49152
Run Code Online (Sandbox Code Playgroud)

回到 IQ,我可以通过 Sybase Central 添加远程服务器以及此框中的表。还测试连接并显示没有错误。

但是当我现在尝试通过例如从 ASA 复制一些数据时

INSERT locale_table LOCATION 'mes_input.mes_input' 'SELECT * FROM table'
Run Code Online (Sandbox Code Playgroud)

我越来越:

Connectivity libraries cannot be found (check your dynamic library
search path).  Selects from attached databases are not possible without
these libraries.  
-- (hqmlib/hqm_cpm.cxx …
Run Code Online (Sandbox Code Playgroud)

sybase odbc sybase-sql-anywhere sybaseiq

5
推荐指数
1
解决办法
2087
查看次数

使用 SyBase 将数据从一个数据库导入和导出到另一个数据库需要很长时间

为了更新数据库(Sybase Adaptive Server Anywhere 8),我从客户端计算机上的一个数据库中获取所有数据并使用

SELECT * FROM tabelName OUTPUT TO 'C:\path' FORMAT ASCII DELIMITED BY ';';
Run Code Online (Sandbox Code Playgroud)

然后我使用这些文件来更新另一个连接到服务器的数据库,方法是制作临时表,检查是否缺少任何内容,然后删除临时表。

INPUT INTO tempTable FROM 'C:\path' FORMAT ASCII DELIMITED BY ';';

INSERT INTO mainTable 
SELECT * 
FROM tempTable 
WHERE id NOT IN (SELECT id FROM mainTable);

DROP TABLE tempTable;
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有更好的方法来做到这一点,因为两个表需要很长时间来导出和导入数据(尽管它们确实有大量的列和数据,但仍然和大量的数据我的意思是〜100列和约 100,000 行)。这尤其奇怪,因为另一个具有相似数据量的表通过得非常快(尽管它的列确实较少)。需要一段时间的两个表每秒读取约 1000 个数据,而其他表要快得多。

每个客户的笔记本电脑上都有 database.db 文件。他们获取了一些数据并需要提交它但没有连接,因此他们使用自己的 .db 文件并稍后更新服务器上的文件。

获取 SQL 定义可能很困难,因为表是在前一段时间制作的,我不知道如何获取它们。目标数据库是保存所有数据的数据库,而源数据库是未连接且可在需要时离线使用的数据库。

一些建议,提示将不胜感激。

export sybase import sybase-sql-anywhere

3
推荐指数
1
解决办法
2392
查看次数

同一张表的相关子查询,只有一个别名

我有这样的查询

SELECT *
FROM my_table
WHERE ... AND id IN (SELECT t2.id
                     FROM my_table t2
                     WHERE id = t2.id AND ... );
Run Code Online (Sandbox Code Playgroud)

我知道在这个例子中我可以组合这两个WHERE子句并且不使用子查询,但这不是重点。

此查询在我使用的 DBMS(SQL Anywhere 16)上完美运行,但我想知道id在子查询中my_table.id从主查询引用的事实是否是标准行为,或者我是否只是幸运。

链接或参考 RFC 或任何官方文件表示赞赏:)

subquery sybase-sql-anywhere

2
推荐指数
1
解决办法
2万
查看次数