迷路的0161

博客园 首页 联系 订阅 管理

系统提交任务失败,查到日志得到了关键字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>

posted on 2017-09-13 10:37  迷路的0161  阅读(735)  评论(0编辑  收藏  举报