v$datafile_header 查询datafile 状态

select * from v$datafile ;  

select * from v$datafile_header ;  

select * from v$tablespace ;

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-628033/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-628033/

你提供的这段代码是用于 Oracle 的 `sqlldr`(SQL*Loader)工具进行数据导入的,现在你想将它迁移到 PostgreSQL,即从 Oracle 的 `sqlldr` 转移到 PostgreSQL 的数据导入方式。 --- ## ✅ 原始 Oracle 脚本分析 ```bash IMP_FORM=$ADM_DIR/imp_BJ_T_ZEN_RUI2.ctl bj_ut_log INFO "${CMD_t}: sqlldr ${DB_USER} DATA=${LOAD_DAT}.edit CONTROL=${IMP_FORM} LOG=${LOAD_LOG} BAD=${LOAD_BAD}" >> $LOG_FILE sqlldr ${DB_CONNECT_STRING} DATA=${LOAD_DAT}.edit CONTROL=${IMP_FORM} LOG=${LOAD_LOG} BAD=${LOAD_BAD} >> $LOG_FILE 2>&1 ``` - `sqlldr` 是 Oracle 的批量数据加载工具 - `CONTROL` 文件(`.ctl`)定义了数据格式、表结构、字段映射等 - `DATA` 是数据文件 - `LOG` 是日志文件 - `BAD` 是错误记录文件 --- ## ✅ PostgreSQL 的替代方案 PostgreSQL 没有 `sqlldr`,但有以下替代方式: ### ✅ 替代方案 1:使用 `\COPY` 命令(推荐) `\COPY` 是 `psql` 工具提供的客户端命令,用于导入导出数据,功能类似于 `sqlldr`。 #### 示例脚本(替换 `sqlldr`): ```bash IMP_FORM=$ADM_DIR/imp_BJ_T_ZEN_RUI2.ctl DATA_FILE=${LOAD_DAT}.edit LOG_FILE=${LOAD_LOG} BAD_FILE=${LOAD_BAD} TBL_NAME=BJ_T_ZEN_RUI2 # 执行导入 bj_ut_log INFO "${CMD_t}: psql -c \"\\COPY ${TBL_NAME} FROM '${DATA_FILE}' WITH (FORMAT csv, HEADER false, DELIMITER ',')\" > \"${LOG_FILE}\" 2>&1" >> "$LOG_FILE" psql ${DB_CONNECT_STRING} -c "\COPY ${TBL_NAME} FROM '${DATA_FILE}' WITH (FORMAT csv, HEADER false, DELIMITER ',')" > "${LOG_FILE}" 2>&1 RC=$? if [ ${RC} -ne 0 ]; then bj_ut_log ERROR "${CMD_t}: データインポートに失敗しました。psql" exit ${RC} else bj_ut_log INFO "${CMD_t}: データインポート成功" fi ``` --- ## ✅ 替代方案 2:使用 `pgloader`(高级批量导入工具) 如果你的数据量大、格式复杂,可以使用 `pgloader` 工具。 ### 示例: ```bash pgloader oracle_loader.ctl postgresql://user:pass@localhost/dbname ``` 其中 `oracle_loader.ctl` 是你定义的迁移规则文件。 ### 安装 pgloader: ```bash sudo apt install pgloader # 或使用 Homebrew brew install pgloader ``` --- ## ✅ Oracle 控制文件(.ctl)如何转换为 PostgreSQL? Oracle 的 `.ctl` 文件内容如下(示例): ```ctl LOAD DATA INFILE 'data.csv' INTO TABLE BJ_T_ZEN_RUI2 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ( col1, col2, col3 ) ``` 你可以直接用 `\COPY` 实现类似功能: ```sql \COPY BJ_T_ZEN_RUI2 (col1, col2, col3) FROM 'data.csv' WITH (FORMAT csv, DELIMITER ',', HEADER false); ``` --- ## ✅ Shell 脚本完整替换示例 ```bash DB_CONNECT_STRING="user@localhost:5432" TBL_NAME="BJ_T_ZEN_RUI2" DATA_FILE="/path/to/data.csv" LOG_FILE="/path/to/import.log" BAD_FILE="/path/to/bad_records.log" # 日志记录 bj_ut_log INFO "${CMD_t}: psql -c \"\\COPY ${TBL_NAME} FROM '${DATA_FILE}' WITH (FORMAT csv, HEADER false, DELIMITER ',')\" > \"${LOG_FILE}\" 2>&1" >> "$LOG_FILE" # 执行导入 psql ${DB_CONNECT_STRING} -c "\COPY ${TBL_NAME} FROM '${DATA_FILE}' WITH (FORMAT csv, HEADER false, DELIMITER ',')" > "${LOG_FILE}" 2>&1 RC=$? # 错误处理 if [ ${RC} -ne 0 ]; then bj_ut_log ERROR "${CMD_t}: データインポートに失敗しました。psql" exit ${RC} else bj_ut_log INFO "${CMD_t}: データインポート成功" fi ``` --- ## ✅ 小结 | Oracle 工具 | PostgreSQL 替代方案 | 说明 | |------------------|------------------------|------| | `sqlldr` | `\COPY` 或 `pgloader` | 批量导入数据 | | `.ctl` 文件 | `\COPY` 命令参数 | 定义数据格式 | | `LOG`, `BAD` 文件 | 重定向到文件 | 手动管理日志和错误 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值