日期:2014-05-17  浏览次数:20863 次

oracle导入导出脚本的问题
我是新手,对oracle不熟悉,原来都是通过imp/exp 做导入导出。现在遇到难题了:

客户那边不允许使用imp/exp 做导入导出,只能使用脚本导入和导出,我这边只有SQLPLUS,使用它只能一个表一个表导出创建表的脚本,而且还带了用户和表空间什么的信息,
有没有可以一次性把表空间下所有表的创建表的脚本生成的?包括关键字、索引和触发器等等的?因为导出时带了这些信息,导入时表空间和用户更换了,就会导入失败的!

2,表里的数据能不能一次性导出脚本的?主要是我们的表非常多,而且之间数据有些关联,插入数据还有先后的,没有什么工具可以一次性生成这些脚本的?然后能保证我导入就可以一次性执行的?

这两个问题很急,老板又催,大侠给个解决方案吧!!!!

------解决方案--------------------
可以考虑使用 oracle sql developer,反正免安装的,拷贝过去就可以用

1、设置导出分隔符
工具--首选项--数据库--卸载/查看DDL选项--带分隔符的格式
左、右定界符由双引号改为单引号

2、导出表格
选择表格(可单一表格, 也可多个表格)--右键点击--卸载(这里中文版翻译有问题,实际为export)
可以生成.sql的文件,这个文件中包括表结构的DDL语句,和数据。
然后打开这个文件,替换掉与用户名和表空间相关的字符,在最后一行加(COMMIT;),就算完成了。

------解决方案--------------------
你可以写一个shell脚本:

#!/usr/bin/ksh
#作者:
######################################################################
#初始化配置信息
######################################################################
func_init(){
workdir=`pwd`
log_path="${workdir}/log"
cfgfile="${workdir}/cfg/baseinf.cfg"
downloadlogfile="${Workdir}/${log_path}/download.log"

src="${workdir}/src"

if [ ! -d ${log_path} ]; then
mkdir -p ${log_path}
fi

echo "" > ${downloadlogfile}

if [ ! -f ${logfile} ]; then
touch ${logfile}
fi

if [ ! -d ${src} ];then
mkdir -p ${src}
fi

rm -rf ${src}/*
}
######################################################################
#DESC : 记录日志
#USAGE: Log "content"
######################################################################

Sublog()
{
echo "[ `date '+%Y%m%d %H:%M:%S'` ] $*" | tee -a ${downloadlogfile}
}
######################################################################
#DESC : 得到配置文件信息
#USAGE: 
######################################################################
GetCfg()
{
if [ $# -ne 3 ];then
print "Error!!Get config value failed!!($*)"
return 1
fi

tmpCfgFile="$1"
tmpKey="$2"
tmpValue=`cat ${tmpCfgFile}|grep "${tmpKey}"|grep -v "\["|head -n 1|awk -F "#" '{ print $1 }'|awk -F "=" '{ print $2 }'|tr -d " \t\n\r"`
eval $3="${tmpValue}"
return 0
}

######################################################################
#DESC : 通过给出的表名下载数据库中相同表名的数据
#USAGE: 
######################################################################
f_getsql()
{
fields=""
fields2=""
lv_line_num=`cat ${workdir}/cfg/mem_tabStructure/$tablename.unl | wc -l`
lv_index=0

while read field
do
lv_index=`expr ${lv_index} + 1`
if [ ${lv_index} -eq ${lv_line_num} ]; then
fields=${fields}${field}"||""'|'"
fields2=${fields2}${field}
else
fields=${fields}${field}"||""'|'""||"
fields2=${fields2}${field}","
fi
done < ${workdir}/cfg/mem_tabStructure/$tablename.unl

sql="select "${fields}" from ${tablename} "

}

######################################################################
#DESC : 文件下载
#USAGE: 
######################################################################
func_manage(){
GetCfg $cfgfile "DBNAME" dbname
GetCfg $cfgfile "DBTYPE" dbtype
GetCfg $cfgfile "TABFILE" tablelist
dbtype=`echo $dbtype|tr "[:upper:]" "[:lower:]"`

Sublog "=== begin download table