管理目录

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 DIRECTORYOracle 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 ProcedurePUT_OBJECT Procedure