您的位置:首页 > 数据库 > Oracle

oracle数据库-修改表空间表数据文件

2016-03-17 15:38 471 查看
数据库-修改表空间表数据语句

表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象存放在指定的表空间中。但主要存放的是表, 所以称作表空间。

数据库中中少存在一个表空间,即SYSTEM的表空间。

SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献。可以这么说,Oracle中很多优化都是基于表空间的设计理念而实现的。

前置机(前置机即相当于一台服务器)数据库可能出问题了,我这边连接提示:

Oracle数据库连接异常!ORA-03135: connection lost contact

Process ID: 496

Session ID: 81 Serial number: 49190

系统资源不足,无法完成请求的服务。

处理步骤

1.首先需要了解是那一台的服务器的数据库出问题了--本案例是在8服务器上;

2.登录该服务器上的数据库查询是否由于表空间或者表数据不够造成的;

3.如果是这个问题则修改或者增加表空间和表数据;

4.修改后询问反应问题的客户的反馈;

这次遇到的问题是在工商扫描软件开发中在8服务器上 

首先查一下表空间是否足够:

1,怎么查表空间,怎么增加表空间

2、表数据文件属于表空间里的表;

--查看表空间空间等详细信息详细

---尽量查找这个语句比较直观一点

select * from (
SELECT D.TABLESPACE_NAME, 
        SPACE || 'M' "SUM_SPACE(M)", 
        BLOCKS "SUM_BLOCKS", 
        SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)", 
        ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || '%' 
           "USED_RATE(%)", 
        FREE_SPACE || 'M' "FREE_SPACE(M)" 
   FROM (  SELECT TABLESPACE_NAME, 
                  ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 
                  SUM (BLOCKS) BLOCKS 
             FROM DBA_DATA_FILES 
         GROUP BY TABLESPACE_NAME) D, 
        (  SELECT TABLESPACE_NAME, 
                  ROUND (SUM (BYTES) / (1024 * 1024), 2) FREE_SPACE 
             FROM DBA_FREE_SPACE 
     
4000
    GROUP BY TABLESPACE_NAME) F 
  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 
 UNION ALL                                                           
 SELECT D.TABLESPACE_NAME, 
        SPACE || 'M' "SUM_SPACE(M)", 
        BLOCKS SUM_BLOCKS, 
        USED_SPACE || 'M' "USED_SPACE(M)", 
        ROUND (NVL (USED_SPACE, 0) / SPACE * 100, 2) || '%' "USED_RATE(%)", 
        NVL (FREE_SPACE, 0) || 'M' "FREE_SPACE(M)" 
   FROM (  SELECT TABLESPACE_NAME, 
                  ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 
                  SUM (BLOCKS) BLOCKS 
             FROM DBA_TEMP_FILES 
         GROUP BY TABLESPACE_NAME) D, 
        (  SELECT TABLESPACE_NAME, 
                  ROUND (SUM (BYTES_USED) / (1024 * 1024), 2) USED_SPACE, 
                  ROUND (SUM (BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE 
             FROM V$TEMP_SPACE_HEADER 
         GROUP BY TABLESPACE_NAME) F 
  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 
 ORDER BY 1)
结果如下:    
其中pydata为数据库表空间,而其他5个表空间是一般数据库通常会自带创建的表空间,具体度娘,其中后两列就分别是使用百分比以及空闲的空间
  


--查看所有表空间文件路径

 select * from  DBA_DATA_FILES 
--结果可以查找相关文件路径



2.select tablespace_name,bytes/1024/1024 from dba_data_files order by bytes; 



#创建一个表空间.DBF数据--注意增加表空间要sys用户

--在一个表空间中增加.DBF数据   假如在一个物理硬盘中磁盘空间已满,需要在另一个盘符中创建数据文件,需要先创建相关路径才能语句添加成功(特别注意)
--惯例是把最大数的dbf文件,+1为新建的dbf文件来创建该数据文件,即完成扩展
 alter  tablespace PYDATA add datafile 'e:\ORA\DATA\PYDATA_33.DBF'  size 20480M;
 
--你先看看是不是这个情况,如果最大块FSFI只有2位数的话,那就要整理碎片了 
 select tablespace_name,sqrt(max(blocks)/sum(blocks))* 
  (100/sqrt(sqrt(count(blocks)))) FSFI 
  from dba_free_space 
  group by tablespace_name order by 1;

--删除表空间

drop tablespace 表空间名

--重新修改表空间大小

alter database datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXDBDATA14.DBF' resize 8000m 

注意事项:A不要设自动增长,因为会在D盘里面不断的增加DBF文件,很容易让D盘0字节,系统报错。应该手工指定dbf文件存放的位置;B定期要检查各表空间,预防无空间系统报错

可能遇到的报错:

#提示ORA-00959:表空间'MC_DATA'不存在的解决

#先确认当前用户的表空间。

select username,default_tablespace,temporary_tablespace from dba_users where username='EXDB';

查看表空间是否自动增长

SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;



#修改数据文件的扩展性

alter database datafile '文件路径' autoextend on next 100m maxsize 4000M

#查看表空间是否扩容 no 为不扩容

select file_name,autoextensible from dba_data_files where tablespace_name = 'EXDBDATA'



#修改表空间为扩容

ALTER DATABASE DATAFILE 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXDBDATA19.DBF' AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息