自动扩展表空间大小

2025-05-06 04:34:17

自动扩展表空间大小 一般情况下,数据库一般是不对外开放的,如果每次数据库表空间不足都需要远程协助解决的话,可能有点麻烦,可以通过编写存储过程,制定定时oracle job 来增加表空间大小!(1)增加表空间脚本(2)存储编写过程中的细节注意1:单引号转义2:拼接字符串引起的ORA-00911: invalid character3:执行存储过程引起的ORA-01031: insufficient privileges4:添加表空间引起的ORA-15124:ASM file name包含无效字符详细查询表空间大小参考经验:http://jingyan.baidu.com/article/3c48dd3467b269e10be35819.html详细创建oracle job参考经验:http://jingyan.baidu.com/article/a3761b2bbbdd2f1577f9aa75.html

(1)增加表空间脚本

1、CREATE OR REPLACE PR蚪嬷吃败OCEDURE PRO_ADD_DATAFILEISV_TABLESPACE_NAME VARCHAR2(20);V_T帆歌达缒ABLESPACE_USE NUMBER;V_DATA_FILE_NUM NUMBER;V_ADD_DATA_FILE_SQL VARCHAR2(400);BEGIN V_TABLESPACE_NAME :='TS_320'; --获取表空间使用率 SELECT round((TOTAL_M-FREE_M)/TOTAL_M,3) INTO V_TABLESPACE_USE FROM(SELECT A.TABLESPACE_NAME,B.TOTAL/1024/1024 TOTAL_M,(B.TOTAL-A.USE)/1024/1024 FREE_M FROM(select c.tablespace_name,(c.p_use-d.p_free) as use from(select tablespace_name,sum(bytes) as p_use from dba_data_fileswhere tablespace_name NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')group by tablespace_name) C,(select tablespace_name,sum(bytes) as p_free from dba_free_spacewhere tablespace_name NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')group by tablespace_name) Dwhere C.tablespace_name=D.tablespace_name) A ,(WITH TABLESPACE_TOTAL AS(SELECT tablespace_name,sum(MAXBYTES) TOTAL FROM DBA_DATA_FILES TWHERE T.TABLESPACE_NAME NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')AND T.AUTOEXTENSIBLE='YES' group by tablespace_nameUNION ALLSELECT tablespace_name,sum(bytes) TOTAL FROM DBA_DATA_FILES TWHERE T.TABLESPACE_NAME NOT IN ('USERS','SYSAUX','UNDOTBS1','SYSTEM','UNDOTBS2')AND T.AUTOEXTENSIBLE='NO' group by tablespace_name)SELECT TABLESPACE_NAME,SUM(TOTAL) TOTAL FROM TABLESPACE_TOTAL GROUP BY TABLESPACE_NAME) BWHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME) S WHERE S.TABLESPACE_NAME=V_TABLESPACE_NAME;--获取最大数据文件号SELECT MAX(TO_NUMBER(SUBSTR(FILE_NAME,28,2))) INTO V_DATA_FILE_NUM FROM DBA_DATA_FILESWHERE TABLESPACE_NAME=V_TABLESPACE_NAME and file_name like '%zxx%'; if V_TABLESPACE_USE > 0.75 then V_DATA_FILE_NUM :=V_DATA_FILE_NUM+1; if V_DATA_FILE_NUM >= 10 then V_ADD_DATA_FILE_SQL := 'alter tablespace '||V_TABLESPACE_NAME||' add datafile '||''''||'+DATADG/orcl/datafile/zxx_0'||V_DATA_FILE_NUM||'.dbf '||''''||'size 30G'; else V_ADD_DATA_FILE_SQL := 'alter tablespace '||V_TABLESPACE_NAME||' add datafile '||''''||'+DATADG/orcl/datafile/zxx_00'||V_DATA_FILE_NUM||'.dbf '||''''||'size 30G '; end if; execute immediate V_ADD_DATA_FILE_SQL; end if;END;如果需要使用该脚本在你库中需要修改的地方(用粗体标记):1.V_TABLESPACE_NAME的初始化值2.获取最大数据文件号3.更改使用率的阈值4.修改拼接字符串如果需要对多个表空间大小自动扩展需要编写cursor循环判断!

(2)存储编写过程中的细节注意

1、单引号转义拼接字符串中出现单引号需要转义select'''' from dual;结果为:'select ''''||'name'||'''' from dual;结果为:'name'

自动扩展表空间大小

2、拼接字符串引起的ORA-00911: invalid character正确拼接V_ADD_DATA_FILE_SQL := 'alter tablespace '||V_TABLESPACE_NAME||' add datafile '||''''||'+DATADG/orcl/datafile/zxx_0'||V_DATA_FILE_NUM||'.dbf '||''''||'size 30G';错误拼接:最后多了一个分号 “;”V_ADD_DATA_FILE_SQL := 'alter tablespace '||V_TABLESPACE_NAME||' add datafile '||''''||'+DATADG/orcl/datafile/zxx_0'||V_DATA_FILE_NUM||'.dbf '||''''||'size 30G;';

自动扩展表空间大小

3、执行存储过程引起的ORA-01031: insufficient privileges尽管该用户已经有dba权限,但是还需要针对赋予对应权限grant select on dba_data_files to zxx;grant select on dba_free_space to zxx;grant alter tablespace to zxx;zxx是只用用户

自动扩展表空间大小

4、添加表空间引起的ORA-15124:ASM file name包含无效字符正确脚本:V_ADD_DA皈其拄攥TA_FILE_SQL := 'alter tablespace '||V_TABLESPACE_NAME||' add datafile '||''''||'+DATADG/orcl/datafile/zxx_00'||V_DATA_FILE_NUM||'.dbf'||''''||'size 30G ';错误脚本:dbf和单引号之间存在空格V_ADD_DATA_FILE_SQL := 'alter tablespace '||V_TABLESPACE_NAME||' add datafile '||''''||'+DATADG/orcl/datafile/zxx_00'||V_DATA_FILE_NUM||'.dbf '||''''||'size 30G ';

自动扩展表空间大小
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