在另一个已经拥有其他模式的数据库中备份和恢复正在运行的模式

时间:2012-05-06 18:10:40

标签: oracle10g backup

我有一个正在运行的数据库只有一个dba(即sys,system除外)“abc”。在这个oracle用户下,我有表,视图,序列,过程,函数等。现在我必须将数据和模式复制到已经运行了十几个模式的另一台机器上的另一个数据库(每个单独的dba下一个)。我有以下问题:

(1)在移动到新机器之前,我必须在旧机器上重命名架构,从“abc”重命名为“pqr”。

(2)在我的程序和函数中,我使用的是AUTHID CURRENT_USER,因此必须使用“abc”。表格,视图,序列,过程,函数名称之前的限定符。更改模式名称时,是否有一些自动更改限定符的方法。

(3)为了复制数据,我只知道一种方法,即只备份一个用户“abc”的数据库(即不备份sys,system)。然后将其还原到新数据库。无论如何,这可能会破坏其他模式或其数据。

(4)在我的模式中,我使用过程创建具有有限权限的oracle用户。新用户名存储在Users表中。我还在创建数据库角色并将用户与角色相关联。角色名称存储在角色表中。迁移到新机器时,我必须确保为我的用户和角色添加一些独特的内容,这样我就不会打扰其他模式创建的oracle用户。

(5)我知道在新数据库中,必须有一个名为“pqr”的新dba用户。我是否还必须拥有sysdba权限。我不对新机器上的整个数据库负责,我只负责我的架构。作为一个sysdba,我可以在任何方面伤害其他dbas(比如删除它们或者更改它们的模式)。如果我没有sysdba权限,我会得到什么限制。我正在使用OracleText,因此必须使用一些内置包。我还必须在Windows中的文件系统上创建物理目录。当使用“pqr”连接到数据库时,我还必须通过存储过程创建,更改(更改密码),删除角色和用户。

旧数据库和新数据库都在不同的专用计算机上运行。它的Windows Server 2003与oracle 10gr1。

1 个答案:

答案 0 :(得分:1)

最简单的选择是使用Oracle export utility(经典或DataPump)对第一个数据库中的abc架构进行逻辑备份,并使用Oracle import utility导入备份进入新数据库。如果您使用的是经典版本,则可以使用FROMUSERTOUSER参数指定要将数据导入其他架构。如果您使用的是DataPump版本,则可以使用REMAP_SCHEMA参数。如果您拥有相对大量的数据,DataPump版本将更有效。

不幸的是,没有办法改变显式模式限定符。您需要在导入代码后编辑代码,或从源代码管理系统中提取代码,编辑代码并将代码部署到新数据库。