近日需要同步本地一个oracle数据库的所有数据包括表结构等到现场一台服务器上, 平时未接触,因此不太熟练,这里记录下同步过程。
远程到本地安装oracle数据库的那台服务器上,使用命令行将对应需要的用户下的所有数据导出为dmp文件。(安装了oracle即有该命令)
exp 用户名/密码 file=路径 log=日志 owner=导出用户
这样就能在选择的路径下得到dmp文件、日志等文件。
远程到需要同步的那台服务器上,登录进后,如果需要覆盖一个用户下的所有表,那么可能需要将该用户删除然后重新创建一个新用户,然后导入数据。
网上还有另一个方案,使用impdp命令导入,然后设置table_exists_action参数为replace,可以在遇到已存在表时,删除原表然后重新建表并追加数据。但是该命令只能应用于expdp命令导出的文件,当时我用的exp导出的文件用impdp导入报错,因为数据量较大导出时间较长,我就没有再测试重新导出。
那么正式开始同步过程:
sqlplus / as sysdba
DROP USER GYJCBI CASCADE --删除用户
DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES;--删除表空间
创建表空间
--临时表空间
CREATE TEMPORARY TABLESPACE GYDSJ_temp
TEMPFILE 'G:\oracle\product\10.2.0\oradata\orcl\GYDSJ_temp01.dbf'
SIZE 512M --空间大小
AUTOEXTEND ON --自动扩容
NEXT 50M MAXSIZE 1024M --每次扩50M最大1024M
EXTENT MANAGEMENT LOCAL;
--表空间
CREATE TABLESPACE GYDSJ_DATA
LOGGING
DATAFILE 'G:\oracle\product\10.2.0\oradata\ORCL\GYDSJ_DATA01.DBF'
SIZE 2G --空间大小,不要设置太小,不然导入会报错
AUTOEXTEND ON
NEXT 512M MAXSIZE 5G --设置扩展大小和最大,可不填
EXTENT MANAGEMENT LOCAL;
创建新用户,并设置相关信息‘
CREATE USER GYDSJ IDENTIFIED BY password
DEFAULT TABLESPACE GYDSJ_DATA --默认表空间
TEMPORARY TABLESPACE GYDSJ_TEMP; --临时表空间 可不选
用户赋权
grant connect,dba,resource to GYDSJ;
导入数据dmp文件
使用之前导出的dmp文件, 运行下面的命令(导入导出命令都不是oracle的sql命令,需要先从sqlplus退出登录)
imp 用户名/密码 file=文件路径 log=日志 full=y
oracle中空字符串等于NULL,如果一个字段不允许为空,当向其中插入一个空字符串时就会报错。
sql生成UUID:SELECT LOWER(RAWTOHEX(sys_guid())
允许存在换行符,java获取后可以使用”\\\n”匹配。
分页使用rownum,常在原语句外面嵌套一层select * from () where rownum …
使用java推荐使用pageHelper分页,如下配置,在查询前使用PageHelper.startPage(pageNum, 10);即可
@Bean
PageInterceptor getPageInterceptor() {
PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("helperDialect", "oracle");
pageInterceptor.setProperties(properties);
return pageInterceptor;
}
@Bean
PageHelper pageHelper(){
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("helperDialect", "oracle");
pageHelper.setProperties(properties);
return pageHelper;
}
使用mybatis动态创建表或者需要变量表示表或者字段这些值的时候,变量要用${}符号来包括,平时的字符串形式都使用#{}