小编Mat*_*att的帖子

DBA 新工作的第一天 - 检查备份和安全性 - 如何?还应该检查什么?

通常,当我在新环境中开始时,我倾向于检查备份在哪里,最后一次完整的时间,最后一次应用的还原时间,我也会检查安全性。

我这样做的方式是通过 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)

security sql-server backup restore sql-server-2014

33
推荐指数
1
解决办法
5793
查看次数

使用 SQL Server FILESTREAM 时保持(部分)备份较小

我有一个包含近 1TBFILESTREAM数据的数据库,我不需要备份(如果数据被删除,它会在几个小时内自动重新创建,所以它并不重要)。大多数数据每隔几天就会更改一次,因此差异备份并不能真正帮助减小大小。

通过将恢复模式设置为Full,创建一个单独FILEGROUPFILESTREAM,然后只备份“主要”,我让备份按照我需要的方式工作FILEGROUP。这导致的问题是日志文件(也被备份)现在不必要地大,因为它包含FILESTREAM数据。

SIMPLE恢复模式剥夺了我对特定FILEGROUPs进行备份的能力,所以我认为这也不是一种选择。

我的想法是将FILESTREAM数据移动到一个单独的数据库,但现在我正在失去参照完整性,并且肯定还会继承许多其他问题。

有没有办法在Simple恢复模式下创建部分备份(不将FILESTREAM表设置为只读)?如果没有,我的问题还有其他合理的解决方案吗?

sql-server backup transaction-log filestream sql-server-2014

12
推荐指数
1
解决办法
1230
查看次数

使用连接条件更新另一个表的列中的匹配词

我有 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

6
推荐指数
3
解决办法
4894
查看次数

重复的行 - 如何删除一个?

我有一个包含 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。我可以用它来删除重复的行之一吗?

postgresql duplication

5
推荐指数
1
解决办法
5646
查看次数

Postgres - 仅尝试备份函数

我正在尝试按照 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)

但我收到以下错误:

Error: "st_extent" is an aggregate function
Run Code Online (Sandbox Code Playgroud)

为什么它不喜欢聚合函数?我该怎么做才能解决这个问题?

postgresql backup aggregate functions

5
推荐指数
1
解决办法
2633
查看次数

Postgres 命令失败:设备上没有剩余空间

我正在运行一个命令来在一个相当大的表(大约 3.15 亿行)上创建一个新列。这使用了比我预期更多的磁盘空间,它已经完全填满了我的 SAN。命令失败ERROR: could not extend file "pg_tblspc/14342 etc.": No space left on device

我的问题是,当命令像这样失败时,命令的结果不会立即被丢弃吗?为什么当没有对表进行实际更改时,表空间仍然已满?

最后,当 postgres 不允许我执行任何其他命令(例如 VACUUM)时,再次释放空间的最佳方法是什么?

disk-space postgresql-9.4

5
推荐指数
1
解决办法
2万
查看次数

Postgres - 同时在表上执行多个命令

Postgres 在一个表上同时运行多个命令时有多健壮?

例如,我可以设置一个主键并同时使用多个单独的命令创建几个索引吗?

仅影响/更改一列中的数据的查询怎么样?只要不干扰受第一个命令影响的列,就可以运行其他命令吗?

postgresql

1
推荐指数
1
解决办法
1184
查看次数