在創建PDB過程中如果使用了帶PATH_PREFIX的參數,意味着在創建DIRECTORY目錄時需要指定相對路徑,而不能指定其它絕對路徑。來自博客園AskScuti
11g整庫作為一個PDB遷移至阿里雲12c CDB的過程中,在連接PDB,創建DIRECTORY目錄的時候報錯:ORA-65254: invalid path specified for the directory
目錄
1. 項目過程
2. 問題
3. 原因
4. 解決方案
1. 項目過程
11g整庫已經通過數據泵方式完整導出,拷貝到阿里雲平台對應目錄;在12c數據庫中通過PDB$SEED快速創建PDB(注意:語句中帶了參數path_prefix='/u01/app/oracle/oradata/cdbdb/pdb11g/'),連接PDB后,創建相應DIRECTORY時,提示錯誤。
create pluggable database pdb11g admin user pdb11g identified by * path_prefix='/u01/app/oracle/oradata/cdbdb/pdb11g/' file_name_convert=('/u01/app/oracle/oradata/cdbdb/pdbseed/','/u01/app/oracle/oradata/cdbdb/pdb11g/')
2. 問題
[oracle@izj6cf6xxwhjlqnfh4cmnyz:/home/oracle]$sqlplus sys/oracle@pdb11g as sysdba SQL*Plus: Release 12.2.0.1.0 Production on Tue Jun 4 18:41:52 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> show con_name CON_NAME ------------------------- PDB11G SQL> show user USER is "SYS" SQL> !ls /u01/app/oracle/ admin audit cfgtoollogs checkpoints diag oradata product pump SQL> create or replace directory pumpdir as '/u01/app/oracle/pump'; create or replace directory pumpdir as '/u01/app/oracle/pump' * ERROR at line 1: ORA-65254: invalid path specified for the directory
路徑及權限無誤,卻依然報錯。
3. 原因
SQL> !oerr ora 65254 65254, 00000, "invalid path specified for the directory" // *Cause: An absolute path was used in the CREATE DIRECTORY statement. // Since the PDB has set the PATH_PREFIX property, only relative // path is allowed for directories. // *Action: Specify a relative path and reissue the statement. //
因為在創建PDB的語句中指定了PATH_PREFIX子句,所以PATH_PREFIX指定的路徑將作為前綴添加到該PDB的所有本地目錄對象中,只能指定基於PATH_PREFIX的相對路徑。
官方文檔 Release 12.2 Database Administrator’s Guide:Example 38-5 PATH_PREFIX Clause
4. 解決方案
SQL> create or replace directory oracle_path_prefix as 'pump'; Directory created. SQL> select owner o,directory_name dn,directory_path dp,origin_con_id cid from dba_directories where directory_name='ORACLE_PATH_PREFIX'; O DN DP CID ---- ------------------ ----------------------------------------- --- SYS ORACLE_PATH_PREFIX /u01/app/oracle/oradata/cdbdb/pdb11g/pump 4
定義好DIRECTORY_NAME之后,只需要在AS關鍵字后面定義目錄名稱即可,DIRECTORY_PATH會根據PDB中的PATH_PREFIX子句,自動生成。