我负责导入这个我以前没有做过的旧 Oracle 转储文件,因此,负责导出该文件的人和该文件最初所在的服务器早已不存在了。
我对 Oracle 的了解有限,但据我所知,我不能随意恢复数据库;我需要拥有与它所使用的用户、角色和权限完全相同的设置。
问题是,我不知道那些是什么。
有没有办法找出 Oracle Dump 文件所需的必要用户、角色和权限?这些信息可能保存在转储文件中吗?
谢谢。
系统:
- Windows 7的
- Oracle 11g XE(尽管我相信转储文件来自 9g)
答案1
我创建一个包含所有相关角色和权限的视图。然后从视图中进行选择。
-- Create the dba_user_privs view:
CREATE OR REPLACE VIEW DBA_USER_PRIVS (USERNAME, ROLENAME, PRIVILEGE) AS
SELECT DECODE(SA1.GRANTEE#, 1, 'PUBLIC', U1.NAME), SUBSTR(U2.NAME,1,20),
SUBSTR(SPM.NAME,1,27)
FROM SYS.SYSAUTH$ SA1, SYS.SYSAUTH$ SA2, SYS.USER$ U1,
SYS.USER$ U2, SYS.SYSTEM_PRIVILEGE_MAP SPM
WHERE SA1.GRANTEE# = U1.USER#
AND SA1.PRIVILEGE# = U2.USER#
AND U2.USER# = SA2.GRANTEE#
AND SA2.PRIVILEGE# = SPM.PRIVILEGE
UNION
SELECT U.NAME, NULL, SUBSTR(SPM.NAME,1,27)
FROM SYS.SYSTEM_PRIVILEGE_MAP SPM, SYS.SYSAUTH$ SA, SYS.USER$ U
WHERE SA.GRANTEE#=U.USER#
AND SA.PRIVILEGE#=SPM.PRIVILEGE ;
-- You can now see any of the privileges that are granted to any user:
--set lines 200
--select * from dba_user_privs where username='ALAN';
--col rolename format a8
--col username format a8
--USERNAME ROLENAME PRIVILEGE
---------- -------- ----------------------
--ALAN DBA MANAGE FILE GROUP
--ALAN DBA MANAGE SCHEDULER
--ALAN DBA MANAGE TABLESPACE
--ALAN DBA MERGE ANY VIEW
--ALAN DBA ON COMMIT REFRESH
--ALAN DBA QUERY REWRITE
--ALAN DBA READ ANY FILE GROUP
--ALAN DBA RESTRICTED SESSION
--ALAN DBA RESUMABLE
--ALAN DBA SELECT ANY DICTIONARY
--ALAN DBA SELECT ANY SEQUENCE
--ALAN DBA SELECT ANY TABLE
--ALAN DBA SELECT ANY TRANSACTION
--ALAN DBA UNDER ANY TABLE
--ALAN DBA UNDER ANY TYPE
--ALAN DBA UNDER ANY VIEW
--ALAN DBA UPDATE ANY TABLE
--ALAN SELECT ANY DICTIONARY
--ALAN UNLIMITED TABLESPACE