通常,当我在新环境中开始时,我倾向于检查备份在哪里,最后一次完整的时间,最后一次应用的还原时间,我也会检查安全性。
我这样做的方式是通过 T-SQL。
检查备份
;with Radhe as (
SELECT @@Servername as [Server_Name],
B.name as Database_Name,
ISNULL(STR(ABS(DATEDIFF(day, GetDate(), MAX(Backup_finish_date)))), 'NEVER') as DaysSinceLastBackup,
ISNULL(Convert(char(11), MAX(backup_finish_date), 113)+ ' ' + CONVERT(VARCHAR(8),MAX(backup_finish_date),108), 'NEVER') as LastBackupDate
,BackupSize_GB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00/1024.00 AS NUMERIC(18,2))
,BackupSize_MB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00 AS NUMERIC(18,2))
,media_set_id = MAX(A.media_set_id)
,[AVG Backup Duration]= AVG(CAST(DATEDIFF(s, A.backup_start_date, A.backup_finish_date) AS int))
,[Longest Backup Duration]= MAX(CAST(DATEDIFF(s, A.backup_start_date, A.backup_finish_date) AS int))
,A.type
FROM sys.databases B
LEFT OUTER JOIN msdb.dbo.backupset A
ON A.database_name = B.name
AND A.is_copy_only = 0
AND (A.type = 'D') --'D' full, 'L' …Run Code Online (Sandbox Code Playgroud) 我有一个包含近 1TBFILESTREAM数据的数据库,我不需要备份(如果数据被删除,它会在几个小时内自动重新创建,所以它并不重要)。大多数数据每隔几天就会更改一次,因此差异备份并不能真正帮助减小大小。
通过将恢复模式设置为Full,创建一个单独FILEGROUP的FILESTREAM,然后只备份“主要”,我让备份按照我需要的方式工作FILEGROUP。这导致的问题是日志文件(也被备份)现在不必要地大,因为它包含FILESTREAM数据。
SIMPLE恢复模式剥夺了我对特定FILEGROUPs进行备份的能力,所以我认为这也不是一种选择。
我的想法是将FILESTREAM数据移动到一个单独的数据库,但现在我正在失去参照完整性,并且肯定还会继承许多其他问题。
有没有办法在Simple恢复模式下创建部分备份(不将FILESTREAM表设置为只读)?如果没有,我的问题还有其他合理的解决方案吗?
sql-server backup transaction-log filestream sql-server-2014
我有 2 个看起来像这样的表:
表一:
CREATE TEMP TABLE table_a (
Column_1 text,
ID_number int
);
INSERT INTO table_a VALUES
('foo,bar,baz', 123),
('qux,quux,quuz',456),
('corge,grault,garply',789),
('qux,bar,grault', 101);
Run Code Online (Sandbox Code Playgroud)
表 B:
CREATE TEMP TABLE table_b (
Column_1 text,
Column_2 text,
ID_number int
);
INSERT INTO table_b VALUES
('foo','baz',null),
('qux','quzz',null),
('corge','garply',null);
Run Code Online (Sandbox Code Playgroud)
我正在尝试从表 A 中的 ID_number 列复制值,其中表 B 的第 1 列和第 2 列中的值可以在表 A 的第 1 列的同一行中找到。
这是我在想的事情:
UPDATE table_b AS B
SET id_number = A.id_number
FROM table_a AS A
WHERE A.column_1 LIKE B.column_1
AND A.column_1 LIKE …Run Code Online (Sandbox Code Playgroud) postgresql full-text-search pattern-matching update postgresql-9.4
我有一个包含 OS MasterMap 数据的非常大的表(约 1.14 亿行)。这是新表中新加载的数据。尝试设置主键时,出现此错误:
ERROR: could not create unique index "tbl_os_mmap_topoarea_pkey"
DETAIL: Key (toid)=(1000000004081308) is duplicated.
Run Code Online (Sandbox Code Playgroud)
不知何故,我最终得到了一个完全重复的行。这两行中的每个字段都相同。我想删除一行,但保留另一行。由于无法区分两者,如何做到这一点?
我想尽快和尽可能简单地做到这一点。创建临时表等并不是一个真正的选择,因为在这种大小的数据集上需要太长时间。我猜创建一个新的唯一 ID 列会更快,但也可能需要一些时间。
经过一番研究,我了解到 postgres 中的所有记录都有一个隐藏的唯一 ID,即 ctid。我可以用它来删除重复的行之一吗?
我正在尝试按照 Craig Ringer 对这个问题的回答:https :
//stackoverflow.com/questions/13758003/how-to-take-backup-of-functions-only-in-postgres
我的命令是:
psql -U username -AT db_name -c "
SELECT pg_get_functiondef(f.oid)
FROM pg_catalog.pg_proc f
INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
WHERE n.nspname = 'public'
" > /dump/file/functions.sql
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
Run Code Online (Sandbox Code Playgroud)Error: "st_extent" is an aggregate function
为什么它不喜欢聚合函数?我该怎么做才能解决这个问题?
我正在运行一个命令来在一个相当大的表(大约 3.15 亿行)上创建一个新列。这使用了比我预期更多的磁盘空间,它已经完全填满了我的 SAN。命令失败ERROR: could not extend file "pg_tblspc/14342 etc.": No space left on device
我的问题是,当命令像这样失败时,命令的结果不会立即被丢弃吗?为什么当没有对表进行实际更改时,表空间仍然已满?
最后,当 postgres 不允许我执行任何其他命令(例如 VACUUM)时,再次释放空间的最佳方法是什么?
Postgres 在一个表上同时运行多个命令时有多健壮?
例如,我可以设置一个主键并同时使用多个单独的命令创建几个索引吗?
仅影响/更改一列中的数据的查询怎么样?只要不干扰受第一个命令影响的列,就可以运行其他命令吗?
postgresql ×4
backup ×3
sql-server ×2
aggregate ×1
disk-space ×1
duplication ×1
filestream ×1
functions ×1
restore ×1
security ×1
update ×1