前段時間某公司給做了個**,裝了個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使用的是貪心演算法...