标签: firebird

单行表的术语?

是否有特定术语来描述与基数为 1 的关系?

我特别想到 RDBMS“特殊”单行表,例如DUAL(Oracle)、SYSIBM.SYSDUMMY1(DB2、Derby) 和RDB$DATABASE(Interbase、Firebird)。

oracle db2 terminology firebird

18
推荐指数
1
解决办法
448
查看次数

使用复杂标准最小化索引读取

我正在优化工作票的 Firebird 2.5 数据库。它们存储在一个声明如下的表中:

CREATE TABLE TICKETS (
  TICKET_ID id PRIMARY KEY,
  JOB_ID id,
  ACTION_ID id,
  STATUS str256 DEFAULT 'Pending'
);
Run Code Online (Sandbox Code Playgroud)

我通常想找到第一张尚未处理且处于Pending状态的票证。

我的处理循环是:

  1. 取回第一张票在哪里 Pending
  2. 使用 Ticket 工作。
  3. 更新工单状态 => Complete
  4. 重复。

没有什么太花哨的。如果我在这个循环运行时观察数据库,我会看到每次迭代的索引读取次数增加。据我所知,性能似乎并没有严重下降,但是我正在测试的机器非常快。但是,我从我的一些用户那里收到了性能随时间下降的报告。

我在 上有一个索引Status,但它似乎仍然在Ticket_Id每次迭代时向下扫描列。好像我忽略了一些东西,但我不确定是什么。像这种预期的索引读取次数是否会不断攀升,还是索引在某些方面表现不佳?

-- 编辑评论 --

在 Firebird 中,您可以限制行检索,例如:

Select First 1
  Job_ID, Ticket_Id
From
  Tickets
Where
  Status = 'Pending'
Run Code Online (Sandbox Code Playgroud)

因此,当我说“第一”时,我只是要求它提供一个有限的记录集,其中Status = 'Pending'.

performance index firebird

12
推荐指数
1
解决办法
516
查看次数

在 asc 和 desc 两个方向上创建索引

在过去的几周里,我一直在对旧的 Firebird 数据库发火。由于各种原因,这个数据库很糟糕,但我注意到的一件事是每个表每个字段都有两个索引;每一个都有一个片段,一个按顺序,一个按顺序。ascdesc

除了为每个表中的每个字段都有一个索引的重要性之外,它让我思考 - 单段索引有两个具有相同索引段但一个 indesc一个 in 的索引有什么优势asc吗?有什么可以得到的,或者现代 DBMS 是否会简单地使用asc索引并从头开始并在需要时向后工作?

index firebird

9
推荐指数
2
解决办法
2366
查看次数

修复损坏的 Firebird 数据库

我有一个 200 GB 的 Firebird 数据库(使用 Firebird 2.1.3 创建,目前运行的是 2.1.5),它似乎已损坏。当我尝试进行备份时,我得到:

数据库文件出现损坏 <>
错误的页面类型
页面 0 是错误的类型(预期 0 发现 1)
gds_get_segment 失败

gfix 以一个结尾

僵局

我该如何解决?

更新

虽然这个特定的数据库不是固定的,但我想解决方案是尝试 IB FirstAID。

推荐阅读:

corruption firebird

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

火鸟监控台

我正在使用 Firebird 2.1.1 数据库,并开始阅读有关监控表的信息。

我试图以某种方式实时查看每个客户端在数据库中执行的查询。

我看了看MON$STATEMENTS表格,但没有提供太多信息。我本来希望表格中有更多内容。

显示表格时 Flamerobin 的屏幕截图

我是不是找错地方了,还是我不明白 Firebird 监控表的目的/用途?

firebird

8
推荐指数
1
解决办法
9219
查看次数

Firebird 3.0 中的身份验证错误

今天,我虽然想尝试一下 Firebird 3.0,但由于某种原因,我似乎无法安装它 - 至少不能以一种可以从 JDBC 应用程序连接的方式。

我所做的就是关注这篇文章。这是发生的事情:

c:\etc\Firebird30>gsec -add sysdba -pass masterkey

c:\etc\Firebird30>启动 firebird.exe -a -m

