在Debian中使用sqlplus前,需先安装Oracle Instant Client(包含sqlplus工具)。步骤如下:
instantclient-basic-linux.x64-21.x.x.x.x.zip)和SQL*Plus包(如instantclient-sqlplus-linux.x64-21.x.x.x.x.zip)。/opt/oracle/instantclient目录(需创建该目录),并通过符号链接让系统识别sqlplus:sudo mkdir -p /opt/oracle/instantclient
sudo unzip instantclient-basic-linux.x64-*.zip -d /opt/oracle/instantclient
sudo unzip instantclient-sqlplus-linux.x64-*.zip -d /opt/oracle/instantclient
sudo ln -s /opt/oracle/instantclient/sqlplus /usr/bin/sqlplus # 创建全局可执行链接
~/.bashrc(或~/.profile),添加以下内容以配置Oracle客户端环境:export ORACLE_HOME=/opt/oracle/instantclient
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME:$PATH
执行source ~/.bashrc使配置生效。使用sqlplus连接Oracle数据库,支持本地/远程连接:
sqlplus / as sysdba
sqlplus username/password@//hostname:port/service_name
示例(连接本地数据库ORCL,用户scott,密码tiger):sqlplus scott/tiger@//localhost:1521/ORCL
SPOOL命令可将查询结果导出为文本文件(如CSV),适用于小规模数据或简单结构导出:
SPOOL /path/to/output.csv
SELECT column1, column2 FROM table_name WHERE condition;
SPOOL OFF
employees表中2020年后入职的员工数据到/tmp/employees_2020.csv:SPOOL /tmp/employees_2020.csv
SELECT employee_id, first_name, last_name, hire_date
FROM employees
WHERE hire_date > TO_DATE('2020-01-01', 'YYYY-MM-DD');
SPOOL OFF
注意:导出的CSV文件需手动处理分隔符(如用sed替换列分隔符为逗号)。LOAD DATA命令可将文本文件(如CSV)导入到Oracle表中,适用于结构匹配的小规模数据导入:
input.csv),确保字段顺序与表结构一致,分隔符统一(如逗号)。LOAD DATA INFILE命令导入数据:LOAD DATA INFILE '/path/to/input.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ',' -- 指定字段分隔符(根据CSV文件调整)
LINES TERMINATED BY '\n' -- 指定行分隔符(Linux为\n,Windows为\r\n)
(column1, column2, column3); -- 指定导入的列名(需与文件字段顺序一致)
/tmp/employees_2020.csv导入到employees表:LOAD DATA INFILE '/tmp/employees_2020.csv'
INTO TABLE employees
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(employee_id, first_name, last_name, hire_date);
注意:导入前需确保表结构已存在,且用户有INSERT权限。对于大规模数据或需要保留元数据(如表结构、索引)的场景,推荐使用Oracle Data Pump工具(需SYSDBA权限创建目录对象):
CREATE DIRECTORY data_pump_dir AS '/path/to/dump_directory';
GRANT READ, WRITE ON DIRECTORY data_pump_dir TO username;
expdp username/password@//hostname:port/service_name \
DIRECTORY=data_pump_dir \
DUMPFILE=export.dmp \
LOGFILE=export.log \
FULL=y; -- FULL=y表示导出整个数据库,可替换为SCHEMAS=username导出特定用户
impdp username/password@//hostname:port/service_name \
DIRECTORY=data_pump_dir \
DUMPFILE=export.dmp \
LOGFILE=import.log \
FULL=y; -- 参数与导出一致
EXP_FULL_DATABASE、IMP_FULL_DATABASE)。SELECT权限用于导出,INSERT权限用于导入,Data Pump需EXP_FULL_DATABASE/IMP_FULL_DATABASE)。data_pump_dir需为服务器上的有效路径)。export.log、import.log),确认操作是否成功。