大家好,小弟昨天从一台机器上导数据,由于企业的数据库数据量非常大,我也只想建立一个测试环境而已,所以导数据的时候用的是如下语句:
exp file=c:\filename1.dmp owner=(数据库名) rows=n 意思就是导出来一个没有数据的备份文件,其实俺的意思就是导出结构,果然导出一个20多M的一个dmp文件来,但是在我自己的电脑上导入数据的时候发现久久也到不完(原来磁盘剩余空间17G左右),后来竟然提示磁盘空间不足,我一看才发现表空间文件都老大了,就是他们的事,所以我想到了可能导入的时候要保持和原服务器一致,所以开发出了那么大的空的表空间,所以我想到了压缩表空间执行alter database datafile 'D:\oracle\product\10.2.0\oradata\orcl\XXX.DBF' resize 1024M ,竟然报了一个错“ora-03297 文件包含在请求的resize 值以外使用的数据”,我自己的理解就是有部分的小数据在表空间的末尾处,而且末尾处在1024开外的地方,哪位Oracle高手帮小弟解解维阿,先谢过了....
exp file=c:\filename1.dmp owner=(数据库名) rows=n 意思就是导出来一个没有数据的备份文件,其实俺的意思就是导出结构,果然导出一个20多M的一个dmp文件来,但是在我自己的电脑上导入数据的时候发现久久也到不完(原来磁盘剩余空间17G左右),后来竟然提示磁盘空间不足,我一看才发现表空间文件都老大了,就是他们的事,所以我想到了可能导入的时候要保持和原服务器一致,所以开发出了那么大的空的表空间,所以我想到了压缩表空间执行alter database datafile 'D:\oracle\product\10.2.0\oradata\orcl\XXX.DBF' resize 1024M ,竟然报了一个错“ora-03297 文件包含在请求的resize 值以外使用的数据”,我自己的理解就是有部分的小数据在表空间的末尾处,而且末尾处在1024开外的地方,哪位Oracle高手帮小弟解解维阿,先谢过了....
mkdir c:\temp
set my_temp=c:\temp
mkdir e:\backup
set my_bakdir=e:\backup
set my_tables=(t_base_tank)
exp username/password@servername file=%my_bakdir%\myexp.dmp log=%my_bakdir%\myexp.log buffer=1024000 tables=%my_tables%
rows=n
1.创建目录utl_dir用于存放导出的创建脚本
create or replace directory utl_dir as 'd:\';2.给所有用户赋予读写utl_dir的权限
grant write,read on directory utl_dir to public;3.创建存储过程,用来导出所有对象(表、索引、视图、同义词)的创建脚本
create or replace procedure exportddl_all(p_filename varchar2) is
begin for x in (select table_name from user_tables) loop
exportddl('TABLE',x.table_name,p_filename);
end loop; for x in (select index_name from user_indexes) loop
exportddl('INDEX',x.index_name,p_filename);
end loop; for x in (select view_name from user_views) loop
exportddl('VIEW',x.view_name,p_filename);
end loop; for x in (select synonym_name from user_synonyms) loop
exportddl('SYNONYM',x.synonym_name,p_filename);
end loop;end exportddl_all;4.使用过程导出scott用户所有对象的创建脚本
conn scott/tigerexec exportddl_all('123');
如果你只想到数据的话,可以在指定rows来指定数据。