数据泵是10g推出的功能,个人倒数据比较喜欢用数据泵。
其导入的时候利用remap参数很方便转换表空间以及schema,并且可以忽略服务端与客户端字符集问题(exp/imp需要排查字符集)。
数据泵也有不方便的地方,如果远程导出导入,必须安装数据库服务端(client不行);需要在数据库中创建一个路径directory(dba_directories);并且主流工具支持exp/imp的导入导出(plsql developer),所以发现数据泵流行程度没有想象中高。
以下简单介绍schema的导入导出
以schema方式导出生产库用户下所有对象,并导入测试库。
注:eamdb为生产库,eamprd为生产库用户,密码为eamprd
eamuat为测试库,eamprduat为测试库用户,密码为eamprduat
一、生产库的导出(以sqlplus命令行的方式)。
1.以sys或者system用户身份登录生产数据库。
2.创建schema导出路径(DUMP_DIR名称可替换),并在dba_directories中查看
select * from dba_directories;
3.把导出路径与导出权限授权给eamprd,如果用system等高级帐号导出,则不用。
grant exp_full_database to eamprd;
4.退出sqlplus,在oracle系统用户下运行,导出对应的SCHEMA,推荐第二种。
expdp system/xxxx@eamdb directory=dump_dir dumpfile=eamdb.dmp schemas=eamprd
导出重点参数:
版本:高往低需加version=xx.x 导出某些张表tables=xxxx content=metadata_only(只要结构) content=data_only(只要数据)
5.把eamdb.dmp拷贝到测试库。
二、测试库的导入
1.以sys或者system身份登陆测试库。
2.建立导入表空间和临时表空间(名称、路径、表空间大小,请自行替换)。
create temporary tablespace EAMUAT_TEMP tempfile '/xxx/xxx/EAMUAT_TEMP.DBF' size 5120M;
3.建立用户及赋予权限(也可以不建立用户),导入时最好给予用户dba权限,以防导入时创建某些对象权限不够,注意需要回收其对users表空间的权限。
grant connect,resource,create view,create session,dba to eamprduat;
revoke unlimited tablespace from eamprduat;
alter user eamprduat quota unlimited on tbs_EAMUAT;
4.建立导入路径(把eamdb.dmp放在此路径下),并授权。
grant read,write on directory DUMP_DIR to eamprduat;
5.导入数据(在oracle系统用户下运行),注意remap_schema参数,请自行替换
导入重点参数:
remap_schema=eamprd:eamprduat,eamxxx:xxx,xxx:xxx
remap_tablespace=eamdev:eamxxx,eamxxx:xxx,xxx:xxx
table_exists_action=replace(替换)append(追加)
如导入报错:ORA-31684: Object type USER:"xxxxx" already exists,不用理会,因为之前建立了用户。
也可以在导入的语句中直接remap一个不存在的用户,会自动生成,其密码和权限与导出时候一样,但其表空间如果不想用users,必须手工创建。
本文链接:http://www.cnblogs.com/kkterry/p/3274945.html,转载请注明。
2 ( pv_whom varchar2 ) return varchar2 is
3 begin
4 return 'Hello '||pv_whom||'.';
5 end;
6 /
7
8
9 SQL> variable result varchar2(20);
10 SQL> call hello_function('Sam') into :result;
11
12 Call completed.
13
14 SQL> print :result
2.获取系统精确时间和精确到天的时间
2 lv_date_1 date :=sysdate;
3 lv_date_2 date :=lv_date_1;
4 begin
5 dbms_output.put_line('lv_date_1: '||to_char(lv_date_1,'dd-mon-yy hh24:mi:ss'));
6 dbms_output.put_line('lv_date_2: '||to_char(trunc(lv_date_2),'dd-mon-yy hh24:mi:ss'));
7 end;
8 /
9
10
11 SQL>
12 lv_date_1: 22-8鏈-13 16:33:18
13 lv_date_2: 22-8鏈-13 00:00:00
本文链接:http://www.cnblogs.com/charlie-badegg/p/3275380.html,转载请注明。
1.尽可能了解oracle的功能,因为很多业务逻辑oracle已经为我们做了,比如oracle已经预定义了大量的异常代码,我们不必要写自己的异常而增加代码的复杂度。
例如oracle定义了当找不到符合要求的数据时定义的异常:no_data_found,而很多开发人员经常使用自己的逻辑去判断是否找到数据。
2 ln_deptno number;
3 ln_tempno number:=1;
4 begin
5 select deptno into ln_deptno
6 from scott.dept
7 where deptno=ln_tempno;
8 dbms_output.put_line(ln_deptno);
9 exception
10 when no_data_found then
11 dbms_output.put_line('No deptno for: '||ln_tempno);
12 end;
13 /
14
15
16 SQL> @a.sql;
17 No deptno for: 1
18
19 PL/SQL procedure successfully completed.
本文链接:http://www.cnblogs.com/charlie-badegg/p/3277251.html,转载请注明。