以x行为一批,将表/视图导出到.csv



服务器是Oracle Database 12c Enterprise Edition Release 12.1.0.2.0

我有很多不同大小的表/视图(1到2500万行x 5到100列(。

我只能通过Oracle SQL Developer访问服务器。

由于服务器硬件的限制,我不能使用";导出向导"因此,我使用以下简单的查询将每个表拆分为100万个"块":

SELECT * 
FROM [my_table]
OFFSET [rows_extracted_already] ROWS
FETCH NEXT 1000000 ROWS ONLY;

然后我得到一个查询结果->右键单击->导出->使用导出向导->重复

这需要很长时间,我似乎找不到一个简单的方法来做到这一点。

您需要一个"订单BY";子句,该子句使用唯一索引来加快速度。没有";ORDER BY";行是随机选择的,我不确定你会得到什么。唯一索引将允许查询快速跳转到下一组记录的开头,而无需进行完整的表扫描。

我创建了一个实用程序run_export_dir_tables.ps1,用于将表导出到csv文件。该实用程序从sql目录中读取所有文件并导出到csv文件。该实用程序使用sqlplus实用程序,可实现高性能
该实用程序是在powershell中编写的,您可以通过变量配置许多参数。

# Column separator for csv file 
$COLSEP=";"
# NLS_NUMERIC_CHARACTERS
$NLS_NUMERIC_CHARACTERS=".,"
$NLS_DATE_FORMAT="DD.MM.YYYY HH24:MI:SS"
#csv file extension
$csv_ext=".csv"
#Set NLS_LANG for session sqlplus 
$NLS_LANG="AMERICAN_AMERICA.CL8MSWIN1251"
#$NLS_LANG="RUSSIAN_CIS.CL8MSWIN1251"
#$NLS_LANG="AMERICAN_AMERICA.UTF8"

最新更新