系统提交任务失败,查到日志得到了关键字Oracle表空间OA的ora-01653无法通过1024扩展,这个问题是数据库表空间创建的时候都会设定表空间的大小,而实际上表空间的数据存储都是生成一个在特定目录下的一个dbf文件,可能有多个,我认为一般建立表空间的时候按照需要设定一个适当大小的表空间,最好将大小设置为可以自增的,这样当这个表空间的数据增长到一定的大小时,会自动创建一个增长量,我这次修改为8M,就是说下次,这个文件存储的数据将要满了的时候,会自动将文件的大小扩展8M,其实我是先把这个表空间加大到1G,才做的这个操作,其实查询到好多个解决这种问题的办法:
第一步、oracle查询表空间是否已满:
select dbf.tablespace_name, dbf.totalspace "总量(M)", dbf.totalblocks as 总块数, dfs.freespace "剩余总量(M)", dfs.freeblocks "剩余块数", (dfs.freespace / dbf.totalspace) * 100 "空闲比例" from (select t.tablespace_name, sum(t.bytes) / 1024 / 1024 totalspace, sum(t.blocks) totalblocks from dba_data_files t group by t.tablespace_name) dbf, (select tt.tablespace_name, sum(tt.bytes) / 1024 / 1024 freespace, sum(tt.blocks) freeblocks from dba_free_space tt group by tt.tablespace_name) dfs where trim(dbf.tablespace_name) = trim(dfs.tablespace_name);
或者
SELECT Total.name "Tablespace Name", Free_space, (total_space - Free_space) Used_space, total_space FROM (select tablespace_name, sum(bytes / 1024 / 1024) Free_Space from sys.dba_free_space group by tablespace_name) Free, (select b.name, sum(bytes / 1024 / 1024) TOTAL_SPACE from sys.v_$datafile a, sys.v_$tablespace B where a.ts# = b.ts# group by b.name) Total WHERE Free.Tablespace_name = Total.name;
第二步、再查看表空间是否开启了自动扩展的功能
SELECT T.TABLESPACE_NAME, D.FILE_NAME, D.AUTOEXTENSIBLE, D.BYTES, D.MAXBYTES, D.STATUS FROM DBA_TABLESPACES T, DBA_DATA_FILES D WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME ORDER BY TABLESPACE_NAME, FILE_NAME;
我的表空间剩余已经小于0.5%了。
第三步、也就是解决问题的具体方法,前边只是查询一些具体项,具体解决方式我找到有以下四种:
1.
ALTER TABLESPACE ***_TRD ADD DATAFILE ‘D:\Oracle\PRODUCT\10.2.0\ORADATA\DBFILE\TRD_2.DBF’ SIZE 1024M;
2.
ALTER TABLESPACE ***_TRD ADD DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD_2.DBF’ SIZE 1024M AUTOEXTEND ON NEXT 8M MAXSIZE 10240M;
3.
ALTER DATABASE DATAFILE ‘D:\ORACLE\10.2.0\ORADATA\HZXM\OA2.DBF’ AUTOEXTEND ON NEXT 8M MAXSIZE 2048M;
4.
ALTER DATABASE DATAFILE ‘D:\ORACLE\10.2.0\ORADATA\HZXM\OA2.DBF’ RESIZE 1024M;
而我解决的方式是4和3,我是先把表空间从原来的512M增加到1024M,后来想以后不用这么麻烦了,毕竟数据又快到达1024M的时候还会出现问题,给客户添加问题,也给我添加问题(ps:毕竟咱们上班都算是比较晚的,怎么也得七点多八点才起来,特殊情况除外,不过特殊情况很少,客户大早上没到七点就用电话给我整醒了,说系统出了问题,/233),所以我让这个问题在出现的时间延后一点,没准下次我想起来了,没等他快满了,我又给他加大了呢,所以我就讲这个最大值从1024,不是自增的 变为自增到2048M为止,这样就好了。其实我觉得创建数据库的时候直接设置成自增的不就得了,哪有这么多麻烦事儿啊。
顺便说一下数据库的使用,由于这个操作是需要Oracle的dba权限的,而我知道的用户名都没有DBA权限,以前的文档啊都没记录,前同事早跑没影儿了,,,后来在数据的操作系统上用:sqlplus / as sysdba直接就能用dba权限去操作,我还顺便将一个用户名赋予了dba权限,/233,这样下回即使忘记(想不起来)了这个命令,我还是会记得登陆数据的常用用户名和密码,/233,别的没了。
ps:其实已经有很多个博客啥的说明了解决这个问题的方法,我就是想记录一下,咱也要不断学习不是啊。
想了想,我还是附上操作记录吧,毕竟我的记性实在是不好:
Microsoft Windows [版本 6.1.7600]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>TNSPING HZXM
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 13-9月 -
2017 08:46:14
Copyright (c) 1997, 2005, Oracle. All rights reserved.
已使用的参数文件:
D:\oracle\10.2.0\db_1\network\admin\sqlnet.ora
已使用 TNSNAMES 适配器来解析别名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 192.168.254.11)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SER
VICE_NAME = hzxm)))
OK (0 毫秒)
C:\Users\Administrator>SQLPLUS /NOLOG
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 9月 13 08:46:48 2017
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> SELECT Total.name "Tablespace Name",
2 Free_space,
3 (total_space - Free_space) Used_space,
4 total_space
5 FROM (select tablespace_name, sum(bytes / 1024 / 1024) Free_Space
6 from sys.dba_free_space
7 group by tablespace_name) Free,
8 (select b.name, sum(bytes / 1024 / 1024) TOTAL_SPACE
9 from sys.v_$datafile a, sys.v_$tablespace B
10 where a.ts# = b.ts#
11 group by b.name) Total
12 WHERE Free.Tablespace_name = Total.name;
SP2-0640: 未连接
SQL> quit();
用法: { EXIT | QUIT } [ SUCCESS | FAILURE | WARNING | n |
<variable> | : <bindvariable> ] [ COMMIT | ROLLBACK ]
C:\Users\Administrator>SQLPLUS
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 9月 13 09:25:15 2017
Copyright (c) 1982, 2005, Oracle. All rights reserved.
请输入用户名: oa
输入口令:
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> grant dba to oa;
grant dba to oa
*
第 1 行出现错误:
ORA-01031: 权限不足
SQL> quit();
用法: { EXIT | QUIT } [ SUCCESS | FAILURE | WARNING | n |
<variable> | : <bindvariable> ] [ COMMIT | ROLLBACK ]
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 断开
C:\Users\Administrator>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 9月 13 09:25:57 2017
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> grant dba to oa
2 ;
SP2-0640: 未连接
SQL> exit;
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 9月 13 09:55:36 2017
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> grant dba to oa;
授权成功。
SQL> ALTER DATABASE DATAFILE 'D:\ORACLE\10.2.0\ORADATA\HZXM\OA2.DBF' RESIZE 1024
M;
数据库已更改。
SQL>
ALTER DATABASE DATAFILE 'D:\ORACLE\10.2.0\ORADATA\HZXM\OA2.DBF' AUTOEXTEND ON NEXT 8M MAXSIZE 2048M;
数据库已更改。
SQL>