我需要一个 cli 命令来禁用输入设备(键盘和鼠标),以及一个命令来再次启用它们。
要在Xorg上禁用输入设备,方法是:xinput float <id#>
,要启用它们,方法是xinput reattach <id#>
,但我在Wayland上,如何在那里执行此操作?
我需要一个 cli 命令来禁用输入设备(键盘和鼠标),以及一个命令来再次启用它们。
要在Xorg上禁用输入设备,方法是:xinput float <id#>
,要启用它们,方法是xinput reattach <id#>
,但我在Wayland上,如何在那里执行此操作?
我的 Ubuntu 22.04 系统上的 ~home 下(在许多子目录中)有一些文件。我相信大多数带空格的文件名最初来自 Windows。
我使用以下find命令查找有问题的文件
查找 .-name "* *"
有什么方法可以将名称更改为在名称中当前包含空格的所有文件中包含 _ 或其他字符?
例如我想改变
MSC 机脚订单.pdf
到
MSC_机器_脚顺序.pdf
使用 find 命令,我确定有大约 600 个文件需要更改其名称,因此我希望采用某种自动化的方式来更改名称。
当我运行某些脚本时,带有空格的文件名会导致问题。
提前感谢您的帮助。
我在最新的 WMware Workstation Pro 上安装了最新的 Ubuntu 版本。Ubuntu 运行良好,但我无法通过 Dock 上的 Files 文件夹图标访问磁盘和文件系统。我可以手动打开的唯一目录是 Home、Documents 和其他标准目录。磁盘已正确安装,但我无法访问它。我在 Disks 实用程序和命令行中看到了它,此外,应用程序 Thunar 还允许我定期访问整个文件系统。是什么阻止 Files 显示上述任何目录?
lsblk -f
结果: AME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
fd0
loop0
squash 4.0 0 100% /snap/bare/5
loop1
squash 4.0 0 100% /snap/core22/1621
loop2
squash 4.0 0 100% /snap/gnome-42-2204/176
loop3
squash 4.0 0 100% /snap/firmware-updater/127
loop4
squash 4.0 0 100% /snap/desktop-security-center/32
loop5
squash 4.0 0 100% /snap/firefox/5091
loop6
squash 4.0 0 100% /snap/snapd/21759
loop7
squash 4.0 0 100% /snap/prompting-client/51
loop8
0 100% /snap/gtk-common-themes/1536
loop9
0 100% /snap/snap-store/1218
loop10
0 100% /snap/snapd-desktop-integration/247
sda
├─sda1
│
└─sda2
ext4 1.0 83198ac6-0ca6-4488-a2b2-5d157ddcfdf2 8,9G 49% /
sr0 iso966 CDROM 2025-01-12-12-14-12-00 0 100% /media/muserult/CDROM
sr1 iso966 Jolie Ubuntu 24.10 amd64 2024-10-09-14-31-13-00 0 100% /media/muserult/Ubuntu 24.10 amd64
ls
结果: lrwxrwxrwx 1 root root 7 ott 7 10:35 bin -> usr/bin
drwxr-xr-x 3 root root 4096 gen 12 13:20 boot
dr-xr-xr-x 2 root root 4096 ott 9 16:30 cdrom
drwxr-xr-x 19 root root 4200 gen 12 16:22 dev
drwxr-xr-x 140 root root 12288 gen 12 13:20 etc
drwxr-xr-x 3 root root 4096 gen 12 13:10 home
lrwxrwxrwx 1 root root 7 ott 7 10:35 lib -> usr/lib
lrwxrwxrwx 1 root root 9 ott 7 10:35 lib64 -> usr/lib64
drwx------ 2 root root 16384 gen 12 12:18 lost+found
drwxr-xr-x 3 root root 4096 gen 12 13:11 media
drwxr-xr-x 2 root root 4096 ott 9 15:16 mnt
drwxr-xr-x 2 root root 4096 ott 9 15:16 opt
dr-xr-xr-x 403 root root 0 gen 12 16:22 proc
drwx------ 5 root root 4096 gen 12 13:10 root
drwxr-xr-x 37 root root 900 gen 12 16:22 run
lrwxrwxrwx 1 root root 8 ott 7 10:35 sbin -> usr/sbin
drwxr-xr-x 14 root root 4096 ott 9 15:22 snap
drwxr-xr-x 2 root root 4096 ott 9 15:16 srv
-rw------- 1 root root 3754950656 gen 12 12:22 swap.img
dr-xr-xr-x 13 root root 0 gen 12 16:22 sys
drwxrwxrwt 19 root root 460 gen 12 16:23 tmp
drwxr-xr-x 12 root root 4096 ott 9 15:16 usr
drwxr-xr-x 14 root root 4096 gen 12 13:10 var
[更新 2]
如果我安装 Ubuntu LTS 24.04.1,相同的安装(相同的机器,相同的主机 SO,相同的 WMware 版本,相同的设置,相同的任何内容)就可以完美运行
我在 ubuntu 服务器上设置了一个 openvpn 客户端,我希望即使连接失败也能始终保持界面打开。我已persist-tun
在 .conf 文件中尝试过此操作:
但是,如果我运行,那么界面就不会再显示?sudo systemctl stop [email protected]
ifconfig
事情是这样的:
$ python3 -m ssl
Traceback (most recent call last):
File "/opt/splunk/lib/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/opt/splunk/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/opt/splunk/lib/python3.9/ssl.py", line 99, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: libssl.so.1.0.0: cannot open shared object file: No such file or directory
或者
$ openssl --help
openssl: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory
一定是 splunk 安装出了问题,损坏了 openssl...我在 ubuntu bug launchpad 中问了这个问题:https: //bugs.launchpad.net/ubuntu/+source/openssl/+bug/2089827
我怎样才能修复而不必弄乱 Splunk?
我在这里找到:https://community.splunk.com/t5/Splunk-Search/Why-am-I-getting-error-quot-libssl-so-1-0-0-cannot-open-shared/mp/267920 我可以这样做并修复:
export LD_LIBRARY_PATH=/opt/splunk/lib/:$LD_LIBRARY_PATH
我想更好地了解情况并发现任何潜在问题。具体来说:
这种方法不值得推荐吗?它本身有什么问题吗?
此外,我正在尝试理解问题的根本原因:
我感觉当我输入git add
->时Tab它只会提供有意义的文件 - 即未跟踪或修改的文件。
无论如何,现在相当长一段时间它都会列出每个文件。
我进行了一些研究,发现/usr/share/bash-completion/completions/git
我认为它具有我想要的功能。知道为什么它可能无法正常工作吗?
使用 CentOS Stream 9 和 git 2.43.5
Firefox 用户在这里..
最近,FF 推出了一项很棒的新功能,它看起来像一个垂直侧边栏,固定在主窗口的左侧;在其中我似乎有一些扩展图标,但最重要的是“AI Chatbot”模式。我有另一台笔记本电脑,Windows 11,我也在其中使用 Firefox,并且在两台设备上都使用 Sync。但在另一台笔记本电脑上,我似乎找不到激活这个“左键”窗口的方法
有没有办法手动执行此操作或以某种方式排除故障,为什么它不在那台电脑上?两台电脑都使用最新版本的 FF,在我写这篇文章的时候是 134
我正在尝试连接到名为“test21.my-domain.com”的 ssh 服务器。我需要一张 kerberos 票证才能连接到此主机,因此我进行了以下配置:
Host *
HostName %h.my-domain.com
User my_username
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes
Include config.d/ssh_config
附加的 ssh_config 包含不带 kerberos 票证的主机,如下所示:
Host ai-buildingblocks ai-buildingblocks.my-domain.com ai-buildingblocks.my-domain.com
User root
GSSAPIDelegateCredentials no
Host ai-marketplace-3 ai-marketplace-3.my-domain.com ai-marketplace-3.my-domain.com
User root
GSSAPIDelegateCredentials no
...
如果我想在本地机器上显示我的 Kerberos 票证,我会得到我的票证:
> klist -f
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: [email protected]
Valid starting Expires Service principal
01/13/2025 11:20:19 01/13/2025 21:20:19 krbtgt/[email protected]
renew until 01/14/2025 11:20:19, Flags: RIA
01/13/2025 11:20:20 01/13/2025 21:20:19 host/adminssh.my-domain.com@
renew until 01/14/2025 11:20:19, Flags: RAT
Ticket server: host/[email protected]
01/13/2025 11:41:22 01/13/2025 21:20:19 host/test21.my-domain.com@
renew until 01/14/2025 11:20:19, Flags: RAT
Ticket server: host/[email protected]
但是当我连接到主机并执行 klist 时,它只是说没有找到任何凭据,导致出现一堆错误。但是,我已连接到主机,该连接毫无用处,因为我需要 kerberos 票证才能获取我的主目录。以下是一些日志:
> ssh test21 -K -v
OpenSSH_9.9p1, OpenSSL 3.4.0 22 Oct 2024
debug1: Reading configuration data /home/my_username/.ssh/config
debug1: /home/my_username/.ssh/config line 7: Applying options for *
debug1: Reading configuration data /home/my_username/.ssh/config.d/ssh_config
debug1: /home/my_username/.ssh/config.d/ssh_config line 3: include ~/.ssh/ansible_ssh_config matched no files
debug1: /home/my_username/.ssh/config.d/ssh_config line 453: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Reading configuration data /etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf
debug1: Connecting to test21.my-domain.com [aaaa:111:111:aaaa::11] port 22.
debug1: connect to address aaaa:111:111:aaaa::11 port 22: Connection refused
debug1: Connecting to test21.my-domain.com [111.111.111.11] port 22.
debug1: Connection established.
debug1: identity file /home/my_username/.ssh/id_rsa type -1
debug1: identity file /home/my_username/.ssh/id_rsa-cert type -1
debug1: identity file /home/my_username/.ssh/id_ecdsa type -1
debug1: identity file /home/my_username/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/my_username/.ssh/id_ecdsa_sk type -1
debug1: identity file /home/my_username/.ssh/id_ecdsa_sk-cert type -1
debug1: identity file /home/my_username/.ssh/id_ed25519 type -1
debug1: identity file /home/my_username/.ssh/id_ed25519-cert type -1
debug1: identity file /home/my_username/.ssh/id_ed25519_sk type -1
debug1: identity file /home/my_username/.ssh/id_ed25519_sk-cert type -1
debug1: identity file /home/my_username/.ssh/id_xmss type -1
debug1: identity file /home/my_username/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_9.9
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.2p1 Debian-2+deb12u4
debug1: compat_banner: match: OpenSSH_9.2p1 Debian-2+deb12u4 pat OpenSSH* compat 0x04000000
debug1: Authenticating to test21.my-domain.com:22 as 'my_username'
debug1: load_hostkeys: fopen /home/my_username/.ssh/known_hosts2: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: sntrup761x25519-sha512
debug1: kex: host key algorithm: ssh-ed25519
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: SSH2_MSG_KEX_ECDH_REPLY received
debug1: Server host key: ssh-ed25519 SHA256:abcde
debug1: load_hostkeys: fopen /home/my_username/.ssh/known_hosts2: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
debug1: Host 'test21.my-domain.com' is known and matches the ED25519 host key.
debug1: Found key in /home/my_username/.ssh/known_hosts:6
debug1: ssh_packet_send2_wrapped: resetting send seqnr 3
debug1: rekey out after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: ssh_packet_read_poll2: resetting read seqnr 3
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey in after 134217728 blocks
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,[email protected],[email protected],ssh-dss,ssh-rsa,rsa-sha2-256,rsa-sha2-512>
debug1: kex_ext_info_check_ver: [email protected]=<0>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
debug1: Next authentication method: gssapi-with-mic
debug1: Delegating credentials
debug1: Delegating credentials
Authenticated to test21.my-domain.com ([111.111.111.11]:11) using "gssapi-with-mic".
debug1: channel 0: new session [client-session] (inactive timeout: 0)
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: filesystem
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: client_input_hostkeys: searching /home/my_username/.ssh/known_hosts for test21.my-domain.com / (none)
debug1: client_input_hostkeys: searching /home/my_username/.ssh/known_hosts2 for test21.my-domain.com / (none)
debug1: client_input_hostkeys: hostkeys file /home/my_username/.ssh/known_hosts2 does not exist
debug1: client_input_hostkeys: no new or deprecated keys from server
debug1: Requesting authentication agent forwarding.
debug1: Sending environment.
debug1: channel 0: setting env LANG = "en_US.UTF-8"
debug1: pledge: agent
请注意,我更改了一些数据,例如我的用户名或 ips,因为我认为这些数据是敏感数据。还请注意,服务器配置不是我可以更改的,并且对许多其他人来说都是有效的,所以这一定是我这边的问题。我还使用 vpn 连接到主机,否则我可以使用跳转代理(“adminssh”),但这也不起作用。
那么为什么这不起作用呢?为什么我在 ssh 主机上没有 kerberos 票证?我目前使用的是 arch,ssh 服务器在 debian 上运行。如果您需要更多信息,只要我不认为它们敏感,我随时可以提供。
我正在尝试提取 tarball。我在 MacOS 上创建了这个 tarball,然后将其复制到远程服务器,在那里我尝试提取文件。当我尝试提取文件时,它起作用了,但它还包含一堆八位字节流文件。八位字节流文件与从 tar 中提取的每个文件夹和文件同名。
为了创建 tar 文件,我执行以下操作:
tar -cz --no-xattrs --exclude="*DS_Store" -f archive.tar.gz directory
然后我使用 scp 将 tar 文件复制到我的服务器:
scp -P port archive.tar.gz user@hostname:path/to/destination
然后,我在服务器上提取了 tar 文件,如下所示:
tar -xzf archive.tar.gz
这将导致提取预期的文件,但每个文件还具有一个名为的八位字节流文件:
._{name of file}.
我不确定这是否应该发生或者我是否做错了什么。
我不知道这些八位字节流文件是什么,也不知道该如何处理它们。我不想让它们弄乱我的远程服务器。具体来说,远程服务器托管我正在运行的网站的文件,而我复制的特定 tarball 包含我试图更新的 MediaWiki 实例的文件。我担心这些文件可能会干扰我网站的功能,尤其是如果我继续更新过程的话。我该如何删除这些文件?我该如何创建/提取 tarball 以便它们不会首先出现?
我正在阅读Cloudflare的手册,了解 DNS 名称解析的工作原理,并想到了 TLD 名称服务器这个术语。它应该由根名称服务器查询返回。我尝试手动重现递归解析器对随机域(例如pinpon.com
)执行的过程。以下是我最终得到的步骤:
从IANA 列表请求任何根服务器(例如a.root-servers.net
,198.41.0.4):
l.gtld-servers.net
根据附加记录中的地址请求任何 TLD 服务器(例如192.41.162.30) :
所以现在我有了所请求名称的权威 DNS 服务器,我可以使用它来解析实际名称。
问题:下一个要查询的 DNS 服务器是否总是包含Additional records
ip/ipv6 地址?或者通常需要解析根/tld 服务器从该Authority RR
部分返回的名称?
如果我尝试
sudo umount -f /dev/sda
umount: /dev/sda: not mounted.
但 Ventoy 失败了
sudo bash Ventoy2Disk.sh -i /dev/sda
**********************************************
Ventoy: 1.0.99 x86_64
longpanda [email protected]
https://www.ventoy.net
**********************************************
/dev/sda1 /media/miki/Ubuntu\04024.10\040amd64 iso9660 ro,nosuid,nodev,relatime,nojoliet,check=s,map=n,blocksize=2048,uid=1000,gid=1000,dmode=500,fmode=400,iocharset=utf8 0 0
/dev/sda is already mounted, please umount it first!
lsblk 显示
loop49 7:49 0 7M 1 loop /snap/yq/2634
sda 8:0 1 29,3G 0 disk
├─sda1 8:1 1 5,3G 0 part /media/miki/Ubuntu 24.10 amd64
├─sda2 8:2 1 4,9M 0 part
├─sda3 8:3 1 300K 0 part
└─sda4 8:4 1 24G 0 part
我应该尝试什么?
我想从 bash 脚本调用对话框并返回值。我试过
set l = `xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10`
echo $l
对话框弹出,但无论我单击哪个按钮,echo $l 都会返回空白。
我有以下两个简单的程序。
家长:
package main
import (
"fmt"
"syscall"
)
func main() {
attr := &syscall.ProcAttr{
Files: []uintptr{0, 1, 2},
Sys: &syscall.SysProcAttr{ // child in its own group
Setpgid: true,
Pgid: 0,
},
}
_, err := syscall.ForkExec("./child/child", []string{"child"}, attr)
if err != nil {
fmt.Println("Error:", err)
return
}
}
孩子:
package main
import (
"fmt"
"time"
)
func main() {
for {
fmt.Println("hi from child")
time.Sleep(time.Second * 5)
}
}
输出ps
:
yakog@yakog-computer:~/goprojects/parent$ ps -o pid,ppid,pgid,uid,wchan,stat,tt,command -t /dev/pts/19
PID PPID PGID UID WCHAN STAT TT COMMAND
1867701 1867320 1867701 1000 do_sel Ss+ pts/19 bash
1870508 2118 1870508 1000 ep_pol Sl pts/19 child
当我按下CTRL-Z
或 时CTRL-C
,它没有任何效果。这正是我所期望的,因为进程 1870508 不是前台作业的一部分,并且CTRL-Z
/CTRL-C
调用kill -SIGTSTP -1867701
/ kill -SIGINT -1867701
。因此,1870508 不会收到这些信号。
另外,当我调用kill -SIGINT 1870508
或 时kill -SIGSTOP 1870508
,进程被终止/暂停。我仍然可以理解。虽然 1870508 不是前台作业的一部分,但使用kill
命令我们“直接”将信号发送给进程。
但是,为什么不起作用kill -SIGTSTP 1870508
?启动./parent
进程并调用kill -SIGTSTP 1870508
命令后,实际上什么都没有发生(1870508 仍然具有状态R
/S
并继续打印到终端)。我不明白为什么它没有暂停进程(将其移动到)。它应该与和T
相同(我们“直接”向进程发送 -SIGTSTP),但是,在这种情况下它没有效果。-SIGINT
-SIGSTOP
奇怪的是,如果我们改变父代码(下面的代码)并使其在子进程创建后继续执行,那么它就kill -SIGTSTP 1870508
可以正常工作(子进程被暂停)。
package main
import (
"fmt"
"os/signal"
"syscall"
"time"
)
func main() {
attr := &syscall.ProcAttr{
Files: []uintptr{0, 1, 2},
Sys: &syscall.SysProcAttr{ // child in its own group
Setpgid: true,
Pgid: 0,
},
}
_, err := syscall.ForkExec("./child/child", []string{"child"}, attr)
signal.Ignore(syscall.SIGTSTP)
if err != nil {
fmt.Println("Error:", err)
return
}
for {
fmt.Println("hi from parent")
time.Sleep(time.Second * 7)
}
}
此外,当我调用kill -SIGSTOP 1870508
(将进程移动到T
状态)然后调用kill -SIGINT 1870508
它时,它不会终止进程......为什么?
我正在尝试将用户数据文件添加到映像中,以便在启动时运行 cloud-init。添加用户数据文件后,我会对新映像进行哈希处理以检查是否有更改。我目前遇到一个问题,即文件每次都有不同的哈希值。我不确定这是怎么回事。
以下是我正在运行的命令...
# I have a user-data file and ubuntu.img file
img_name="ubuntu-1.img"
sudo cp ubuntu.img "${img_name}"
sudo losetup --partscan /dev/loop0 "${img_name}"
sudo mount /dev/loop0p1 /mnt/boot
sudo cp user-data /mnt/boot
sudo umount /mnt/boot
sudo losetup --detach /dev/loop0
img_name="ubuntu-2.img"
# repeat above setups using ubuntu-2.img
运行cmp ubuntu-1.img ubuntu-2.img
报告有差异,但我不知道为什么。
有人有什么想法吗?
我有一个 ssh .sh bash 脚本文件,我正在 cron 上运行它来检查网站状态。bash 脚本(运行时)引用本地 txt 文件,其中包含要检查的网站列表,它们是关闭还是启动。有时网站会关闭一段时间(维护等),我不想一遍又一遍地收到有关此特定停机时间的通知。所以我试图弄清楚如何在 txt 文件中注释掉此网站的行项目。每次我在 txt 文件中此网站地址的左侧添加 //、# 或 ## 时,它都不会跳过它。它仍然会检测行项目,并每十分钟向我的手机和电子邮件发送一次通知,告知我网站已关闭。这只是一个标准的 .sh 脚本和标准的 .txt 文件。只需要知道如何注释掉 txt 文件中的项目。(不是 bash 脚本)
这是.sh 文件:
#!/bin/bash
# Mailgun API configuration
MAILGUN_API_KEY="redacted"
MAILGUN_DOMAIN="redacted"
TO_EMAIL="redacted"
FROM_EMAIL="redacted"
cd /redacted/redacted/uptime
# File containing website URLs
WEBSITE_FILE="premium-websites.txt"
while IFS= read -r website; do
response=$(curl -Is --max-time 10 "$website" | head -n 1)
response_code=$(echo "$response" | awk '{print $2}')
if [[ "$response_code" != "200" ]]; then
if [[ "$response_code" == "" ]]; then
# Website timed out, send email notification
subject="Website Timeout: $website"
body="The Premium Care website $website timed out. Please investigate. Sent from corp"
elif [[ "$response_code" == "500" ]]; then
# Website has a 500 error, send email notification
subject="Website 500 Error: $website"
body="The Premium Care $website returns a 500 Internal Server Error. Please investigate. Sent from corp"
else
# Website is down, send email notification
subject="Website Down: $website"
body="The Premium Care website $website is down. Please investigate. Sent from corp"
fi
curl -s --user "api:$MAILGUN_API_KEY" \
https://api.mailgun.net/v3/$MAILGUN_DOMAIN/messages \
-F from="$FROM_EMAIL" \
-F to="$TO_EMAIL" \
-F subject="$subject" \
-F text="$body"
echo "[$(date)] $website issue detected. Email notification sent."
else
echo "[$(date)] $website is up."
fi
done < "$WEBSITE_FILE"
在此处输入代码 在此处输入代码
这是文本文件(仅为示例):
https://websites1.com
https://websites2.com
https://websites3.com
BIT
SQL Server 使用数据类型而不是有什么意义BOOLEAN
吗?这只是一种调用相同事物的奇怪方式,还是存在一些微妙的概念差异?
关于数据类型的文档BIT
提及:
位数据类型可用于存储布尔值。
这似乎表明,它们实际上并不是一回事。
我知道[MS 称之为布尔值的东西]和[MS 称之为位的东西]是不同的,但从程序员的角度来看,bit
这是 T-SQL 语言提供的柏拉图式概念的最佳近似值boolean
。我很难相信这只是偶然事件而不是故意的。仅接受 0 和 1 的数字数据类型似乎不适用于其他用途。
我需要每天(也可以连续)将 Postgres 数据库复制到另一台服务器,但不更改 Postgres 设置。
我无法更改数据库设置,因为它来自我的客户端。我只有用户、密码和主机等凭据。
如果需要的话,我可以安装任何软件到服务器上,但我无法更改设置。而且我不想每天发送完整备份,因为数据库太重了。
我需要客户端的数据库,因为我们在服务器中处理大量数据。
我搜索过的所有地方,总是说在中启用和配置 WAL postgresql.conf
。但我无法更改此文件。
amcheck报告以下错误:
select bt_index_parent_check(34465);
ERROR: item order invariant violated for index "admin_access_rights_pkey"
DETAIL: Lower index tid=(282,71) (points to heap tid=(201,46)) higher index tid=(282,72) (points to heap tid=(197,38)) page lsn=396C/DDF2FD00
我该如何修复这个问题?
文档表明这REINDEX
可能没有帮助。
REINDEX 可能无法有效修复损坏。
我正在尝试使用 ms-replication 解决问题,但我不确定它是否最适合当前的问题。
问题:需要复制所有初始插入和所有更新,同时忽略对订阅的删除。本质上,目标数据库会继续增长,并且数据永远不会被删除,即使在源端删除了记录。能够在源端恢复而不破坏目标将是一个很大的优势。
我可以通过 ms-replication 在所有表项目上设置忽略删除并将表准备模式设置为不执行任何操作来实现大部分工作。这将处理在恢复期间维护数据并在目标处保留已删除的记录,但是,如何处理在源处恢复后会导致 PK 违规的插入。我找不到任何记录在案的方法来“在插入期间忽略现有记录”,即使存在黑客攻击,它是否会大大降低复制的性能?
注意:我应该提到,支持备份并不意味着回到很久以前的某个时间点,它只是意味着如果发生硬故障,需要使用最新的日志链恢复源数据库。最多需要处理两个小时的插入。这可能可以通过手动删除目标中不在源中的记录来处理,但是,我试图完全避免这种情况。
除了尝试通过 BCP 加载数据之外,我对快照过程的基础不太熟悉。如果表准备模式不执行任何操作,是否有选项可以选择跳过快照的“批量加载”阶段,然后在应用快照后像往常一样使用日志读取器进行读取?
我们在一些 select 语句中使用 updlock 来确保只有一个连接可以读取数据。如果 SQL Server 可以从索引中获取所有数据,而另一个发出 updlock 的查询可以用另一个(非)聚集索引来满足,那么这似乎不起作用。
即使其他查询可以通过索引中的数据来满足,推荐的锁方法是什么?
例如,conn2 应该被阻塞直到 conn1 提交/回滚:
create database TestDB
go
use TestDB
go
create table LockTest(
LockTestID int not null identity(1,1) primary key,
Number int
)
create index IX_LockTest on LockTest(Number)
insert into LockTest(Number) values(1)
--Conn1
begin tran
select LockTestID from LockTest with(updlock) where LockTestID=1
--Conn2 -- The expectation here is, that this query waits untill Conn1 has committed
begin tran
select LockTestID from LockTest with(updlock) where Number=1
使用 holdlock 或 lock 可获得相同结果