DCP考试进行实验复习的过程中,在使用外部表时踩了一些小坑,在此记录分享一下:
外部表的定义:
外部表,数据来源于外部操作系统,一个文本文件。建立外部表的时候,不会产生段,页簇等存储结构,只有与表相关的定义放在数据字典中。(内部表的数据都保存在表空间中。)
外部基表是只读的,不允许增删改,不允许 TRUNCATE;
用户创建外部表必须具有指定目录的读写权限(因为外部表查询时会在目录下生成日志文件)。
实操:
(1)创建字典
SQL>grant CREATE ANY directory to DMTEST;
若此时碰到报错:授权者没有此授权权限,原因是默认达梦数据库默认把ANY的授权给禁用了,就算是使用SYSDBA也不行。
解决方案
修改dm.ini 路径:/opt/dmdbms/data/DAMENG/dm.ini
增加一行(可以先查找,如果有就只要把值改成1就行):
ENABLE_DDL_ANY_PRIV = 1
使用SQL命令修改(推荐)
-- sp_set_para_value(1,'ENABLE_DDL_ANY_PRIV',1);
或
alter SYSTEM set 'ENABLE_DDL_ANY_PRIV'=1 both;
用户拥有权限后可进行字典的创建:
CREATE DIRECTORY EMP as '/opt'
(2)创建外部表
此时可以看到,创建方式选择控制文件目录时,下方的控制文件目录名可以选择刚才创建的字典EMP。
(3)根据emp.txt的内容编写控制文件
options
(skip=1
errors=10
log='emp.log'
character_code='UTF-8')
load data
infile 'emp.txt' str X '0d0a'
badfile 'emp.bad'
into table DMTEST.EMP
fields ','
(4)指定目录权限
由于用户创建外部表必须具有指定目录的读写权限(因为外部表查询时会在目录下生成日志文件),若不具有制定目录的读写权限则会出现报错。
文章
阅读量
获赞