目录
3.1,oracle按时间戳(TIMESTAMP)类型按月自动分区
3.3,oracle按字符VARCHAR2类型字段按月自动分区
一,Oracle数据泵导入导出dmp
(一)设置目录和操作权限
1.登录root权限,然后切换到Oracle用户下;
su - oracle;
2.登录dba权限数据库;
sqlplus sys/123456 as sysdba;
2.1 检查目录是否存在
#select * from dba_directories where DIRECTORY_NAME='EXPDP_PATH';
3.连接成功后。创建目录、后面引号部分是你的dmp文件所在的路径。必须放到Oracle文件下面。路径不要有中文;
#应programmer_ada同学提议修改
#expdp目录需额外创建,根据自身业务调整
create directory EXPDP_PATH as '/home/oracle/expdp';
4.授权成功后。把读写IMPDMP目录权限赋予给cim 数据库用户;
grant read,write on directory IMPDMP to cim;
5.退出数据库
exit;
6.如果提示没有directory权限
grant create any directory to oracle;
grant drop any dirctory to oracle;
7.如果该目录不使用,建议删除
drop directory EXPDP_PATH;
或者覆盖 create or replace
针对2.1 ,3步骤的优化
2.1 检查目录是否存在
#select * from dba_directories where DIRECTORY_NAME='IMPDMP';
3.对导出的.dmp做目录目录上的调整,不建议直接使用:标准目录
#应programmer_ada同学提议修改
#expdp目录需额外创建,根据自身业务调整
create directory EXPDP_PATH as '/home/oracle/expdp';
如果该目录不使用,建议删除
drop directory EXPDP_PATH;
(二)导入
username 用户名,password 密码 database 数据库名称
#导入整个用户的表
impdp username/password@database directory=IMPDMP dumpfile=dumpName.dmp;
(三)导出
同样需要文件授权 ; username 用户名,password 密码 database 数据库名称
expdp username/password@databasedumpfile=22.dmp logfile=tables.log directory=IMPDMP;
#按表,有条件导出
expdp username/password@database directory=IMPDMP dumpfile=22.dmp logfile=22.log table=tableName query=\"t where t.id=1\";
二,案例-Oracle 数据清理
(一)为什么大数据量不能用delete删除
delete删除是逐条,需要进行事务提交,数据量大的时候,耗时会非常长,还会造成undo表空间不足。
Oracle undo表空间
当我们对数据库进行DML操作的时候,Oracle能通过undo为我们提供保存修改前数据的镜像。
1、提供读一致性
例如用户A修改表TB1,在他进行操作前Oracle将TB1存放于undo中,在用户A修改的同时用户B若访问TB1,则访问的是undo中的TB1,其他访问TB1的用户也是如此,因此在用户A修改TB1的时候,undo保证了其他用户对TB1的读一致性。
2、为事务提供回滚
通过保留在undo中的镜像来恢复用户未提交的数据。当用户未提交数据,而此时数据库发生异常关闭,undo中保留的镜像会自动将数据回滚。
3、提供闪回操作
保留在undo中的镜像在事务结束后并未马上删除,而是保留了一段时间,在这段时间内用户即便已经提交了事务,仍可以通过 flashback 技术查询。
(二)选择使用rename重建表方式
把原有表改为历史表,然后把表中对应索引也删除重建;
对原有表,索引重建,并添加分区。