c:\etc\Firebird30>isql
使用 CONNECT 或 CREATE DATABASE 指定数据库
SQL> 创建数据库 "localhost:c:\temp\mydbfb3.fdb" 用户 "sysdba" 密码 "masterkey";
语句失败,SQLSTATE = 08006
从连接读取数据时出错。
查询>

现在“本地”创建数据库的工作原理是:

SQL> 创建数据库 "c:\temp\mydbfb3.fdb" 用户 "sysdba" 密码 "masterkey";
SQL> 提交;
查询>

但在这种情况下,当我从 JDBC 应用程序(仍然是“本地主机”)连接时,我收到错误消息(使用 sysdba/masterkey 登录)

GDS 异常。335544472. 您的用户名和密码未定义。请您的数据库管理员设置 Firebird 登录。
原因:您的用户名和密码未定义。请您的数据库管理员设置 Firebird 登录。

我仔细检查(不止一次)JDBC 应用程序中的用户名和密码是 sysdba/masterkey。

从命令行我确实可以访问新创建的数据库:

SQL> 连接 'c:\temp\mydbfb3.fdb';
数据库:'c:\temp\mydbfb3.fdb'
SQL> 创建表 foo (bar 整数);
SQL> 插入 foo 值 (1); …

firebird

7
推荐指数
1
解决办法
9706
查看次数

是否可以在 Firebird 中创建具有升序和降序列的单个索引?

例如,一些等价于

CREATE INDEX Listing_Date_Idx ON ACTIVITY(Listing,Date_ DESC,Time_ DESC);
Run Code Online (Sandbox Code Playgroud)

index firebird

7
推荐指数
1
解决办法
249
查看次数

如何检查 Firebird 上是否存在约束?

我即将发布一个脚本,它将一次更新许多 Firebird 数据库。有些没有这个约束,所以我想在我尝试删除它之前检查约束是否存在。

ALTER TABLE PROCESS_CATEGORY DROP CONSTRAINT INTEG_669;
Run Code Online (Sandbox Code Playgroud)

firebird

4
推荐指数
1
解决办法
7115
查看次数

使用 WHERE NOT IN 子选择子句提高性能

在以下查询中,我必须为每个客户计算交易。但是,我必须从结果集中完全排除交易时间超过一年的客户。

查询优化器不应该足够聪明,只为每个客户评估一次存在吗?

--Count transactions on customers that are less than 1 year old

SELECT t1.CUSTID, COUNT(*)
FROM CUST_TRX t1
WHERE NOT EXISTS ( 
  SELECT FIRST 1 1 
  FROM CUST_TRX t2 
  WHERE 
    t2.CUSTID = t1.CUSTID AND
    t2.DATED < CURRENT_DATE - 365
  GROUP BY t2.CUSTID
)
GROUP BY t1.CUSTID
Run Code Online (Sandbox Code Playgroud)

我的查询计划中没有自然。此查询的执行就像数据库为每个事务运行存在子句,而不是为每个客户运行它。如果我删除GROUP BY子查询中的,则性能相同。

有没有更好的方法来做到这一点,以便我可以从数据库中获得更好的性能?SELECT如果可能的话,希望一个简单的查询能够避免 CTE(这会带来其他挑战)。

由于其他GROUP BY条件(此处未显示),我无法简单地检查MIN(DATED),我确实需要执行另一个查询。

performance execution-plan subquery firebird query-performance

4
推荐指数
1
解决办法
7679
查看次数

与 SQLite 相比,Firebird COUNT 非常慢

过去几个月我一直在使用 Firebird,今天一位客户抱怨性能问题。

我检查了客户的数据库,他们在一张表中有 167,77,216 行。因此,我将该表克隆到另一个空数据库中,并加载虚拟记录并使用简单的查询进行测试

select count(journal_id) from acc_journal
Run Code Online (Sandbox Code Playgroud)

花了14.28秒。

之后我创建了一个 SQLite 数据库并加载了这些数据,花了 2.216 秒。

这是 Firebid 的本质还是我错过了什么?

火鸟表结构:

CREATE TABLE ACC_JOURNAL (
  JOURNAL_ID       INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL,
  ACCOUNT_HEAD_ID  INTEGER,
  REF_ID           INTEGER,
  REF_TYPE         VARCHAR(20),
  DESCRIPTION      VARCHAR(512),
  DEBIT            DECIMAL(18,4),
  DEBIT_EX         DECIMAL(18,4),
  CREDIT           DECIMAL(18,4),
  CREDIT_EX        DECIMAL(18,4),
  CURRENCY_ID      INTEGER,
  STATUS           VARCHAR(20),
  EX_RATE          DECIMAL(18,4),
  ENTRY_DATE       VARCHAR(20),
  ENTRY_TIME       VARCHAR(20),
  BRANCH_CODE      VARCHAR(20),
  LAST_SYNCED      VARCHAR(20),
  LAST_UPDATED     DECIMAL(18,4),
  ENTRY_DATE2      VARCHAR(20),
  /* Keys */
  PRIMARY KEY (JOURNAL_ID)
);
Run Code Online (Sandbox Code Playgroud)

SQLite表结构:

CREATE TABLE ACC_JOURNAL (
    ACCOUNT_HEAD_ID INTEGER, …
Run Code Online (Sandbox Code Playgroud)

firebird

4
推荐指数
1
解决办法
985
查看次数

如何设置一列以立即获取日期?

嗨,我有一个名为 datenow 的示例表,并使用以下内容在弗拉罗宾上创建我的表,以便在添加条目时自动获取今天的日期。

CREATE TABLE "DATENOW"
(
  ID Char(8) NOT NULL,
  "Start_Date" Char(10),
  "Client_Name" Varchar(30),
  BALANCE Integer,
  select cast('Now' as date) from rdb$database
  CONSTRAINT PK_datenow PRIMARY KEY (ID)
);

GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE
 ON "datenow" TO  SYSDBA WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)

还尝试插入这些 sql 语句

select date 'Now' from rdb$database
select time 'now' from rdb$database
select timestamp 'NOW' from rdb$database
Run Code Online (Sandbox Code Playgroud)

但我无法生成表,也无法确定将 sql 语句放在哪里或要做什么才能获得今天自动获取日期的列

firebird

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

火鸟 2.5。视窗 8.1。无法连接到任何数据库!为什么?

我正在尝试使用 FireBird 数据库引擎。

操作系统:Windows 8.1 x64(启用SmartScreen,启用UAC,安装自定义防病毒软件(带防火墙))

FireBird:版本 2.5,作为 SuperServer 安装,作为没有监护人的应用程序。

我正在尝试使用许多应用程序来管理这个引擎,例如 FlameRobin 或 FireBird Maestro。

首先:
安装db后说,当我尝试检索服务器版本时,在windows目录中找不到“firebird.msg”。

好的。我将它从程序文件复制到系统目录。

第二个(致命):
我无法连接到我的数据库!

Firebird Maestro 说,当我尝试连接到创建的数据库时:
在此处输入图片说明

或 FlameRobin(为“localhost”选择上下文菜单“检索服务器版本”):
在此处输入图片说明

我什么都没变 从未安装过 firebird 数据库。使用默认用户 (SYSDBA) 和密码 (masterkey),以任何敏感度进行尝试。

今天,我尝试在 Windows Server 2003 上安装 FireBird,并在 FlameRobin 中执行一些操作,一切正常!

为什么数据库在 Windows 8.1 下不起作用?

installation firebird windows-8

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

如何在 SQL (Firebird) 中获取下周的日期?

我想使用 SQL 语句获取日期。例如,如果日期是“2018-08-07”输出,则应返回:“2018-08-14”(一周后)。然后我将获取这些日期之间的总行数。

SELECT count(*) FROM orders  WHERE dates BETWEEN '2018-08-07'  AND 
DATEADD(day,7,'2018-08-07');
Run Code Online (Sandbox Code Playgroud)

但是,由于 dateadd() 函数,我收到此错误:

SQL Error [335544634] [42000]: Dynamic SQL Error; SQL error code = -104; Token unknown - line 1, column 1; DATEADD [SQLState:42000, ISC error code:335544634]
Run Code Online (Sandbox Code Playgroud)

select firebird date

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