如果我填充下表:
IF OBJECT_ID ('dbo.CleanTableTest', 'U') IS NOT NULL
DROP TABLE dbo.CleanTableTest;
GO
CREATE TABLE dbo.CleanTableTest
(FileName nvarchar(4000),
DocumentSummary nvarchar(max),
Document varbinary(max)
);
GO
-- Populate the table with data from the Production.Document table.
INSERT INTO dbo.CleanTableTest
SELECT REPLICATE(FileName, 1000),
DocumentSummary,
Document
FROM Production.Document;
GO
exec sp_spaceused CleanTableTest
go
Run Code Online (Sandbox Code Playgroud)
结果:
name rows reserved data index_size unused
-------------- ---- --------- ------- ----------- ------
CleanTableTest 13 456 KB 440 KB 8 KB 8 KB
Run Code Online (Sandbox Code Playgroud)
但是如果我删除所有行:
delete dbo.CleanTableTest
go
exec sp_spaceused CleanTableTest
go
Run Code Online (Sandbox Code Playgroud)
结果: …
我提到了以下相关问题,但对我的情况没有帮助:
ORA-01654: 无法在表空间 <索引表空间名称> 中将索引 <索引名称> 扩展 128
我在需要增加大小的同一个表空间中有 2 个索引。
我有 13 个与该表空间关联的 dbf 文件。
如何确保增加正确 dbf 文件的大小以修复上述错误?
我注意到在 USERS 表空间中创建了一个架构,但我们的本地规则是它应该单独位于一个表空间中。在 Oracle 中,您如何将架构移动到不同的表空间?
因此,我以 SYSDBA 的身份连接到 Oracle 并尝试运行此命令:
create user C##demo identified by demopassword;
Run Code Online (Sandbox Code Playgroud)
以创建用户结束。
然后我运行:
alter user C##demo default tablespace PAVEL_DATA temporary tablespace PAVEL_TEMP;
Run Code Online (Sandbox Code Playgroud)
以错误结束:
ORA-00959: 表空间 'PAVEL_DATA' 不存在
但是如果我运行这个命令:
SELECT TABLESPACE_NAME, STATUS, CONTENTS
FROM USER_TABLESPACES;
Run Code Online (Sandbox Code Playgroud)
我可以看到表空间:
TABLESPACE_NAME STATUS CONTENTS
------------------------------ --------- ---------
SYSTEM ONLINE PERMANENT
SYSAUX ONLINE PERMANENT
TEMP ONLINE TEMPORARY
USERS ONLINE PERMANENT
UNDOTBS2 ONLINE UNDO
PAVEL_DATA ONLINE PERMANENT
PAVEL_TEMP ONLINE TEMPORARY
Run Code Online (Sandbox Code Playgroud)
那么,为什么在创建表空间时会出现错误表空间不存在?
编辑
根据评论继续,这是我运行时看到的select tablespace_name, con_id from cdb_tablespaces:
TABLESPACE_NAME CON_ID
------------------------------ ----------
PAVEL_DATA 1
PAVEL_TEMP 1
SYSTEM …Run Code Online (Sandbox Code Playgroud) 我的数据库的 SYSTEM 和 SYSAUX 表空间大小现在处于以下状态:
SYSTEM - PCT_USED= 99
SYSAUX - PCT_USED= 95
Run Code Online (Sandbox Code Playgroud)
我相信数据库现在处于危急状态。我该怎么做才能使其恢复正常状态,以及应遵循哪些标准方法来确保 SYSTEM 和 SYSAUX 表空间文件的安全。
任何帮助将不胜感激。
专门运行 PostgreSQL 11.2 服务器(带有 TimescaleDB 扩展)的 Ubuntu 18.04 服务器将很快耗尽磁盘空间,因此需要向计算机添加新的 SSD 磁盘以支持不断增长的数据库大小。
数据预计将以相同/更高的速率继续增加,因此需要不断增加存储硬件,直到机器用完 2.5 英寸驱动器托架。只有这时才会考虑将数据库分布在多台机器上,因为所涉及的复杂性增加。
想法
联合文件系统mergerfs可以将驱动器集中在一起,轻松解决存储扩展问题。但这会增加数据库操作的延迟,因此不建议这样做。可以通过底层 RAID-1/5/6/10 或使用 SnapRAID 添加冗余。
RAID-0 和 RAID-10 允许将 RAID 阵列扩展到新添加的驱动器中,并通过条带化提高性能。然而,每个添加的驱动器都会增加一个故障点。此外,许多人声称镜像 SSD 的用途有限,因为RAID-0 中的两个 SSD 可能会同时发生故障。所以也许这意味着 RAID-10 并不比 RAID-0 更好。此外,故障率随着每增加一个 SSD 而线性增加。
RAID-5/6 由于奇偶校验计算和写入 2 个驱动器而降低了性能,从而使有效 IOPS 降低了 75%。对于数据库来说似乎是一个糟糕的选择。
PostgreSQLTABLESPACES可用于将每个表分配到特定驱动器。然而,使用表空间会使恢复变得非常复杂。此外,是否可以在新驱动器上创建新表空间并让 Postgres 自动决定将新记录写入何处?
ZFS、BTRFS?对他们不熟悉,愿意探索他们是否合适。
问题: 2020年推荐的PostgreSQL机器扩容方法是什么,如果扩容频繁(一年1-2次),性能应该不会受到太大影响,恢复也不会太复杂可能会导致数据丢失?
RAID-10 对我来说似乎是一个好主意,但 RAID-1 的使用似乎有限,同时会导致“损失”一半的磁盘空间,随着驱动器数量的增加,故障点也会增加,情况会变得更糟。
由于预算限制,我们无法一次性将 2U 机箱中的 16 个驱动器托架全部装满 SSD,因此必须逐步完成。
任何意见是极大的赞赏!
编辑:在研究了 ZFS 之后,这似乎可能是我的案例的解决方案之一。
仅包含镜像 ZFS vdev(每个 …
架构中的表旨在以只读方式使用,并且每三个月仅更新一次。
我的问题是指性能维护(备份/恢复、导出/导入)
临时表空间怎么样,在这种情况下使用不同的表空间更好吗?
问题:
在 Oracle 11.2g DB 上;我们有一个损坏的 TS,它不允许在装载状态之上启动数据库实例。无法使用标准方法(即企业管理器)删除 TS。
我们可以做什么?
诊断问题还需要哪些其他信息?
(我们同时检查了文件系统,没问题,但是表空间的 DBF 文件丢失了。)
我有以下客户表:
customer_id - int
company_name - nvarchar
street - nvarchar
city - nvarchar
comments - nvarchar
Run Code Online (Sandbox Code Playgroud)
该应用程序将仅在一个小国家(例如 30 个城市)的部分地区使用。一位朋友告诉我,我应该将 'city' 分隔到不同的表 'Cities' 中,并在客户表中仅使用 city_id。
就我个人而言,我没有看到它有什么好处(除了在客户表上节省一些空间,在这种情况下,对于创建另一个表的成本来说,这对我来说似乎无关紧要)。
他还提到,因为我有重复的列 - city: foo, city: bar, city: foo. (同城客户很少)这不算归一化,是真的吗?
谁是对的?关于这个问题的任何启示?
我有两个关于 Oracle 表的内联约束声明的问题:
这是一种不好的做法吗?如果是这样,为什么?
如何像使用大纲声明时那样为主键和索引声明不同的表空间?就像是
创建表 THIS_TABLE (
身份证号码,
约束 THIS_TABLE_PK (id) 表空间 INDEX_TABLESPACE
) 表空间 DATA_TABLESPACE;
tablespaces ×10
oracle ×7
constraint ×1
delete ×1
index ×1
join ×1
oracle-12c ×1
postgresql ×1
raid ×1
scalability ×1
schema ×1
sql-server ×1
timescaledb ×1