文章來源: 原創adler_cn,大路
場景展示:
通過在某一臺node節點上執行shell 腳本,正常會同步到其他node節點上,事實並不是如此,我們發現執行完腳本之後,RAC服務器上生成的tablespace 文件,並不能正確,
錯誤結果類似:'/u01/app/oracle/product/12.2.0/db_1/dbs/adler.dat' 這樣的生成路徑,這是不正確的,是單機節點的表現結果,
正常結果應該類似: +DATA/ORCL/99B08294CD7F045EE0511061480A4ADC/DATAFILE/adler.290.1029008888
後果:不能正常生成tablespace ,將會導致數據不能正常同步,問題很嚴重。
我們該如何解決類似的錯誤?
以下爲解決辦法:
1、先清理報錯的事項,如賬號和角色
drop user alder cascade;
drop role alder_REP_ROLE;
drop role alder_APP_ROLE;
2、查詢空間表相關信息
select name from v$datafile; #查詢表空間
select tablespace_name,status from dba_tablespaces; #查詢表空間相關信息
3、操作,先offline ,再執行刪除操作;步驟:第一步執行 select name from v$datafile; 獲取file_name,第二步執行 select tablespace_name,status from dba_tablespaces; 獲取tablespace_name;
第一步:alter database datafile '/u01/app/oracle/product/12.2.0/db_1/dbs/adler.dat' offline drop;
第二步:drop tablespace adler including contents; #刪除以上表空間
drop tablespace adler including contents and datafiles; #刪除以上表空間和物理文件,和上面語句有一定差別,不過都可以執行
提示: 按照以上的辦法,把其他需要重新生成的表空間和物理文件刪除
4、驗證結果
select tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 0) total_space
from dba_data_files
order by tablespace_name; #查詢表空間相關信息
select tablespace_name,file_name from dba_temp_files; # 查詢臨時表空間
5、重新執行shell 腳本,重新生成tablespace 表空間
6、表空間操作(補充)
查詢:
SELECT tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 0) total_space
FROM dba_data_files
ORDER BY tablespace_name;
新增操作:
create tablespace SIRM2
datafile '+DATA/ORCL/99B08294CD7F045EE0539061480A4ADC/DATAFILE/SIRM2.dbf' size 1024M
autoextend on next 10M maxsize unlimited
EXTENT MANAGEMENT local autoallocate
segment space management auto;
刪除操作:
drop tablespace SIRM2 including contents and datafiles;
7、用戶刪除操作(補充)
刪除用戶提示,無法刪除在用用戶
首先將索要刪除的用戶鎖定(這句必須執行):
alter user 用戶名 account lock;
查看當前用戶佔用資源:
select saddr,sid,serial#,paddr,username,status from v$session where username = '用戶名';
然後可以看到status 爲 INACTIVE 的記錄;
執行以下殺死進程的sql(下面的兩個參數是status 爲 INACTIVE 時的記錄):
alter system kill session 'sid,serial#';
執行刪除用戶操作
drop user 用戶名 cascade;