管理目录
Autonomous Database on Dedicated Exadata Infrastructure 支持您在数据库中创建目录,在其中存储文件,就像在 OS 文件系统中一样。这种存储文件的能力在导出和导入数据时特别有用。
相关主题
删除目录
使用数据库 DROP DIRECTORY
命令删除目录对象。
例如,以下命令将删除数据库目录对象 staging
:
DROP DIRECTORY staging;
DROP DIRECTORY
命令不会删除目录中的文件。如果要删除目录和目录中的文件,请首先使用过程 DBMS_CLOUD.DELETE_FILE
删除这些文件。有关更多信息,请参见DELETE_FILE Procedure 。
要删除目录,您必须具有 DROP ANY DIRECTORY
系统权限。ADMIN 用户被授予 DROP ANY DIRECTORY
系统权限。ADMIN 用户可以向其他用户授予 DROP ANY DIRECTORY
系统权限。
有关详细信息,请参阅 Oracle Database 19c SQL Language Reference 中的 DROP DIRECTORY 或 Oracle Database 23ai SQL Language Reference 。
注意:
-
如果只想删除目录而不删除目录中的文件,则删除目录后,可以查看文件系统中的所有文件,包括所删除目录中的任何文件,如下所示:
CREATE OR REPLACE DIRECTORY ROOT_DIR AS '';
然后使用以下命令列出
ROOT_DIR
的内容:SELECT * FROM DBMS_CLOUD.LIST_FILES('ROOT_DIR');
要对 ADMIN 以外的用户运行
DBMS_CLOUD.LIST_FILES
,您需要向该用户授予对该目录的读取权限。有关更多信息,请参见 LIST_FILES Function 。 -
DROP DIRECTORY
命令不会删除底层文件系统目录。Autonomous Database 管理底层文件系统目录;用户不会删除文件系统目录。
列出目录的内容
使用函数 DBMS_CLOUD.LIST_FILES
列出目录的内容。
例如,要列出 stage
目录的内容,请运行以下查询:
SELECT * FROM DBMS_CLOUD.LIST_FILES
('STAGE');
要对 ADMIN 以外的用户运行 DBMS_CLOUD.LIST_FILES
,您需要向该用户授予对该目录的读取权限。有关更多信息,请参见 LIST_FILES Function 。
在云对象存储和目录之间复制文件
使用过程 DBMS_CLOUD.PUT_OBJECT
将文件从目录复制到云对象存储。使用过程 DBMS_CLOUD.GET_OBJECT
将文件从云对象存储复制到目录。
例如,要将文件从云对象存储复制到 stage
目录,请运行以下命令:
BEGIN
DBMS_CLOUD.GET_OBJECT(
credential_name => 'DEF_CRED_NAME',
object_uri => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/cwallet.sso',
directory_name => 'STAGE');
END;
/
在此示例中,object_uri
是 Oracle Cloud Infrastructure Swift URI,用于指定 us-phoenix-1
区域中 mybucket
存储桶中的 cwallet.sso
文件。(idthydc0kinr
是存储桶所在的对象存储名称空间。)有关支持的 URI 格式的信息,请参见 Cloud Object Storage URI Formats 。
要对 ADMIN 以外的用户运行 DBMS_CLOUD.GET_OBJECT
,需要向该用户授予对该目录的写入权限。
要对 ADMIN 以外的用户运行 DBMS_CLOUD.PUT_OBJECT
,您需要向该用户授予对该目录的读取权限。
有关更多信息,请参见GET_OBJECT Procedure 和PUT_OBJECT Procedure 。