如何在 NationalityCode 字段的现有数据前添加零以使长度为 5 ?
在提交事务之前,如果 #2 行中间某处断电,那么如何可以肯定地说以下操作列表将永远不会反映在 DB 中?
#1 begin transaction
#2 delete record in table A that cascade deletes another record in table B
#3 update another record in table C
#4 commit transaction
我有一个模糊的回忆,Firebird 的 isql 实用程序在某些情况下会与数据库建立独占连接,这意味着任何其他连接尝试都将被拒绝。
我找不到有关此的信息。
谁能解释在哪些情况下会发生这种情况,特别是我如何确保它不会发生?
我的预期用途是在计划任务中执行一些命令/查询,并且我不想冒在此任务执行时阻塞其他数据库工作的风险。
从一些简单的测试来看,我似乎得到了一个独占连接,即当没有其他连接存在时,不允许其他连接。反之,如果isql连接时还有其他连接,isql的连接不会阻塞其他连接。
我在超级服务器模式下使用 Firebird 3.0.4 和 FlameRobin 对此进行了测试,对 isql 和 FlameRobin 连接使用相同的数据库别名。别名是使用绝对本地文件路径定义的。
我是否应该包含主机和端口以确保 isql 始终通过超级服务器连接(允许其他连接)而不是直接打开文件(阻止其他连接)?
我已经尝试了几乎所有方法来让 Arch Linux 下的 Firebird v2.5 连接到现有的 .fdb 数据库而没有收到错误消息:
*** IBPP::SQLException ***
Context: Database::Connect
Message: isc_attach_database failed
SQL Message : -902
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements
Engine Code : 335544831
Engine Message :
Use of database at location /home/tomay/Firebird/GEA.fdb is not allowed by server configuration
- 我已将用户“ tomay ”添加到“ firebird ”组中
- 我已将用户“ firebird ”添加到组“ tomay ”中
[tomay@tomay-pc ~]$ id tomay
uid=1000(tomay) gid=1001(tomay) groups=1001(tomay),998(wheel),991(lp),3(sys),90(network),98(power),1000(autologin),184(firebird)
[tomay@tomay-pc ~]$ id firebird
uid=184(firebird) gid=184(firebird) groups=184(firebird),1001(tomay)
- 我已将 ' /home/tomay/Firebird/ ' 目录权限更改为 ' firebird ' 用户和 ' firebird ' 组。
- 我试过' isql-fb '、' FlameRobin '和' DBeaver '。
- 我编辑了“ /etc/firebird/firebird.conf ”如下:
#######################################
#
# Firebird configuration file
#
# Comments
# --------
# The # character is used for comments and can be placed anywhere on a
# line. Anything following the # character on a line is considered a
# comment.
#
# Examples:
#
# # This is a comment
# DefaultDbCachePages = 2048 # This is an end-of-line comment
#
# Entries
# -------
# The default value for each entry is listed to the right of the "=".
# To activate an entry, remove the leading "#"s and supply the desired
# value.
#
# Please note, a number of the values are specified in **Bytes** (Not KB).
# Accordingly, we have provided some simple conversion tables at the bottom
# of this file.
#
# There are three types of configuration values: integer, boolean and string.
#
# Integer
# --------
# Integers is what they sound like, an integral value. Examples:
# 1
# 42
# 4711
#
# Boolean
# -------
# Boolean is expressed as integer values with 0 (zero) being "false" and
# non-zero is taken to mean "true". For consistency we recommend you
# only use 0/1.
#
# String
# ------
# Strings are also what they sound like, strings. Examples:
# RootDirectory = /opt/firebird
# RemotePipeName = pipe47
#
#
# Portions of this file have been reproduced/made available with the
# permission of Ann Harrison @ IBPhoenix.
#
#######################################
# ==================================
# Settings for all platforms/engines
# ==================================
#
# ----------------------------
# Specify the root directory under which Firebird is installed.
# Can be used to override the OS-specifically determined one.
#
# Type: string
#
#RootDirectory =
# ----------------------------
# Database Paths/Directories
#
# DatabaseAccess may be None, Full or Restrict. If you choose Restrict,
# provide ';'-separated trees list, where database files are stored.
# Relative paths are treated relative to RootDirectory entry
# (see above). Default value 'Full' gives full access to all files
# on your site. To specify access to specific trees, enum all required
# paths (for Win32 this may be something like 'C:\DataBase;D:\Mirror',
# for unix - '/db;/mnt/mirrordb'). If you choose 'None', then only
# databases listed in aliases.conf can be attached.
#
# Note: simple quotation marks shown above should *NOT* be used when
# specifying values and directory path names. Examples:
#
# DatabaseAccess = None
# DatabaseAccess = Restrict C:\DataBase
# DatabaseAccess = Restrict C:\DataBase;D:\Mirror
# DatabaseAccess = Restrict /db
# DatabaseAccess = Restrict /db;/mnt/mirrordb
# DatabaseAccess = Full
#
# UNCONTROLLED DATABASE ACCESS MAY COMPROMISE YOUR SYSTEM!
# IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
# DATABASE LOCATIONS!
#
# Type: string (special format)
#
DatabaseAccess = None
# ----------------------------
# External File Paths/Directories
#
# ExternalFileAccess may be None, Full or Restrict. If you choose
# Restrict, provide ';'-separated trees list, where external files
# are stored. Relative paths are treated relative to RootDirectory entry
# (see above). Default value 'None' disables any use of external files
# on your site. To specify access to specific trees, enum all required
# paths (for Win32 this may be something like 'C:\ExternalTables',
# for unix - '/db/extern;/mnt/extern').
#
# NOTE: THE EXTERNAL TABLE ENGINE FEATURE COULD BE USED TO COMPROMISE
# THE SERVER/HOST AS WELL AS DATABASE SECURITY!!
#
# IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
# EXTERNAL TABLE LOCATIONS!
#
# Type: string (special format)
#
#ExternalFileAccess = None
# ----------------------------
# External Function (UDF) Paths/Directories
#
# UdfAccess may be None, Full or Restrict. If you choose
# Restrict, provide ';'-separated trees list, where UDF libraries
# are stored. Relative paths are treated relative to RootDirectory entry
# (see above).
#
# Default value 'Restrict UDF' provides the same restrictions
# as in FB 1.0. To specify access to specific trees, enum all required
# paths (for Win32 this may be something like 'C:\ExternalFunctions',
# for unix - '/db/extern;/mnt/extern').
#
# # For this build Restrict UDF means Restrict /usr/lib/firebird/UDF
#
# NOTE: THE EXTERNAL FUNCTION ENGINE FEATURE COULD BE USED TO COMPROMISE
# THE SERVER/HOST AS WELL AS DATABASE SECURITY!!
#
# IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
# EXTERNAL FUNCTION LOCATIONS!
#
# Type: string (special format)
#
#UdfAccess = Restrict UDF
#UdfAccess = None
# ----------------------------
# Temporary directories
#
# Provide ';'-separated trees list, where temporary files are stored.
# Relative paths are treated relative to RootDirectory entry
# (see above). Default value is determined using FIREBIRD_TMP,
# TEMP or TMP environment options. Once the first specified
# directory has no available space, the engine will switch to the
# next one, and so on.
#
# E.g.:
# TempDirectories = c:\temp
# or
# TempDirectories = c:\temp;d:\temp
#
# Type: string (special format)
#
#TempDirectories =
# ----------------------------
# Legacy hash makes possible use of old security.fdb
# after running misc/upgrade/security_database.sql.
# If you want to disable logons with old passwords
# after users' migration, set it to 0 (false).
# Makes no difference when used with original
# security2.fdb - it can't contain DES hash.
#
# Type: boolean
#
#LegacyHash = 1
# ----------------------------
# Which authentication method(s) should be used.
# "native" means use of only traditional interbase/firebird
# authentication with security database.
# "trusted" (Windows Only) makes use of window trusted authentication,
# and in some aspects this is the most secure way to authenticate.
# "mixed" means both methods may be used.
#
# Type: string
#
#Authentication = native
# ----------------------------
# Trace configuration file for system audit
#
# Empty value means that system audit is turned off.
#
# Type: string
#
#AuditTraceConfigFile =
# ----------------------------
# Maximum summary size of each user trace session's log files in MB.
# When log files size reach this limit, trace session automatically
# suspends until interactive user service read and delete some log files.
#
# Type: integer
#
#MaxUserTraceLogSize = 10
# ----------------------------
# Number of cached database pages
#
# This sets the number of pages from any one database that can be held
# in cache at once. If you increase this value, the engine will
# allocate more pages to the cache for every database. By default
# SuperServer allocates 2048 pages for each database whilst Classic
# and SuperClassic allocate 75 pages per client connection per database.
#
# Type: integer
#
#DefaultDbCachePages = 2048
# ----------------------------
# Disk space preallocation
#
# Sets the amount of preallocated disk space in bytes. Disk space
# preallocation allows to reduce physical file fragmentation and to make
# database work in out of disk space condition. With preallocation enabled,
# engine allocates 1/16nth of already allocated disk space at a time but
# not less than 128KB and no more than DatabaseGrowthIncrement (128MB by
# default). To disable preallocation set DatabaseGrowthIncrement to zero.
# Shadow database files are not preallocated.
#
# Type: integer
#
#DatabaseGrowthIncrement = 134217728
# ----------------------------
# File system cache threshold
#
# The threshold value that determines whether Firebird will use file system
# cache or not. File system caching is used if database cache size in pages
# (configured explicitly in database header or via DefaultDbCachePages setting)
# is less than FileSystemCacheThreshold value.
#
# To use file system cache always set FileSystemCacheThreshold to a large value.
# To bypass file system cache for all databases set FileSystemCacheThreshold to
# zero.
#
# Type: integer, measured in database pages
#
#FileSystemCacheThreshold = 65536
# ----------------------------
# File system cache size
#
# This setting controls the maximum amount of RAM used by Windows file system
# cache on 64-bit Windows XP, Windows Server 2003 SP1 or later host. It has no
# effect for Unix hosts in this release yet.
#
# Note that the lowest number presently supported is 10%, and the highest number
# is 95%; numbers outside these limits will be set to the default of 30%.
#
# If the cache size has already been selected when the engine starts the host
# setting will not be changed. Thus you may need to reboot the host for the
# change of this setting to have effect.
#
# To leave host caching settings unchanged set this parameter to 0. This is
# the default parameter value.
#
# Security note
# To adjust the setting engine needs SeIncreaseQuotaPrivilege right. Built-in
# service accounts and administrators have it by default. Installer grants this
# right to Firebird service account. If the engine fails to adjust the cache
# size setting it will log warning message to the firebird.log and continue.
#
# Type: integer, measured in % of total physical RAM
#
#FileSystemCacheSize = 0
# ----------------------------
# Remove protection against opening databases on NFS mounted volumes on
# Linux/Unix and SMB/CIFS volumes on Windows.
#
# This also permits creating database shadows on mounted network volumes.
#
# ***WARNING*** ***WARNING*** ***WARNING*** ***WARNING***
#
# This option removes an important safety feature of Firebird and can
# cause irrecoverable database corruption. Do not use this option unless
# you understand the risks and are prepared to accept the loss of the
# contents of your database.
# Unless this configuration option is changed from 0 to 1, Firebird can
# open a database only if the database is stored on a drive physically
# attached to the local computer - the computer running that copy of
# Firebird. Requests for connections to databases stored on NFS mounted
# drives are redirected to a Firebird server running on the computer that
# "owns" the disk.
# This restriction prevents two different copies of Firebird from opening
# the same database without coordinating their activities. Uncoordinated
# access by multiple copies of Firebird will corrupt a database. On a local
# system, the system-level file locking prevents uncoordinated access to
# the database file.
#
# NFS does not provide a reliable way to detect multiple users of a file on
# an NFS mounted disk. If a second copy of Firebird connects to a database on
# an NFS mounted disk, it will corrupt the database.
# Under some circumstances, running a Firebird server on the computer that
# owns NFS mounted volumes is inconvenient or impossible. Applications that
# use the "embedded" variant of Firebird and never share access to a database
# can use this option to permit direct access to databases on NFS mounted
# volumes.
#
# The situation for SMB/CIFS is quite similar to NFS with not all configurations
# providing file locking mechanisms needed for safe operation. Using SuperServer
# engine with the database on NT file server may be considered relatively safe
# as file locking protects the database from being used by the several engines.
# Network stack can still change order of writes so you may get a corrupted
# database in case of network errors or power outage.
#
# The useful and safe case is working with a shared database marked read-only.
#
# DO NOT ENABLE THIS OPTION UNLESS YOU REALLY KNOW WHAT YOU ARE DOING.
#
# Type: boolean
#
#RemoteFileOpenAbility = 0
# ----------------------------
# Temporary space management
#
# Temporary storage is used by the sorting module, it's also
# intended to store temporary datasets etc.
#
# The parameters below handle the allocation and caching policy
# for the temporary space manager. In previous Firebird versions,
# they were prefixed with "SortMem" instead of current "Temp".
#
# The smallest block size being allocated in the temporary storage.
# This value reflects the allocation granularity.
#
# Type: integer
#
#TempBlockSize = 1048576
#
# The maximum amount of the temporary space that can be cached
# in memory.
#
# For Classic servers, this setting is defaulted to 8 MB.
# Although it can be increased, the value applies to each client
# connection/server instance and thus consumes a lot of memory.
#
# Type: integer
#
#TempCacheLimit = 67108864
# ----------------------------
# Boolean evaluation method (complete or shortcut)
#
# If your SQL code depends on side-effects of full evaluation of OR
# and AND statements (right-hand-side terms), even if the expressions
# final result could be determined by just examining the value of the
# first term, you might need to turn this on.
#
# Type: boolean
#
#CompleteBooleanEvaluation = 0
# ----------------------------
#
# Determines the number of seconds that the lock manager will wait after a
# conflict has been encountered before purging locks from dead processes
# and doing extra deadlock scan cycle. Engine detects deadlocks instantly
# in all normal cases, so this value affects things only if something goes
# wrong. Setting it too low may degrade system performance.
#
# Type: integer
#
#DeadlockTimeout = 10
# ----------------------------
#
# How often the pages are flushed on disk
# (for databases with ForcedWrites=Off only)
#
# Number of unflushed writes which will accumulate before they are
# flushed, at the next transaction commit. For non-Win32 ports,
# the default value is -1 (Disabled)
#
# Type: integer
#
#MaxUnflushedWrites = 100
#
# Number of seconds during which unflushed writes will accumulate
# before they are flushed, at the next transaction commit. For non-Win32
# ports, the default value is -1 (Disabled)
#
# Type: integer
#
#MaxUnflushedWriteTime = 5
# ----------------------------
#
# This option controls whether to call abort() when internal error or BUGCHECK
# is encountered thus invoke post-mortem debugger which can dump core suitable
# for off-line analysis. When disabled engine tries to minimize damage and
# continue execution.
#
# Note that setting this option to 1 makes engine produce traceable coredumps
# when something nasty like SIGSEGV happens inside UDF. On Windows enabling
# this option makes engine invoke JIT debugger facilities when errors happen.
#
# For debugging builds (DEV_BUILD), default value is 1 (Enabled)
#
# Type: boolean
#
#BugcheckAbort = 0
# Prior to Firebird 1.5 various SELECT expressions generated unnamed
# columns. This did not conform to the SQL standard. Fb 1.5 saw the
# introduction of default aliases for these unnamed columns. In some
# cases, particularly if string concatenation is used (via the ||
# operator) this breaks existing scripts.
#
# This setting will affect aliases generated via CONCATENATION,
# CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP and EXTRACT. Setting
# the value to true will disable the alias generation. It is only
# recommended to be used where legacy scripts need to be supported.
# It will be marked deprecated in Firebird 2.0 and removed in
# Firebird 3.0.
#
# Type: boolean
#
#OldColumnNaming = 0
# Prior to Firebird 2.5 the SET clause of the UPDATE statement assigned
# columns in the user-defined order with the NEW column values being
# immediately accessible to the subsequent assignments. This did not
# conform to the SQL standard. Starting with Firebird 2.5, only OLD column
# values are accessible to all the assignments of the SET clause.
#
# Example of the old vs new behaviour:
#
# UPDATE T SET A = B, B = A
# old result: A gets equal to B, B doesn't change
# new result: A and B get their values exchanged
#
# Change this configuration option to 1 (true) only if your SQL code relies
# on the legacy semantics of the SET clause. It's provided as a temporary
# solution for backward compatibility issues and will be deprecated in
# future Firebird versions.
#
# Type: boolean
#
#OldSetClauseSemantics = 0
# ----------------------------
# Relaxing relation alias checking rules in SQL
#
# Since Firebird 2.0, strict alias checking rules were implemented in the SQL
# parser to accord with the SQL standard requirements. This setting allows
# these rules to be relaxed in order to allow legacy applications to run on
# Firebird 2.0.
# A setting of 1 (true) allows the parser to resolve a qualified column reference
# using the relation name, where an alias has been specified for that relation.
#
# For example, it allows a query such as:
# SELECT TABLE.X FROM TABLE A
#
# It is not recommended to enable this setting. It should be regarded as an
# interim workaround for porting untidy legacy code, until it is practicable to
# revise such code.
#
# CAUTION!
# There is no guarantee that this setting will be available in future Firebird
# versions.
#
# Type: boolean
#
#RelaxedAliasChecking = 0
# ----------------------------
# Client Connection Settings (Basic)
#
# Seconds to wait before concluding an attempt to connect has failed.
#
# Type: integer
#
#ConnectionTimeout = 180
#
# Seconds to wait on a silent client connection before the server sends
# dummy packets to request acknowledgment.
#
# NOTE. This option may hang or crash Windows NT4 or Windows 2000 pre SP3
# on the client side as explained here:
# http://support.microsoft.com/default.aspx?kbid=296265.
# or may not prevent eventual inactive client disconnection for other OS.
#
# Normally, Firebird uses SO_KEEPALIVE socket option to keep track of
# active connections. If you do not like default 2-hour keepalive timeout
# then adjust your server OS settings appropriately. On UNIX-like OS's,
# modify contents of /proc/sys/net/ipv4/tcp_keepalive_*. On Windows,
# follow instrutions of this article:
# http://support.microsoft.com/default.aspx?kbid=140325
#
# Type: integer
#
#DummyPacketInterval = 0
# ----------------------------
# TCP Protocol Settings
#
# The TCP Service name/Port number to be used for client database
# connections.
#
# It is only necessary to change one of the entries, not both. The
# order of precendence is the 'RemoteServiceName' (if an entry is
# found in the 'services.' file) then the 'RemoteServicePort'.
#
# Type: string, integer
#
#RemoteServiceName = gds_db
#RemoteServicePort = 3050
#
# The TCP Port Number to be used for server Event Notification
# messages. The value of 0 (Zero) means that the server will choose
# a port number randomly.
#
# Type: integer
#
#RemoteAuxPort = 0
#
# TCP/IP buffer size for send and receive buffers of both the client
# and server. The engine reads ahead of the client and can send
# several rows of data in a single packet. The larger the packet size,
# the more data is sent per transfer. Range is 1448 to 32767 (MAX_SSHORT).
#
# Type: integer
#
#TcpRemoteBufferSize = 8192
#
# Either enables or disables Nagle algorithm (TCP_NODELAY option of
# socket) of the socket connection.
#
# Note: Currently is a default for classic and super servers.
#
# Type: boolean
#
#TcpNoNagle = 1
#
# Allows incoming connections to be bound to the IP address of a
# specific network card. It enables rejection of incoming connections
# through any other network interface except this one. By default,
# connections from any available network interface are allowed.
# If you are using Classic Server, this setting is for Windows only.
# Under Linux, BSD or Mac OS X, with Classic server use xinetd or launchd
# configuration file (bind parameter).
#
# Type: string
#
#RemoteBindAddress =
# ----------------------------
# Locking and shared memory parameters
#
# Bytes of shared memory allocated for lock manager.
# In Classic mode, the size given is used for the initial allocation. The
# table expands dynamically up to the limit of memory. In SuperServer, the
# initial size is also the final size.
#
# Type: integer
#
#LockMemSize = 1048576
#
# When a connection wants to lock an object, it gets a lock request
# block which specifies the object and the lock level requested. Each
# locked object has a lock block. Request blocks are connected to those
# lock blocks either as requests that have been granted, or as pending
# requests.
#
# The settings:
# 1 means locks are granted first come, first served.
# 0 means emulate InterBase v3.3 behavior, where locks are granted
# as soon as they are available; can result in lock request
# starvation.
#
# Type: integer/boolean
#
#LockGrantOrder = 1
#
# In Classic, only one client process may access the lock table at any
# time. Access to the lock table is governed by a mutex. The mutex can
# be requested conditionally - a wait is a failure and the request must
# be retried - or unconditionally - the request will wait until it is
# satisfied. This parameter establishes the number of attempts that
# will be made conditionally. Zero value means unconditional mode.
# Relevant only on SMP machines.
#
# Type: integer
#
#LockAcquireSpins = 0
#
# Tune lock hash list; more hash slots mean shorter hash chains. Only
# necessary under very high load. Prime number values are recommended.
#
# Type: integer
#
#LockHashSlots = 1009
# ----------------------------
#
# Bytes of shared memory allocated for event manager.
#
# Type: integer
#
#EventMemSize = 65536
# ===========================
# SuperServer Engine Settings
# ===========================
#
# ----------------------------
# Which CPUs should be used (Windows Only)
#
# In an SMP system, sets which processors can be used by the server.
# The value is taken from a bit map in which each bit represents a CPU.
# Thus, to use only the first processor, the value is 1. To use both
# CPU 1 and CPU 2, the value is 3. To use CPU 2 and CPU 3, the value
# is 6. The default value is 1.
#
# Type: integer
#
#CpuAffinityMask = 1
# ----------------------------
# Settings for the thread scheduler (Windows Only)
#
# If you have problems with computer response time, running firebird
# on workstation, turn off thread scheduler.
#
# Type: boolean
#
#UsePriorityScheduler = 1
#
# The wait time, in milli-seconds (ms), before the priority of:
# - an active thread is reduced to 'Low', or
# - an inactive thread is increased to 'High'
#
# Note: The default value was chosen based on experiments on Intel
# PIII/P4 processors. It should be increased for using in the computer
# with lower speed processors.
#
# Type: integer
#
#PrioritySwitchDelay = 100
#
# Number of additional 'intervals' given to a 'High' priority thread.
#
# Type: integer
#
#PriorityBoost = 5
# ----------------------------
# Garbage collection policy
#
# Defines how engine does garbage collection. Valid values are :
# cooperative
# background
# combined
#
# Note: this setting affects SuperServer only.
#
# ClassicServer (and SuperClassic) implements "cooperative" only, therefore it
# uses "cooperative" policy regardless of the value.
#
# SuperServer implements all three policies and uses "combined" by default.
#
# Type: string (special format)
#
#GCPolicy = combined
# ==============================
# Classic Server Engine Settings
# ==============================
#
# ==============================
# Settings for Windows platforms
# ==============================
#
# ----------------------------
# Does the guardian restart the server every time it crashes?
# 0 - only start the engine/service once
# 1 - always restart the engine/service if it terminates
#
# Type: integer/boolean
#
#GuardianOption = 1
#
# ----------------------------
# Priority level/class for the server process.
#
# The values are:
# 0 (Zero) - normal priority,
# positive value - high priority (same as -B command line option)
# negative value - low priority.
#
# Note: All changes to this value should be carefully tested to ensure
# that engine is more responsive to requests.
#
# Type: integer
#
#ProcessPriorityLevel = 0
# ----------------------------
# Local Connection Settings
#
# The name of the shared memory area used as a transport channel in local protocol.
# Note that the local protocol in v2.0 is not compatible with any previous version
# if Firebird or InterBase.
#
# Please note that the server can register objects in Global\ kernel namespace
# only if it runs under the account with SE_CREATE_GLOBAL_NAME privilege.
# This means that if you run the server under a restricted account under
# Windows Vista/XP SP2/2000 SP4 it will not be accessible using the
# local protocol from other sessions.
#
# Type: string
#
#IpcName = FIREBIRD
#
# The name of the pipe used as a transport channel in NetBEUI protocol.
# Has the same meaning as a port number for TCP/IP. The default value is
# compatible with IB/FB1.
#
# Type: string
#
#RemotePipeName = interbas
# ============================
# Settings for Unix/Linux platforms
# ============================
# ----------------------------
# Remove protection against redirecting requests to other servers
#
# ***WARNING*** ***WARNING*** ***WARNING*** ***WARNING***
#
# Ability to redirect requests to other servers was initially present
# in Interbase, but was broken by Borland in Interbase 6.0, when
# they added SQL dialects. Request redirection was fixed in firebird 2.0,
# but today such behaviour (proxy) seems to be dangerous from security
# point of view. Imagine, you have one carefully protected firebird server,
# access to which is possible from global net. But in case when this server
# has access to your internal LAN (may and should be restricted,
# but often possible), it will work as a gateway for incoming requests like:
# firebird.your.domain.com:internal_server:/private/database.fdb
# It's enough to know name/IP of some internal server on your LAN, and for
# this connection one even need not know login/password on external server.
# Such gateway easily overrides firewall, installed to protect your LAN
# from outside attack.
#
# DO NOT ENABLE THIS OPTION UNLESS YOU REALLY KNOW WHAT YOU ARE DOING.
#
# Type: boolean
#
#Redirection = 0
#######################################
#
# KB to Bytes Conversion table
#
#######################################
#
# KB Bytes KB Bytes
# ---- --------- ---- ---------
# 1 1024 32 32768
# 2 2048 64 65536
# 4 4096 128 131072
# 8 8192 256 262144
# 16 16384 512 524288
#
#######################################
#
# MB to Bytes Conversion table
#
#######################################
#
# MB Bytes MB Bytes MB Bytes
# --- --------- --- ----------- --- -----------
# 1 1048576 64 67108864 448 469762048
# 2 2097152 128 134217728 512 536870912
# 4 4194304 192 201326592 640 671088640
# 8 8388608 256 268435456 768 805306368
# 16 16777216 320 335544320 896 939524096
# 32 33554432 384 402653184 1024 1073741824
#
我试过
DatabaseAccess = None
,DatabaseAccess = Full
和.DatabaseAccess = Restrict /home/tomay/Firebird/GEA.fdb
DatabaseAccess = Restrict /home/tomay/Firebird
我已经编辑了' /etc/firebird/aliases.conf ',如下所示:
# ------------------------------
# List of known database aliases
# ------------------------------
#
# Example Database:
#
employee.fdb = no/employee.fdb
employee = no/employee.fdb
#
# Live Databases:
#
GEA = /home/tomay/Firebird/GEA.fdb
我在这里缺少什么?
我只是想看到它连接。
我有一张表格(请参阅下面的结构),我可以在其中跟踪所有库存进出。现在我想从这个表中生成一个报告,根据提供的日期范围查找opening_stock、purchased、purchased_return、sales、sales_returned、damaged_inventory 。
询问:
SELECT ITEM_ID,
(SELECT (SUM(PURCHASE_QUANTITY) - SUM(SALE_QUANTITY)) FROM INV_ITEM_LEDGER WHERE ENTRY_DATE < '2019-09-31' AND ITEM_ID = l.ITEM_ID) AS OPENING
, (SELECT COALESCE(SUM(PURCHASE_QUANTITY), 0) FROM INV_ITEM_LEDGER WHERE ENTRY_DATE >= '2019-09-31' AND ITEM_ID = l.ITEM_ID AND REF_TYPE = 'PURCHASE') AS PURCHASE
, (SELECT COALESCE(SUM(SALE_QUANTITY), 0) FROM INV_ITEM_LEDGER WHERE ENTRY_DATE >= '2019-09-31' AND ITEM_ID = l.ITEM_ID AND REF_TYPE = 'PURCHASE RETURN') AS PURCHASE_RETURN
, (SELECT COALESCE(SUM(SALE_QUANTITY),0) FROM INV_ITEM_LEDGER WHERE ENTRY_DATE >= '2019-09-31' AND ITEM_ID = l.ITEM_ID AND REF_TYPE = 'SALE') AS SALE
, (SELECT COALESCE(SUM(PURCHASE_QUANTITY), 0) FROM INV_ITEM_LEDGER WHERE ENTRY_DATE >= '2019-09-31' AND ITEM_ID = l.ITEM_ID AND REF_TYPE = 'SALE RETURN') AS SALE_RETURN
, (SELECT COALESCE(SUM(SALE_QUANTITY), 0) FROM INV_ITEM_LEDGER WHERE ENTRY_DATE >= '2019-09-31' AND ITEM_ID = l.ITEM_ID AND REF_TYPE = 'DMG') AS DAMAGED_INVENTORY
FROM INV_ITEM_LEDGER l
GROUP BY ITEM_ID
当我对47,619条记录(当前查询总数)运行此查询时,系统挂起并停止响应。
表结构:
CREATE TABLE INV_ITEM_LEDGER (
ITEM_LEDGER_ID INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL,
ITEM_ID INTEGER,
REF_ID INTEGER,
REF_TYPE VARCHAR(20),
PURCHASE_QUANTITY DECIMAL(18,4),
SALE_QUANTITY DECIMAL(18,4),
DESCRIPTION VARCHAR(512),
BATCH_NO VARCHAR(20),
EXPIRY VARCHAR(20),
STOCK_ID INTEGER,
BRANCH_CODE VARCHAR(20),
LAST_SYNCED VARCHAR(20),
ENTRY_DATE VARCHAR(20),
LAST_UPDATED VARCHAR(20),
ENTRY_DATE2 VARCHAR(20),
/* Keys */
PRIMARY KEY (ITEM_LEDGER_ID)
);
CREATE INDEX INV_ITEM_LEDGER_INDEX01
ON INV_ITEM_LEDGER
(ITEM_LEDGER_ID, ITEM_ID);
有什么可以增强查询的吗?
我在 Delphi 101.Berlin 中使用 FireDAC,我想IDENTITY DATA TYPE
在执行插入查询后获取最后插入的列 id,但是返回值为空。
询问:INSERT INTO ACC_ACCOUNT_HEAD (ACCOUNT_HEAD_TITLE) VALUES ('TEST') returning ACCOUNT_HEAD_ID;
表结构
CREATE TABLE ACC_ACCOUNT_HEAD (
ACCOUNT_HEAD_ID INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL,
ACCOUNT_HEAD_TITLE VARCHAR(208),
PRIMARY KEY (ACCOUNT_HEAD_ID)
);
注意:我知道生成器可以,但我想知道IDENTITY
列是否可以。
完整的德尔福代码:
var
aQry : TFDQuery;
begin
aQry := TFDQuery.Create(Self);
aQry.Connection := frmMain.aCon;
aQry.SQL.Text :=
'INSERT INTO ACC_ACCOUNT_HEAD (ACCOUNT_HEAD_TITLE) VALUES (:P1) returning ACCOUNT_HEAD_ID';
aQry.ParamByName('P1').AsString := 'Testing';
aQry.ExecSQL; // or Should I use aQry.Open(); to get returned value???
如何将当前日期放入 where 子句而不必一直输入?
Select SALEITEMS.SKU,
STOCK.SHORTDESC,
SALEITEMS.SALEPRICEEX,
SALEITEMS.COSTPRICEEX,
SUM(((SALEITEMS.SALEPRICEEX - SALEITEMS.COSTPRICEEX) /
SALEITEMS.SALEPRICEEX) * 100) AS GP
From SALEITEMS
Inner Join STOCK On SALEITEMS.SKU = STOCK.SKU
where SALEITEMS.FP_DATE = '13 Nov 2018'
group by 1,2,3,4
我想将现有数据库的字符集从无更改为 utf8,看来最安全的方法是创建一个新数据库,然后将数据泵入其中。
我尝试了两种方法,都给了我同样的错误:
使用 utf8 字符集创建一个新数据库,然后创建一个简单的存储过程以通过“在外部数据源上执行块”来抽取数据
在此命令行中使用 fbclone
fbclone -l fbembed.dll -v -s source.gdb -t destination.gdb -u SYSDBA -p masterkey -tc UTF8 -wc UTF8
两者都给了我一个格式错误的字符串错误,并且大部分行都没有复制到目标数据库。
示例详细错误
Incompatible column/host variable data type
GDS Code: 335544569 - SQL Code: -303 - Error Code: 249
fields values ---
VANUM = 244458
RUBNUM = 5054
VALEUR = Absence de germes pathogènes.
ATBANA =
DATEMODIF = 16/05/2018
我的数据库生成了很多孤立页面,我正试图找出原因。
我经常在我的 python 代码中使用fdb 驱动程序这样做:
cursor = connection.cursor()
for item in list:
try:
cursor.execute(sql_insert_statement, (item,))
except fdb.DatabaseError:
log(f"Exception: duplicate found in database for {item}")
continue
connection.commit()
由于违反主键唯一约束(这很好),我生成了很多异常,并且当列表中的所有项目都执行了它们的 INSERT 语句时,我只提交一次“主”事务。
这是正确的做事方式吗?或者我是否必须在每次发生异常后提交(带有一个无论其结果如何finally
都会在每次发生后触发的子句)?try
至少,从文档cursor.execute
来看,我怀疑我是否需要在每次之后提交。