背景 :需要从生产环境中导出数据到测试环境中,由于Oracle数据库的不规范前任留下的坑太多,导致出现了N多错误,导了两天都没有成功。后来只能导入到新的测试服务器中,旧的删除重建。于是把整个导入用到的记录下,以免忘记。dba 一定要规范!规范!规范!不然害死人呐
Oracle数据库的规范:
1 使用压缩。生产库1g导入到旧测试库竟然20g 呵呵
Oracle支持在表空间(tablespace)、数据表(table)和分区(Partition)级别的压缩,如果设置为表空间级别,那么默认将该表空间中的全部的表都进行压缩。压缩操作可以在数据单条插入、数据修改和数据批量导入时发生。压缩类型Oracle支持下面几种表压缩方式:其中,OLTP压缩可以在数据单条插入、数据修改、数据批量导入的时候进行压缩,其它三种只能在批量导入的时候进行。
Basic compression:可以压缩来自通过文件路径的导入,并且只支持某些特定类型的数据和有限的几种SQL操作;
compression:用于OLTP应用,并且可以支持全部的SQL操作;(使用的是此种)
Warehouse compression和Archive compression:可以实现最高级别的压缩,因为它们采用了混合列压缩(Hybrid Columnar
Compression)技术。(不知道,反正没有用过)
总之压缩就对了。除非特殊要求,不然就一定要压缩。
判断是否使用压缩可以通过下面两种方式判断,一是查询user_tables,另一种是查询user_tab_partitions:
SQL>SELECT table_name,compression, compress_for FROM user_tables;
或者
SQL> SELECT table_name,partition_name, compression, compress_for
FROM user_tab_partitions;
有些Oracle是不支持压缩的和版本相关;
查看是否支持压缩:select * from v$option where parameter 'Basic Compression'
对表空间进行压缩: alter tablespace USERS default compress foroltp;
2 oracle 密码是有有效期的,mysql也是(在配置文件中更改)
查看密码文件
SELECT * FROM dba_profiles s WHEREs.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
查看所有用户的proifle
SELECT username,PROFILE FROM dba_users;
查看指定概要文件(如default)的密码有效期设置:
SELECT * FROM dba_profiles s WHEREs.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
修改指定概要文件(如default)的密码有效期设置为无限制
ALTER PROFILE DEFAULT LIMITPASSWORD_LIFE_TIME UNLIMITED;
grant execute on Proc to UserName;
3 导入到表空间
一直以来我都认为只要指定用户的默认表空间,向该用户导入数据时,会自动进入到默认表空间。后来发现从System导出的dmp文件在导入时,即使指定新用户的默认表空间,还是要往System表空间中导数据。
上网搜了一下,还是有解决方法的,常见的方法如下:
SQL> create user myhuang identified bymyhuang default tablespace myhuang;
SQL> grant resource,connect to myhuang;
SQL> grant dba to myhuang;//赋DBA权限
SQL> revoke unlimited tablespace from
myhuang;//撤销此权限
SQL> alter user myhuang quota 0 on
system;//将用户在System表空间的配额置为0
SQL> alter user myhuang quota unlimited
on myhuang;//设置在用户在myhuang表空间配额不受限。
经过上述操作可能会对USERS 没有权限,如果报错,给USERS 权限即可
经过上述设置后,就可以用imp导入数据,数据将会进入指定的myhuang表空间:
原文:https://blog.csdn.net/qq578473688/article/details/76217941
4 导出和导入 一定要规范 规范 规范 一定要有日志
导入如下 imp xxx/xxxx foruser=xxx touser=xx log=xxx file=xxx ignore=y;
导出如下