從USERS表空間分離表資料和索引

2022-04-04 01:04:02 字數 2724 閱讀 7241

前段時間某公司給做了個**,裝了個11g的資料庫,安裝後只有3個單獨的日誌檔案,歸檔、閃回沒有開啟,**的表資料和索引全建到users表空間,這種設計方法完全是錯誤的,因此需要對資料庫進行整改。

具體為日誌檔案增加到4組8個檔案,分別放在不同的地方,歸檔、閃回開啟;新建3個使用者的表空間,分別用來放資料檔案、索引檔案、臨時檔案,整改方法見下:

1. 查日誌檔案位置:  

select * from v$log;

select * from v$logfile;

--增加日誌

alter database add logfile member

'/home/oracle/app/fast_recovery_area/eytdbs/redo04.log' to group 1,

'/home/oracle/app/fast_recovery_area/eytdbs/redo05.log' to group 2,

'/home/oracle/app/fast_recovery_area/eytdbs/redo06.log' to group 3;

alter database add logfile group 4

('/home/oracle/app/oradata/eytdbs/redo07.log',

'/home/oracle/app/fast_recovery_area/eytdbs/redo08.log') size 50m reuse;

alter system switch logfile;  --多切換幾次日誌

2. 開啟歸檔:

sql> shutdown immediate;        --關閉資料庫

sql> startup mount;      --以mount方式開啟     

sql> alter database archivelog;      --修改執行模式

sql> alter database open;            --開啟資料庫

sql> archive log start;              --啟用、停用自動存檔

sql> alter system switch logfile;         --強制日誌切換進行歸檔

sql> archive log list;        --再查詢資料庫執行模式

3. 開啟閃回:

sql> shutdown immediate; --與上面的歸檔一起做

sql> startup mount;

sql> alter  database flashback on;

sql> alter database open;

4. 建表空間:

--建sns的資料、索引、臨時表空間:

create tablespace snsdata

datafile

'/home/oracle/app/oradata/sns/snsdata.dbf' size 400m reuse autoextend off

logging

online

permanent

extent management local uniform size 10m;

create tablespace snsdindex

datafile

'/home/oracle/app/oradata/sns/snsindex.dbf' size 400m reuse autoextend off

logging

online

permanent

extent management local uniform size 10m;

--修改表空間名:

alter tablespace snsdindex rename to snsindex;

--臨時表空間

create  temporary tablespace snstemp

tempfile

'/home/oracle/app/oradata/sns/snstemp.dbf' size 400m reuse autoextend off

extent management local uniform size 10m;

--修改使用者的預設、臨時表空間:

alter user sns default tablespace snsdata;

alter user sns temporary tablespace snstemp;

5. 分離資料:

--查當前使用者下的所有表:

select 'alter table sns.' || table_name || ' move tablespace snsdata' ||';' from dba_tables where owner='sns';

--查當前使用者的索引:

select 'alter index ' || index_name || ' rebuild tablespace snsindex; '

from user_indexes

where tablespace_name = 'users';

把上面查詢出來的結果粘到command下面執行,即可。

用下面的語句驗證下結果看是否分離完畢:

select table_name,tablespace_name from user_tables where tablespace_name ='snsdata'

--以上僅供參考。

作者「srsunbing」

ORA 01950 表空間 USERS 中無許可權

今天晚上在oracle建立了乙個新的表空間和乙個新的使用者,當我用這個新使用者建立表時,卻出現 ora 01950 表空間 users 中無許可權 我已經把建立表的許可權賦給了此使用者,怎麼還會缺少許可權呢?後面到網上找了一下,原來是沒有把resource和connect 許可權賦給使用者,賦予許可...

Oracle 表空間和臨時表空間

表空間 此空間是用來進行資料儲存的 表 function 儲存過程等 所以是實際物理儲存區域。臨時表空間 主要用途是在資料庫進行排序運算 如建立索引 order by及group by distinct union intersect minus sort merge及join analyze命令 ...

臨時表空間和資料表空間

oracle臨時表空間主要用來做查詢和存放一些緩衝區資料。臨時表空間消耗的主要原因是需要對查詢的中間結果進行排序。重啟資料庫可以釋放臨時表空間,如果不能重啟例項,而一直保持問題sql語句的執行,temp表空間會一直增長。直到耗盡硬碟空間。網上有人猜測在磁碟空間的分配上,oracle使用的是貪心演算法...