12c的PDB創建DIRECTORY要注意與PATH_PREFIX的關系(ORA-65254)


在創建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子句,自動生成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM