我有一个 pl/pgsql 函数(见下文),它列出了一些字段并使用动态构造的 UPDATE 命令清除它们的内容。
当我设置时log_statement = 'mod',我在执行函数时在日志上看不到任何内容SELECT fnct_clear_temp_fields();。当我设置log_statement = 'all'并执行我可以SELECT fnct_clear_temp_fields();在日志中看到的函数时,但看不到底层的 UPDATE 命令。
有没有办法让 UPDATE 命令也出现在日志中?
有关信息,这里是功能:
CREATE OR REPLACE FUNCTION fnct_clear_temp_fields() RETURNS VOID AS $$
DECLARE
--Put into a cursor a view dynamically listing all user-defined fields beginning with 'temp_'
dataset_1 CURSOR FOR
SELECT
column_name,
table_name
FROM information_schema.tables
NATURAL JOIN information_schema.columns
WHERE
table_schema='public'
AND table_type='BASE TABLE'
AND column_name ~ '^temp_'
ORDER BY table_name,column_name;
--Record variable to go through each line …Run Code Online (Sandbox Code Playgroud) 我正在使用ArchLinux和PostgreSQL9.4.4 并在配置文件中启用了日志记录:
$ sudo egrep -v "^[[:blank:]]*($|#|//|/\*| \*|\*/)" /var/lib/postgres/data/postgresql.conf
max_connections = 1024 # (change requires restart)
shared_buffers = 128MB # min 128kB
dynamic_shared_memory_type = posix # the default is the first option
logging_collector = on # Enable capturing of stderr and csvlog
log_directory = '/tmp' # directory where log files are written,
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
log_file_mode = 0644 # creation mode for log files,
log_error_verbosity = verbose # terse, default, or …Run Code Online (Sandbox Code Playgroud) 我有一个生成交易并执行它们的软件。我想根据执行的查询占查询总数的简单比例异步检查事务进度。我能够读取stdout和stderr生成的psql,所以我想一个解决方案可以打印到stdout一些自定义消息,如“进度:3/8”(或另一个自定义文本字符串)。
我曾考虑过执行“日志查询”,该查询将有关查询进度的信息存储在适当的表中,但该表在事务完成之前不可用,这使我无法检查事务进度。
目前我尝试了以下操作(假设在交易中有 3 个查询来做一些事情):
BEGIN;
CREATE OR REPLACE FUNCTION progress(curr int, total int) RETURNS float AS $$
BEGIN
RAISE NOTICE '___PROGRESS___%', curr/total::float;
RETURN curr/total::float;
END;
-- First query
SELECT ... FROM ...;
-- Log the progress
SELECT * FROM progress(1,3);
-- Second query
SELECT ... FROM ...;
-- Log progress
SELECT * FROM progress(2,3);
-- Third query
SELECT ... FROM ...;
-- Log progress
SELECT * FROM progress(3,3);
COMMIT;
Run Code Online (Sandbox Code Playgroud)
我使用以下语法从 bash …
我似乎想不出答案。我见过多个这样的答案: 为什么事务日志不断增长或空间不足?
每个人都在谈论在您的日志文件上运行备份,以便它缩小。我正在这样做,但它不会缩小任何东西!我也不相信我正在运行任何超长事务。
服务器: SQL Server 2008
恢复模式: Full
我有一个维护计划来存储 5 天的备份。任务 1 备份具有备份类型的数据库Full,任务 2 备份事务日志。Verify backup integrity对两个任务都进行检查。
我的数据库的正常.ldf文件是 22GB。当我运行上述任务时,.bak文件为435mb,但.trn.文件为22gb,与ldf相同。并且在成功运行之后.ldf根本没有缩小,尽管我读过的所有内容都告诉我应该这样做?
这里发生了什么,为什么日志文件永远不会缩小?
我也试过运行另一个答案中提到的这个命令:
select name, log_reuse_wait_desc
from sys.databases
它说LOG_BACKUP的是带有巨大日志文件的数据库。
根据下面的答案,我混淆了已用空间的分配。这些是我的统计数据:
由于我不知道为什么,初始大小设置为 22gb ...
我们的网站出现间歇性数据库错误,我要求我的网络主机检查发生了什么。经过一番检查,他们发现数据库几乎没有问题,并尝试修复它。最后我收到了他们的以下消息-
我已经尝试了对 InnoDB 数据库的每一次修复,我们仍然得到 InnoDB 日志序列号是未来的。此时,为了让 ibdata 和 iblogfile 再次匹配,我们需要从服务器上的备份中恢复 MySQL 目录(包括数据库)。这个过程应该不会花很长时间,但会有一些与这样的恢复相关的停机时间。如果这不是恢复 MySQL 目录的最佳时间,我可以将其安排在不同的时间。请告诉我您希望如何处理此问题。
有人可以告诉我解决这个问题的最佳方法是什么。我真的不想丢失任何数据并希望修复 dB。
PS:如果您需要更多信息,请告诉我,我会从我们的网络主机上获取。
非常感谢您的帮助。
我试图检索我的 MySQL RDS 二进制日志,以便为某些 SQL 运行手动“回滚”。不幸的是,我注意到过去 30 分钟内只有 2 个二进制日志可用。
“调用 mysql.rds_show_configuration”提供“binlog 保留时间 | NULL”。
我猜(因为 RDS 提供了在每日备份之间进行时间点恢复的能力)AWS RDS 将其二进制日志保留 24 小时。但它似乎对最终用户不可用......
TIA, 维他
我mysql Ver 15.1 Distrib 5.5.46-MariaDB在 CentOS 6.7 服务器上运行。我正在尝试记录查询,我正在通过将日志重定向到文件来做,如下所示:
#/etc/my.cnf.d/server.cnf
# this is only for the mysqld standalone daemon
[mysqld]
#
# * Fine Tuning
#
key_buffer = 16M
max_allowed_packet = 512M
thread_stack = 192K
thread_cache_size = 8
log-output = FILE
#General Query Log
general_log
general_log_file = /var/log/mysql/mysql_query.log
#Error Log
log_error = /var/log/mysql/mysql_error.log
#Slow Query Log
log-slow-queries
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql_slow.log
long_query_time = 2
log-queries-not-using-indexes
collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
Run Code Online (Sandbox Code Playgroud)
在重新启动 MySQL 服务之前,我确实运行了以下命令来创建每个文件并分配适当的权限: …
有没有办法在 Postgres 9.3.9 中记录单个连接或用户或客户端主机的所有 SQL 查询?
换句话说,我log_statement = all只想要某个用户名或客户端主机名或客户端 IP 或连接 ID。
一种选择是记录所有客户端的 SQL 活动并搜索日志。我希望有更好的方法。
我在 Ubuntu 14.04 上使用 Postgres 9.5。我在 /etc/postgresql/9.5/main/postgresql.conf 文件中设置了这些设置
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
# can include strftime() escapes
#log_file_mode = 0600 # creation mode for log files,
# begin with 0 to use octal notation
log_truncate_on_rotation = on # If on, an existing log file with the
# same name as the new log file will be
# truncated rather than appended to.
# But such truncation only occurs on
# time-driven rotation, not on restarts
# …Run Code Online (Sandbox Code Playgroud) 我想将一些日志提取到报告中,以便获取夜间运行的 SQL_Agent_Jobs 状态。如果作业失败,那么我想在表中接收错误日志。我试图通过以下查询获取该信息:
DECLARE @job_id UNIQUEIDENTIFIER
SELECT
@job_id = job_id FROM msdb.dbo.sysjobs
WHERE
[name] like '%JOB_1%'
OR [name] like '%JOB_2%'
OR [name] like '%JOB_3%'
OR [name] like '%JOB_4%'
OR [name] like '%JOB_5%'
;WITH Error_Output (job_id, error_log) AS
(
SELECT
JS.job_id,
CASE
WHEN JSL.[log] IS NULL THEN JH.[Message]
ELSE JSL.[log]
END AS LogOutput
FROM
msdb.dbo.sysjobsteps JS
INNER JOIN msdb.dbo.sysjobhistory JH
ON JS.job_id = JH.job_id AND JS.step_id = JH.step_id
LEFT OUTER JOIN msdb.dbo.sysjobstepslogs JSL
ON JS.step_uid = JSL.step_uid
WHERE
INSTANCE_ID >
(SELECT …Run Code Online (Sandbox Code Playgroud) log ×10
postgresql ×5
mysql ×3
sql-server ×2
amazon-rds ×1
backup ×1
disk-space ×1
dml ×1
files ×1
functions ×1
innodb ×1
logs ×1
mariadb ×1
mysql-5.6 ×1
plpgsql ×1
recovery ×1
sequence ×1