修改表空间

由于在最开始建立表空间时,表空间设的不够大,而且不是AUTOEXTEND的,今天发现不够用了,数据导不进去。
现在要做的事情有两个,一是把表空间调整大一些,另一个是把表空间设置成可以自动扩展的。

与表空间有关的几个视图如下:

select * from dba_tablespaces;
select * from dba_temp_files;
select * from dba_data_files;

select * from dba_free_space;
select * from v$tempfile;
select * from v$datafile;

扩展表空间文件大小的语法如下:
alter database [datafile name/tempfile name] resize [new_size];
alter database datafile ‘E:\EFMP\ORADATA\EFMP_DATA1.DBF’ resize 1024M;
alter database tempfile ‘E:\EFMP\ORADATA\EFMP_TEMP2.DBF’ resize 800M;
修改表空间属性的语法如下:
alter database [datafile name/tempfile name] autoextend on next [increment_size] maxsize [max_size/unlimited];
alter database datafile ‘E:\EFMP\ORADATA\EFMP_DATA1.DBF’ autoextend on next 5M maxsize 2048M;
alter database tempfile ‘E:\EFMP\ORADATA\EFMP_TEMP2.DBF’ autoextend on next 5M maxsize 1024M;
要留意操作系统和相关的工具(例如备份软件)在文件尺寸上有限制。在重新调整数据文件或开启Oracle的数据文件自动扩展特性前,必须熟悉你的操作系统的限制。

表空间使用久了,特别是在开发阶段,经过频繁的表、视图等对象的添加删除,会产生碎片。
整理碎片最好的方式是将数据导出,然后删除掉表空间,重建表空间,再导入数据。
### 更改数据库中表空间名称的方法 在 Oracle 数据库中,直接重命名表空间的操作并不像其他对象(如表或索引)那样简单。Oracle 并未提供直接的 `ALTER TABLESPACE RENAME` 命令。然而,可以通过以下方法间接实现表空间名称的更改。 #### 方法一:通过创建新表空间并移动数据 以下是通过创建新表空间并迁移数据的方式实现表空间重命名的过程: 1. **创建新的表空间** 使用 `CREATE TABLESPACE` 命令创建一个具有新名称的表空间。例如: ```sql CREATE TABLESPACE new_app_data DATAFILE '/u02/oracle/U1/new_data01.dbf' SIZE 100M; ``` 2. **将数据从旧表空间迁移到新表空间** 使用 `ALTER TABLE ... MOVE` 或 `ALTER INDEX ... REBUILD` 将所有对象从旧表空间移动到新表空间。例如: ```sql ALTER TABLE schema_name.table_name MOVE TABLESPACE new_app_data; ALTER INDEX schema_name.index_name REBUILD TABLESPACE new_app_data; ``` 3. **删除旧表空间** 在确认所有数据已成功迁移到新表空间后,可以删除旧表空间。如果需要保留数据文件,请确保不使用 `INCLUDING CONTENTS AND DATAFILES` 选项。 ```sql DROP TABLESPACE app_data INCLUDING CONTENTS; ``` 4. **更新引用** 确保应用程序或脚本中对旧表空间名称的引用被更新为新表空间名称。 #### 方法二:修改数据字典(不推荐) 虽然可以通过直接修改数据字典来更改表空间名称,但这种方法存在较高的风险,可能导致数据库不稳定或损坏。如果确实需要采用此方法,请确保备份数据库后再进行操作。 1. **设置会话允许修改数据字典** ```sql ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE; ``` 2. **更新 `ts#` 表中的表空间名称** 找到目标表空间的 ID,并更新其名称。 ```sql UPDATE sys.ts$ SET name = 'NEW_APP_DATA' WHERE name = 'APP_DATA'; COMMIT; ``` 3. **重启数据库** 修改完成后,重启数据库以使更改生效。 #### 注意事项 - 在执行上述任何操作之前,请确保已完整备份数据库[^1]。 - 如果表空间包含只读数据文件或正在进行归档日志模式下的恢复操作,则可能需要额外步骤以确保一致性。 - 对于生产环境,建议与数据库管理员协商并在维护窗口内执行此类操作。 ```sql -- 示例:创建新表空间并迁移数据 CREATE TABLESPACE new_app_data DATAFILE '/u02/oracle/U1/new_data01.dbf' SIZE 100M; ALTER TABLE schema_name.table_name MOVE TABLESPACE new_app_data; ALTER INDEX schema_name.index_name REBUILD TABLESPACE new_app_data; DROP TABLESPACE app_data INCLUDING CONTENTS; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值