記一次Oracle釋放表空間,還原數據實操

首先介紹一下項目背景,這是一個java的後端平臺,運行在win2008server平臺上,主要存圖片和視頻的,佔空間比較大,Oracle數據庫(你懂的,崩潰的節奏)。
一張圖片表主要用於存儲blob類型的圖片數據,硬盤中共也就800G,發現單個表空間數據文件增加到30G左右,硬盤就剩下30G左右的空間,立刻就要爆表了,領導非常着急,催的特別急,無奈我是一臉懵逼,也沒有詳細的記錄文檔,每張表都不知道幹嗎的。
最後經過請教當年寫項目的大佬,獲得方案,備份一年的數據,truncate表,直接刪除表空間,而後從新創建表空間,下面記錄了一些當時的用的sql語句。 java

查看各個表空間大小
        select a.tablespace_name, round(a.total_size) "total_size(MB)",  
        round(a.total_size)-round(b.free_size,3) "used_size(MB)",  
        round(b.free_size,3) "free_size(MB)", round(b.free_size/total_size*100,2)||'%' free_rate  
        from ( select tablespace_name, sum(bytes)/1024/1024 total_size  
                     from dba_data_files  
                     group by tablespace_name ) a,  
                    ( select tablespace_name, sum(bytes)/1024/1024 free_size  
                        from dba_free_space  
                     group by tablespace_name ) b  
                     where a.tablespace_name = b.tablespace_name(+); 

查看錶空間
        select tablespace_name,file_id,file_name,
        round(bytes/(1024*1024),0) total_space
        from dba_data_files
        order by tablespace_name

        select file_name,autoextensible,increment_by from dba_data_files 
        where tablespace_name='表空間名稱'    

清空數據  有可能表空間仍沒有釋放,能夠使用以下語句:
        truncate table  pecprocesspic 
        alter table pecprocesspic  deallocate   UNUSED KEEP 0;

刪除表空間,刪除無任何數據對象的表空間
        drop tablespace wz_img

刪除有任何數據對象的表空間(操做需謹慎,必須備份好數據!)
        drop tablespace wz_img including contents and datafiles; 

建立表空間
        create tablespace 表空間名稱 datafile 'D:\app\Administrator\oradata\orcl\表空間文件名稱.ora' size 512m autoextend on next 256m maxsize unlimited;
添加表空間文件
        alter tablespace 表空間文件 add datafile 'D:\app\Administrator\oradata\orcl\表空間文件名稱.ora' size 512m autoextend on next 256m maxsize unlimited; 

    這是一些重要的sql語句,其餘的備份還原就不寫了,都是經過pl/sql操做的,不難,很大的數據量,備份了將近七天左右,還原了三天左右。
相關文章
相關標籤/搜索