Stack Overflow Q & A Modify OWNER on all table 同时在 PostgreSQL 中描述了一些漂亮的方法来将表和其他对象更改为特定用户,并且它工作得很好,但是所有的建议似乎都忽略了我创建的函数。
是否有一种相当简单的方法来重置数据库中所有对象的所有者,包括函数?手工操作是非常不可取的。
我有一个包含大约 100 个表的数据库,我需要构建一个连接查询以从其中两个表中获取特定数据。我知道一个,但不知道另一个。基本上我需要这样的东西:
select <tables> from <database> where exists table.column name;
我怎样才能做到这一点?
在数据库中存储单个记录的元数据的最佳实践是什么?
我需要在我的数据库中存储许多表的常见元数据,例如创建时间和上次更新时间。我找到了几种不同的解决方案:
将元数据直接存储在表中。
优点:
缺点:
创建一个通用元数据表,并使用软外键将数据链接到正确的表和记录。
优点:
缺点:
为每个需要元数据的表创建单独的元数据表。
优点:
缺点:
是否有比我在这里提到的更多的选择、优点或缺点?存储这些元数据的最佳实践是什么?
information_schema.role_table_grants当我public在grantee专栏中看到时我正在看,然后我检查了information_schema.enabled_roles但是这个role_name不存在。
=> 谁或什么public角色?
我希望能够详细了解哪些数据库文件包含数据库中各种 HoBT(对齐和非对齐)的分配单元。
在我们开始为每个文件组创建多个数据文件之前,我一直使用的查询(见下文)一直对我有用,我只能弄清楚如何获得与文件组级别一样的细粒度。
select
SchemaName = sh.name,
TableName = t.name,
IndexName = i.name,
PartitionNumber = p.partition_number,
IndexID = i.index_id,
IndexDataspaceID = i.data_space_id,
AllocUnitDataspaceID = au.data_space_id,
PartitionRows = p.rows
from sys.allocation_units au
join sys.partitions p
on au.container_id = p.partition_id
join sys.indexes i
on i.object_id = p.object_id
and i.index_id = p.index_id
join sys.tables t
on p.object_id = t.object_id
join sys.schemas sh
on t.schema_id = sh.schema_id
where sh.name != 'sys'
and au.type = 2
union all
select
sh.name,
t.name,
i.name,
p.partition_number,
i.index_id,
i.data_space_id, …Run Code Online (Sandbox Code Playgroud) 我正在从没有文档的旧系统中归档数据。幸运的我...
我想知道表的创建时间、上次访问时间等。我可以相信这个查询会给我正确的答案还是我首先需要检查一些参数?SQL Server 2008 R2:
SELECT t.Name AS Tabelname, p.rows AS NoOfRows, MAX(us.last_user_lookup) AS LastUsed, t.create_date AS CreatedDate
FROM sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
LEFT JOIN --A lot of the tables did not have any records in this table
sys.dm_db_index_usage_stats as us ON t.OBJECT_ID = us.OBJECT_ID
GROUP BY t.Name, p.rows, create_date
ORDER BY MAX(us.last_user_lookup) DESC
Run Code Online (Sandbox Code Playgroud) 在我读到的某个教程中,作者正在sys.indexes根据谓词进行过滤index_id < 256000。这有什么作用?
我的印象是,如果我要对DATALENGTH()表中所有记录的所有字段求和,我将得到表的总大小。我错了吗?
SELECT
SUM(DATALENGTH(Field1)) +
SUM(DATALENGTH(Field2)) +
SUM(DATALENGTH(Field3)) TotalSizeInBytes
FROM SomeTable
WHERE X, Y, and Z are true
Run Code Online (Sandbox Code Playgroud)
我在下面使用了这个查询(我从网上得到的表大小,聚集索引,所以它不包括 NC 索引)来获取我的数据库中特定表的大小。出于计费目的(我们按部门使用的空间量收费),我需要计算出每个部门在此表中使用了多少空间。我有一个查询来标识表中的每个组。我只需要弄清楚每个组占用了多少空间。
由于VARCHAR(MAX)表中的字段,每行的空间可能会剧烈波动,所以我不能只取平均大小 * 部门的行数比率。当我使用上述DATALENGTH()方法时,我只能获得下面查询中使用的总空间的 85%。想法?
SELECT
s.Name AS SchemaName,
t.NAME AS TableName,
p.rows AS RowCounts,
(SUM(a.total_pages) * 8)/1024 AS TotalSpaceMB,
(SUM(a.used_pages) * 8)/1024 AS UsedSpaceMB,
((SUM(a.total_pages) - SUM(a.used_pages)) * 8)/1024 AS UnusedSpaceMB
FROM
sys.tables t with (nolock)
INNER JOIN
sys.schemas s with (nolock) ON s.schema_id = t.schema_id
INNER JOIN
sys.indexes i with (nolock) ON t.OBJECT_ID …Run Code Online (Sandbox Code Playgroud) sql-server data-pages clustered-index metadata database-internals
v$视图与其dba_等价物之间的一般区别是什么?举个例子来说,v$tablespace和dba_tablespaces。
根据 MS-DOCS about System information schema views,架构列定义有一个警告说明:
**重要** 不要使用 INFORMATION_SCHEMA 视图来确定对象的架构。查找对象架构的唯一可靠方法是查询 sys.objects 目录视图。
为什么不能使用 INFORMATION_SCHEMA 视图来确定对象的架构?
这个信息有误吗?
schema sql-server metadata information-schema sql-server-2017
metadata ×10
sql-server ×5
postgresql ×3
compression ×1
data-pages ×1
ddl ×1
filegroups ×1
functions ×1
index ×1
oracle ×1
owner ×1
role ×1
schema ×1
view ×1