【ORACLE】数据库同步,表空间操作等

近日需要同步本地一个oracle数据库的所有数据包括表结构等到现场一台服务器上, 平时未接触,因此不太熟练,这里记录下同步过程。

准备工作

远程到本地安装oracle数据库的那台服务器上,使用命令行将对应需要的用户下的所有数据导出为dmp文件。(安装了oracle即有该命令)

exp 用户名/密码 file=路径 log=日志 owner=导出用户

这样就能在选择的路径下得到dmp文件、日志等文件。

同步

远程到需要同步的那台服务器上,登录进后,如果需要覆盖一个用户下的所有表,那么可能需要将该用户删除然后重新创建一个新用户,然后导入数据。

网上还有另一个方案,使用impdp命令导入,然后设置table_exists_action参数为replace,可以在遇到已存在表时,删除原表然后重新建表并追加数据。但是该命令只能应用于expdp命令导出的文件,当时我用的exp导出的文件用impdp导入报错,因为数据量较大导出时间较长,我就没有再测试重新导出。

那么正式开始同步过程:

  1. 登录
sqlplus / as sysdba
  1. 删除原用户:
DROP USER GYJCBI CASCADE --删除用户
DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES;--删除表空间
  1. 创建表空间

    --临时表空间
    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;
    
  2. 创建新用户,并设置相关信息‘

    CREATE USER GYDSJ IDENTIFIED BY password
    DEFAULT TABLESPACE GYDSJ_DATA --默认表空间
    TEMPORARY TABLESPACE GYDSJ_TEMP;  --临时表空间 可不选
    
  3. 用户赋权

    grant connect,dba,resource to GYDSJ;
    
  4. 导入数据dmp文件
    使用之前导出的dmp文件, 运行下面的命令(导入导出命令都不是oracle的sql命令,需要先从sqlplus退出登录)

    imp 用户名/密码 file=文件路径 log=日志 full=y
    
  5. 等待导入结束即可

题外

oracle注意事项:

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动态创建表或者需要变量表示表或者字段这些值的时候,变量要用${}符号来包括,平时的字符串形式都使用#{}