我期待部署一个基于Oracle DB的应用程序,而且我假定可以轻松地进行主动/被动群集(RH Cluster或Heartbeat)和同步复制,我正在聊天,看着我很有趣。 有些人提供了贫民窟复制,他们称之为“日志传送”,即通过networkingasynchronous同步文件,但这意味着我们可能会丢失长达一个小时的数据。 另一种方法是为Oracle Data Guard或其他方面支付数百万美元(好几万到几十万)。 我很困惑,因为我在一个非常苛刻的系统(数十到数百GB的支付交易)上工作了数年,这个系统使用PostgreSQL而不是DRBD,通过大都会地区networking来完成接近$ 0的要求。 我在这里假设SAN复制和DRBD做同样的事情,也就是同步复制,其中写入的块只有在远程写入之后才被确认。 我错了吗? 我在这里错过了什么?
我有一个服务器,正在积累句柄在系统进程又名c:\ windows \ system32 \ ntoskrnl.exe。 手柄在一天内达到18,000,并以这个速度永远保持。 服务器运行Postgresql 9.0.3,插入数据库的asp.net web服务,以及查询数据库的asp.net网站。 Web服务通过gSOAP从Linux和Windowstesting机器访问。 我在System进程上运行了Process Explorer,额外的句柄被列为Type Key。 我发现他们在regiedt。 这里有两个从regedit导出的例子。 1。 Key Name: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{2e167ea7- 85e3-4395-995a-77af9875d79a}\InprocServer32 Class Name: <NO CLASS> Last Write Time: 7/13/2009 – 10:53 PM Value 0 Name: <NO NAME> Type: REG_EXPAND_SZ Data: %systemroot%\system32\colbact.dll Value 1 Name: ThreadingModel Type: REG_SZ Data: Both 2。 Key Name: HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{91162401-6E6B-478A-A7FF-994EBA35B9C3} Class Name: […]
鉴于我是一个根用户X.我有用户A和B. 我如何授予用户A授权用户B执行一组特定的function? 例如,我们拥有拥有database_1的用户A. 用户A在这个DB上创build一些存储的函数(比如说function_a和function_b )。 用户A应该能够将该function的执行授予用户B,并且只能授予他。
我使用PostgreSQL,它用于报告。 目前configuration的方式如下: 有一个复杂的查询返回报表数据,如下所示: select Column1 as Name1, Column2 as Name2 from sometable tbl inner join … where … and … and $1 <= somedate and $2 >= somedate group by … order by …; 有一个利用这个查询的函数,并且是这样定义的 CREATE OR REPLACE FUNCTION GetMyReport(IN fromdate timestamp without time zone, IN todate timestamp without time zone) RETURNS TABLE(Name1 character varying, […]
我目前有1个主服务器(a)和3个复制服务器(b,c,d)直接来自主服务器,我使用的archive_command是以下脚本: https : //gist.github.com/Geesu/8640616 所有的服务器都运行PostgreSQL 9.2.6的Ubuntu 12.04.4 这里是每个复制服务器的recovery.conf: https : //gist.github.com/Geesu/8640635 奇怪的是,在我开始复制服务器大概6个小时之后,其中2个立即落后了,现在正在努力赶上,但是他们不断进一步落后。 这是他们与主人相比有多远: a 20287.825072 b 2.521136 c 19994.51653 有没有人有任何想法,为什么其中一个服务器几乎完全赶上,但其他人一直落后? 我已经validation了a和c正在处理WAL段,但它不能够足够快地完成。 a和c的一些日志示例: cp: cannot stat `/var/lib/postgresql/9.2/archive/000000080000109E0000009A': No such file or directory 2014-01-26 23:02:14 GMT LOG: record with zero length at 109E/9AE622D8 cp: cannot stat `/var/lib/postgresql/9.2/archive/000000080000109E0000009A': No such file or directory 2014-01-26 23:02:14 GMT LOG: streaming […]
我有一个用户dev的Postgres服务器,需要客户端证书才能login。我使用命令psql "sslmode=require user=dev host=db.prod" ,它给了我psql: FATAL: connection requires a valid client certificate 。 我知道证书在我的服务器上。 我的问题是,我如何指定客户端证书位置到psql ?
我已经在一个启用了SELinux的Centos 7盒子上安装了PostgresQL,并且为了移动性的原因, 把它的默认数据目录改成了/ srv / postgres,一个单独的LUKSencryption的LVM卷组/逻辑卷,以防万一我不得不移动服务器保密性,数据媒体在移动时是否被偷窃或暴露。 我认为所涉及的LUKS / LVMfunction不应该影响我的问题,但出于完整性的原因提及它。 现在,当我启动postgresql服务: root@fafner:~ # systemctl start postgresql …我在/var/log/audit/audit.log中得到这个: root@fafner:~ # tail -f /var/log/audit/audit.log | grep "postgresql" [..] type=AVC msg=audit(1476614020.689:522): avc: denied { open } for pid=2900 comm="pg_ctl" path="/srv/postgres/data/postgresql.conf" dev="dm-4" ino=136 scontext=system_u:system_r:postgresql_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file type=SYSCALL msg=audit(1476614020.689:522): arch=c000003e syscall=2 success=no exit=-13 a0=7ffc681cc430 a1=0 a2=1b6 a3=24 items=1 ppid=1 pid=2900 auid=4294967295 […]
更新我的意思是我可以有多个日志文件每个数据库? 可能不是,但我很好奇,如果有什么可能像Postgresql开箱即可,或者如果你需要第三方产品或build立自己的应用程序来做到这一点。 我从另一个线程看到,你可以这样做: ALTER DATABASE your_database_name SET log_statement ='all'; 我正在浏览在线文档,我发现这个链接的日志logging 有: log_filename(string)启用logging_collector时,此参数设置创build的日志文件的文件名。 该值被视为strftime模式,所以%-escapes可以用来指定随时间变化的文件名。 (请注意,如果有任何时区相关的%-escapes,计算是在由log_timezone指定的区域中完成的。)支持的%-escapes与Open Group的strftime规范中列出的类似。 请注意,系统的strftime不是直接使用,所以平台特定的(非标准)扩展不起作用。 缺省值是postgresql-%Y-%m-%d_%H%M%S.log。 如果指定的文件名不带转义符,则应该计划使用日志轮转实用程序来避免最终填充整个磁盘。 在8.4之前的版本中,如果没有%转义出现,PostgreSQL会追加新的日志文件创build时间的纪元,但不再是这种情况。 如果在log_destination中启用了CSV格式输出,则会将时间戳logging文件名称附加.csv以创buildCSV格式输出的文件名。 (如果log_filename以.log结尾,则replace后缀。) 此参数只能在postgresql.conf文件或服务器命令行中设置。 嘘,有没有什么办法可以为任何人试过的服务器上的特定数据库设置日志logging?
我正在处理一个可以有数千个表的数据库系统。 问题是,当我尝试使用pg_dump进行备份时,有时会出现以下错误: pg_dump: WARNING: out of shared memory pg_dump: SQL command failed pg_dump: Error message from server: ERROR: out of shared memory HINT: You might need to increase max_locks_per_transaction. pg_dump: The command was: LOCK TABLE public.foo IN ACCESS SHARE MODE 我当然可以增加max_locks_per_transaction设置。 但问题是表的数量可能会有所不同。 每次出现故障时,我都不想经常重新访问这个设置(假设我们注意到这个失败了,因为这是一个cron工作!)。 解决这个问题最好的办法是什么? 目前我正在研究一个Perl脚本,它将列出所有的表格,然后在“块”中调用pg_dump来限制表锁的数量,但是我敢打赌,我可以做得更好。
使用postgresql 8.3,我创build了一个像这样的只读用户: create role reportuser with login password 'secret'; 然后授予select该用户需要访问的所有表。 但我看到这个用户可以create table x (…并插入/更新/删除/删除表。 有没有办法删除此数据库上的此用户的创build表权限?