首批通过分布式安全可靠测评,为关键业务系统打造
管理目录
更新时间:2026-04-30 18:56:47
OceanBase 数据库的 Oracle 模式支持将一个共享文件系统(NFS)上的文件夹映射成为一个数据库目录对象。目录对象主要在 UTL_FILE 系统包中使用。
创建目录
您可以使用 CREATE DIRECTORY 语句从数据库中创建目录对象。创建目录对象主要用于为共享文件系统上的文件夹指定别名。
注意事项
创建目录对象时,需要注意以下事项:
OceanBase 数据库不会自动为用户在指定的文件系统路径(例如,
/usr/sqldump)下创建文件夹,各级文件夹必须由用户手动创建,例如,用户需要手动执行mkdir。OceanBase 数据库不会检查或判断指定的文件系统路径是否存在以及是否有相应的读写权限。
由于 OceanBase 数据库是分布式数据库,在创建目录对象时,需要保证所有 OBServer 节点都能访问一致的绝对路径,故文件系统路径通常是共享文件系统(例如,NFS)上的一个路径。
创建目录时,当前用户需要拥有
CREATE ANY DIRECTORY权限。创建目录时,需要通过全局变量
secure_file_priv设置待访问的文件系统路径。全局变量
secure_file_priv用于控制数据导入或导出时可以访问的路径。关于全局变量secure_file_priv的详细设置及说明请参见 secure_file_priv。设置方法如下:
在 OBServer 节点上,租户管理员通过本地 Unix Socket 连接集群的 Oracle 租户。
连接示例如下:
obclient -S /home/admin/oceanbase/run/sql.sock -uroot@sys -p********通过本地 Unix Socket 连接 OceanBase 数据库的具体操作及说明,请参见 secure_file_priv。
配置用户可以访问的文件系统路径
/usr/sqldump。SET GLOBAL secure_file_priv = "/usr/sqldump";
命令执行成功后,需要重启会话,修改才能生效。
语句及示例
创建目录的语法如下:
CREATE [OR REPLACE] DIRECTORY <目录对象名> AS <文件系统路径>;
其中,OR REPLACE 表示如果对应的目录对象名已存在,则使用新的文件系统路径替代原有的目录定义。
创建一个目录 sql_file_dir 的示例如下:
CREATE OR REPLACE DIRECTORY sql_file_dir AS '/usr/sqldump';
删除目录
您可以使用 DROP DIRECTORY 语句从数据库中删除目录对象。创建目录时,当前用户需要拥有 DROP ANY DIRECTORY 权限。
注意事项
删除目录对象时,需要注意以下事项:
删除目录对象不会删除共享文件系统上关联的文件夹。
删除目录对象必须具有
DROP ANY DIRECTORY系统权限。当 PL 正在访问相关文件系统中的文件时,不要删除目录。
语句及示例
删除目录的语法如下:
DROP DIRECTORY <目录对象名>;
删除目录 sql_file_dir 的示例如下:
DROP DIRECTORY sql_file_dir;
目录相关视图
目录对象创建成功后,您可以通过以下视图查看目录对象的状态:
DBA_DIRECTORIESDBA_DIRECTORIES视图用于展示租户中所有目录对象的定义,只有SYS用户或者对该视图有查询权限的用户可以查看。字段名称 类型 描述 OWNER VARCHAR2(128) 目录所属的 Owner DIRECTORY_NAME VARCHAR2(128) 目录名称 DIRECTORY_PATH VARCHAR2(4000) 目录路径 ORIGIN_CON_ID NUMBER(38) 租户 ID ALL_DIRECTORIESALL_DIRECTORIES视图用于展示当前用户可访问的目录对象的定义。字段名称 类型 描述 OWNER VARCHAR2(128) 目录所属的 Owner DIRECTORY_NAME VARCHAR2(128) 目录名称 DIRECTORY_PATH VARCHAR2(4000) 目录路径 ORIGIN_CON_ID NUMBER(38) 租户 ID