2024年1月31日 星期三

更改 Standby DB 的 Temp File 位置

Oracle 版本: 大於 11g


問題描述:

一般來說要更改 Temp File 位置有兩個方法,如果是 small file 格式的 Temporary Tablespace ,那就可以使用 alter tablespace temp add tempfile 新增一個 temp file ,然後再 alter tablespace temp drop tempfile 把不要的 temp file 刪除;如果是 big file 格式的 Temporary Tablespace ,那麼就只能新建一個 Temporary Tablespace 再把舊的 Temporary Tablespace 刪除。


建立 Standby DB 時, Temp File 並不會隨著 Data File 一起 Restore , Standby 在 mount 狀態時並不會使用 Temp File ,只有在 open read only 才會產生 Temp File ,而 Standby 並無法使用 alter tablespace 的指令新增 / 刪除 Temp File ,或者是重建 Temporary Tablespace ,那麼要如何在 Standby 更改 Temp File 位置 ?


解決方法:

由於 Standby 在 mount 狀態下 Temp File 並不會被使用到,因此只要在 mount 狀態下直接更改 Temp File 路徑即可,使用 rman 就可以達成 :

### Temp 位於 filesystem ###

RMAN> run {

        set newname for tempfile '/oradata/oracl/temp01.dbf' to '/oradata/oracl/temp02.dbf';

       switch tempfile all;}


### Temp 位於 ASM ###

RMAN> run {

       set newname for tempfile 7 to '+DATA2';

       switch tempfile all;}


更改之後可以查詢 v$temp 確認路徑已更改 :

### Temp 位於 filesystem ###

SQL> select file#,name from v$tempfile;

     FILE# NAME

---------- -----------------------------------------

         1   /oradata/oracl/temp02.dbf


### Temp 位於 ASM ###

SQL> select file#,name from v$tempfile;

     FILE# NAME

---------- -----------------------------------------

         7   +DATA2


之後在 Standby open read only 就會在新的路徑產生新的 Temp File 。


2024年1月25日 星期四

Point in time recovery 產生 ORA-00285 錯誤

Oracle 版本: 19.15

OS 版本: Linux 7.5


問題描述:

使用 SQL*PLUS 進行 Point in Time Recovery 時產生 ORA-00285 錯誤 :

SQL> recover database until time to_date"('2023-02-17 06:27:00','YYYY-MM-DD HH24:MI:SS')";

ORA-00285: TIME not given as a string constant


嘗試不使用 to_date 轉換也報錯 :

SQL> recover database until time '2023-02-17 06:27:00';

ORA-01861: literal does not match format string


設定 NLS_DATE_FORMAT 日期格式也是不行 :

SQL> alter session set nls_date_format ='YYYY-MM-DD HH24:MI:SS';

Session altered.

SQL> recover database until time '2023-02-17 06:27:00';

ORA-00285: TIME not given as a string constant


問題分析:

ORA-00285 表示日期格式錯誤, SQL*PLUS 所接受的 Point in Time Recovery 的時間格式為 'YYYY-MM-DD:HH24:MI:SS' 。


解決方法:

使用 'YYYY-MM-DD:HH24:MI:SS' 這個時間格式即可 :

SQL> recover database until time '2023-02-17:06:27:00';


ORA-00279: change 6212906414919 generated at 02/17/2023 06:20:24 needed for thread 2

ORA-00289: suggestion : /oradata/FRA/ORCL/archivelog/2023_02_17/o1_mf_2_62700_%u.arc

ORA-00280: change 6212906414919 for thread 2 is in sequence #62700


specify log: {<RET>=suggested | filename | AUTO |CANCEL}