基于windows Oracle10g的原型环境,在linux下建一个测试库。库只有几十个G,但麻烦的是这个数据库中有将近700个用户。
怎么去创建这个测试库呢?首先想到的还是数据泵EXPDP/IMPDP
1. 在Linux下装一个与windos版本一致的oracle。
2. 用数据泵expdp在windows下导出所有数据。
3. 在linux上用impdp导入windos上导出的数据。
一条expdp/impdp就可以把所有用户的数据都导出/导入。
但麻烦的是现在有将近700个用户。如何确认那些用户需要在测试库上新建,以及如何给这些用户分配
对象权限,角色权限,系统权限,及表空间限额反倒是一个麻烦的问题。
首先确认一下oracle系统自带的用户。
SQL> SELECT CID, CNAME, NAME
2 FROM (SELECT CID, CNAME, SCHEMA#
3 FROM SYS.REGISTRY$
4 UNION ALL
5 SELECT A.CID, CNAME, B.SCHEMA#
6 FROM SYS.REGISTRY$ A, SYS.REGISTRY$SCHEMAS B
7 WHERE A.CID = B.CID) A,
8 SYS.USER$ B
9 WHERE A.SCHEMA# = B.USER#;
在DBA_USERS中排除oracle系统自带的用户,和一些默认表空间是SYSAUX,SYSTEM等表空间的用户后,
基本上就可以确定哪些是我们需要重建的用户。
一般我不会把业务用户建在USES表空间下,所以把USERS表空间也排除了。
SQL> SELECT USERNAME, CREATED, DEFAULT_TABLESPACE
2 FROM DBA_USERS D
3 WHERE USERNAME NOT IN
4 (SELECT NAME
5 FROM (SELECT SCHEMA#
6 FROM SYS.REGISTRY$
7 UNION ALL
8 SELECT B.SCHEMA#
9 FROM SYS.REGISTRY$ A, SYS.REGISTRY$SCHEMAS B
10 WHERE A.CID = B.CID) A,
11 SYS.USER$ B
12 WHERE A.SCHEMA# = B.USER#)
13 AND D.default_tablespace NOT IN('SYSAUX','SYSTEM','USERS')
14 ORDER BY 3, 2;
确认了那些用户需要新建,就可以通过数据字典来生成新建用户及分配权限,角色的脚本了。