OceanBase 数据库的 Oracle 模式支持将一个共享文件系统(NFS)上的文件夹映射成为一个数据库目录对象。目录对象主要在 UTL_FILE
系统包中使用。
创建目录
您可以使用 CREATE DIRECTORY
语句从数据库中创建目录对象。创建目录对象主要用于为共享文件系统上的文件夹指定别名。
创建目录的语法如下:
CREATE [OR REPLACE] DIRECTORY <目录对象名> AS <文件系统路径>;
其中:
OR REPLACE
表示如果对应的目录对象名已存在,则使用新的文件系统路径替代原有的目录定义。
创建一个目录 sql_file_dir
的示例如下:
obclient> CREATE OR REPLACE DIRECTORY sql_file_dir AS '/usr/sqldump';
删除目录
您可以使用 DROP DIRECTORY
语句从数据库中删除目录对象。
注意
当 PL 正在访问相关文件系统中的文件时,不要删除目录。
删除目录的语法如下:
obclient> DROP DIRECTORY <目录对象名>;
删除目录 sql_file_dir
的示例如下:
obclient> DROP DIRECTORY sql_file_dir;
注意事项
创建目录对象时,需要注意以下事项:
OceanBase 数据库不会自动为用户在指定的文件系统路径(例如,
/usr/sqldump
)下创建文件夹,各级文件夹必须由用户手动创建,例如,用户需要手动执行mkdir
。OceanBase 数据库不会检查或判断指定的文件系统路径是否存在以及是否有相应的读写权限。
由于 OceanBase 数据库是分布式数据库,在创建目录对象时,需要保证 OBServer 所有节点都能访问一致的绝对路径,故文件系统路径通常是共享文件系统(例如,NFS)上的一个路径。
创建目录对象必须具有
CREATE ANY DIRECTORY
系统权限。
删除目录对象时,需要注意以下事项:
删除目录对象不会删除共享文件系统上关联的文件夹。
删除目录对象必须具有
DROP ANY DIRECTORY
系统权限。
目录相关视图
目录对象创建成功后,您可以通过以下视图查看目录对象的状态:
DBA_DIRECTORIES
DBA_DIRECTORIES
视图用于展示租户中所有目录对象的定义,只有sys
用户或者对该视图有查询权限的用户可以查看。字段名称 类型 是否可以为 NULL 描述 OWNER VARCHAR2(128) NO 目录所属的 Owner DIRECTORY_NAME VARCHAR2(128) NO 目录名称 DIRECTORY_PATH VARCHAR2(4000) NO 目录路径 ORIGIN_CON_ID NUMBER(38) NO 租户 ID ALL_DIRECTORIES
ALL_DIRECTORIES
视图用于展示当前用户可访问的目录对象的定义。字段名称 类型 是否可以为 NULL 描述 OWNER VARCHAR2(128) NO 目录所属的 Owner DIRECTORY_NAME VARCHAR2(128) NO 目录名称 DIRECTORY_PATH VARCHAR2(4000) NO 目录路径 ORIGIN_CON_ID NUMBER(38) NO 租户 ID