返回首页

gbase数据、南大通用产品文档:GBase8s从命名管道装入数据和将数据卸载到命名管道

更新日期:2024年09月11日

可使用命名管道(也称为先进先出,FIFO)数据文件,来从非标准设备(如磁带机)装入
和卸载到非标准设备。
与普通的操作系统文件不同,命名管道没有 2 GB 大小限制。操作系统打开并检查命名管
道的文件末尾,其方法与普通文件不同。
使用命名管道装入数据
可使用命名管道从外部表装入数据。
要使用命名管道从外部表装入数据,请执行以下步骤:
1. 在 SQL 中 CREATE EXTERNAL TABLE 语句的 DATAFILES 子句内,指定命
名管道。
2. 创建在 DATAFILES 子句中指定的命名管道。
使用操作系统命令创建命名管道。
使用带 -p 选项的 mknod UNIX™ 命令创建命名管道。要避免在 UNIX 上出现
妨碍管道打开的问题,请为管道读程序和管道写程序启动单独的 UNIX 进程,或
使用 O_NDELAY 标志集来打开管道。
3. 使用读取命名管道的程序打开命名管道。
4. 执行 SQL 中的 INSERT 语句。
INSERT INTO employee SELECT * FROM emp_ext;
重要: 如果在执行 INSERT 语句之前不创建和打开命名管道,INSERT 将成功执行,但是不
装入任何行。

FIFO 虚拟处理器
数据库服务器使用 FIFO 虚拟处理器 (VP) 来读写命名管道上的外部表。
缺省 FIFO 虚拟处理器数为 1。
数据库服务器为您在 CREATE EXTERNAL TABLE 语句的 DATAFILES 子句中指定的
每个命名管道使用一个 FIFO VP。例如,假设您使用以下 SQL 语句定义外部表:
CREATE EXTERNAL TABLE ext_items
SAMEAS items
USING (
DATAFILES("PIPE:/tmp/pipe1",
"PIPE:/tmp/pipe2",
"PIPE:/tmp/pipe3"
));
如果对 FIFO VP 使用缺省值 1,数据库在读取完 pipe1 中的所有数据之前不会从 pipe2
读取,在读取完 pipe2 中的所有数据之前不会从 pipe3 读取。


GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 256 -
使用命名管道卸载数据
可使用命名管道将数据从数据库卸载到外部表。
要使用命名管道将数据卸载到外部表,请执行以下步骤:
1. 在 SQL 的 CREATE EXTERNAL TABLE 语句或 SELECT INTO EXTERNAL 语
句的 DATAFILES 子句中,指定命名管道。
DATAFILES ("PIPE:/usr/local/TAPE")
2. 创建在 DATAFILES 子句中指定的命名管道。使用操作系统命令创建命名管道。
3. 使用写入命名管道的程序打开命名管道。
4. 将数据卸载到命名管道。
CREATE EXTERNAL TABLE emp_ext
( name CHAR(18) EXTERNAL CHAR(20),
hiredate DATE EXTERNAL CHAR(10),
address VARCHAR(40) EXTERNAL CHAR(40),
empno INTEGER EXTERNAL CHAR(6) )
USING (
FORMAT 'FIXED',
DATAFILES
("PIPE:/usr/local/TAPE")
);

INSERT INTO emp_ext SELECT * FROM employee;
重要: 如果在执行 SELECT 或 INSERT 语句之前不创建和打开命名管道,卸载将失败,并
生成 ENXIO 错误消息(没有这样的设备或地址)。

使用 PIPE 选项将数据从一个实例复制到另一个
可使用命名管道将数据从一个 GBase 8s 实例复制到另一个,而无需将数据写入中间文
件。
可使用命名管道将数据从一个 GBase 8s 实例卸载,然后装入另一个实例,而无需将数据
写入中间文件。也可使用命名管道将数据从一个表复制到同一个 GBase 8s 实例上的另一
个表。 在以下示例中,数据将从一个实例上的源表复制到第二个实例上的目标表。
必须首先根据所用硬件平台使用以下命令之一创建命名管道。在本示例中,命名管道称为
pipe1。
% mkfifo /work/pipe1
% mknod /work/pipe1
执行以下步骤,将数据从源实例上的表复制到同一台计算机上目标实例中的表。
1. 在源实例上创建源表。在本示例中,源表称为 source_data_table:
CREATE TABLE source_data_table
(

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 257 -
empid CHAR(5),
empname VARCHAR(40),
empaddr VARCHAR(100)
);
2. 在源实例上创建外部表。在本示例中,外部表称为 ext_table:
CREATE EXTERNAL TABLE ext_table
(
empid CHAR(5),
empname VARCHAR(40),
empaddr VARCHAR(100)
)
USING
(DATAFILES
(
'PIPE:/work/pipe1'
)
);
3. 在目标实例上创建目标表。在本示例中,目标表称为 destin_data_table:
CREATE TABLE destin_data_table
(
empid CHAR(5),
empname VARCHAR(40),
empaddr VARCHAR(100)
);
4. 在目标实例上创建外部表。在本示例中,外部表称为 ext_table:
CREATE EXTERNAL TABLE ext_table
(
empid CHAR(5),
empname VARCHAR(40),
empaddr VARCHAR(100)
)
USING
(DATAFILES
(
'PIPE:/work/pipe1_1'
)
);
5. 从 UNIX™ shell 运行以下命令。该命令将数据从 /work/pipe1 重定向到
/work/pipe1_1
cat /work/pipe1 > /work/pipe1_1
6. 在目标实例上运行以下命令,以将数据从命名管道定向到目标表:

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 258 -
INSERT INTO destin_data_table SELECT * FROM ext_table;
7. 在源实例上运行以下命令,以将数据假脱机到命名管道:
INSERT INTO ext_table SELECT * FROM source_data_table;
可使用多个管道,方法是在 DATAFILES 子句中插入多个 PIPE 语句,并为每个语句
创建一个命名管道。

Jiffies
Host CPU busy time ratio
:

“集群锁”页面中锁信息