0%

Oracle表空间扩容

在新装完的oracle数据库中导入数据,由于数据量比较大,报以下错误;

1
2
ORA-39171: Job is experiencing a resumable wait.
ORA-01653: unable to extend table AIR_FORECAST.T_WRF_DATA by 8192 in tablespace USERS

此故障是由于数据库的表空间满了,造成的数据无法正常导入,我们需要手动来扩容表空间

查询当前实例名

1
select instance_name from v$instance;

查询表空间名

1
select tablespace_name from sys.dba_tablespaces;

查询默认表空间

1
2
3
4
5
select a.property_name, a.property_value from database_properties a where a.property_name like '%DEFAULT%';
……
DEFAULT_PERMANENT_TABLESPACE
USERS
……

查看表空间使用情况

在PL SQL Developer 中执行一下SQL语句

1
SELECT a.tablespace_name "表空间名",a.bytes / 1024 / 1024 "表空间大小(M)",(a.bytes - b.bytes) / 1024 / 1024 "已使用空间(M)",b.bytes / 1024 / 1024 "空闲空间(M)",round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "使用比"FROM (SELECT tablespace_name, sum(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) a,(SELECT tablespace_name, sum(bytes) bytes, max(bytes) largest FROM dba_free_space GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC

查看USERS表空间文件及使用量

1
SELECT file_name,tablespace_name,bytes / 1024 / 1024 "bytes MB",maxbytes / 1024 / 1024 "maxbytes MB" FROM dba_data_files WHERE tablespace_name = 'USERS';

查看USERS表空间文件是否自动扩展

1
SELECT file_id, file_name, tablespace_name, autoextensible, increment_by FROM dba_data_files WHERE tablespace_name = 'USERS' ORDER BY file_id desc;

查看”autoextensible”对应的值是YES还是NO,若是NO,说明MSMS表空间的自动扩展功能没有开,改成YES就可以了。

查询所有的schema所占空间大小

1
select owner, sum(bytes)/1024/1024/1024 schema_size_gig from sys.dba_segments group by owner;

增加表空间文件

查看表空间文件

1
SELECT * FROM dba_data_files t WHERE t.tablespace_name='USERS';

查看得知我们的表空间文件在/u01/app/oracle/oradata/sx21/目录下,新建的文件也放在此目录下,方便后期管理

查看表空间文件自增长文件最大值

因为Oracle的物理文件最大只允许4194303个数据块(datablock).需要查看一下本地block块大小

1
2
3
4
5
6
数据块的大小        物理文件的最大值 M
===============================================
2048 8191 M
4096 16383 M
8192 32767 M
16384 65535 M

查看oracle数据库block大小

1
2
3
4
5
6
7
8
9
10
11
12
13
在sqlplus窗口中执行
SQL> show parameter db_block_size;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
在pl/SQL窗口中执行
SQL> select value from v$parameter where name='db_block_size';

VALUE
--------------------------------------------------------------------------------
8192

添加表空间文件

1
SQL> alter tablespace USERS add datafile '/u01/app/oracle/oradata/sx21/users02.dbf' size 5M autoextend on maxsize 32767M;

ASM添加表空间文件

1
2
SQL> alter tablespace USERS add datafile '+DATA' size 5M autoextend on maxsize 32767M;
SQL> select name from v$datafile;

注意:ASM增加数据文件或者创建表空间不需要指定数据文件名,只要指定 diskgroup即可,ASM会自动命名。

验证添加的表空间文件

1
2
3
4
5
6
7
8
9
10
11
SQL> select file_name,file_id,tablespace_name FROM dba_data_files WHERE tablespace_name='USERS';

FILE_NAME
--------------------------------------------------------------------------------
FILE_ID TABLESPACE_NAME
---------- ------------------------------
/u01/app/oracle/oradata/sx21/users01.dbf
4 USERS

/u01/app/oracle/oradata/sx21/users02.dbf
5 USERS

扩展阅读

http://www.dba-oracle.com/t_bigfile_tablespace_tips.htm

参考资料:
http://blog.csdn.net/u013806814/article/details/48400861
http://blog.itpub.net/27042095/viewspace-1100993/
http://blog.sina.com.cn/s/blog_9d4799c701017pw1.html
https://blog.csdn.net/qq_33547950/article/details/79257882