0

我使用 Oracle 后端维护一个 PHP 驱动的 Web 应用程序。该应用程序与许多第三方应用程序交互,因此信息通过 XML 文件、Microsoft Access 数据库和 HTML 表单的组合进行管理。目前有 80 个表,其中包含许多 BLOB 和相当多的外键关系。所有程序都在一份(当然)没人读过的文件中仔细解释过。客户对他的数据感到不安,因此给了他一个可以进行一些改进的估计(例如在某些操作中添加预览和确认)。

遗憾的是,客户误解了其中一个规范(部分导出将在 12 个工时内完成),他期待一个完整的备份和恢复功能,允许他通过 Web 浏览器保存和恢复完整的数据库,而无需 DBA 干预.

在与客户进行另一次争论之前,我想知道我是否有任何选项可以及时实际实现此功能,考虑到它不需要任何改进(例如,无需选择要恢复)。

生产服务器是一个运行 PHP/5.2.9 的 Windows Server 2003 机器。Oracle 服务器是一个运行“Oracle9i Release 9.2.0.1.0 - 64bit Production”的远程机器。

(请注意,我不是 DBA,所以可能有一些我不知道的知名解决方案。)

4

2 回答 2

1

甲骨文是个怪物。阅读完本文后,您将意识到如何备份系统完全取决于它的配置方式。简短的回答是自动化任何手动过程——将它作为一个长时间运行的过程调用(因为这是 MSWindows,在 rman 命令前加上'start')然后使用轮询来检测它何时完成(例如,将 rman 包装在一个 DOS 批处理文件中记录开始和结束时间)。

我很难想出一个比在 MSWindows 之上运行的 Oracle 更困难的问题来提供通用解决方案。后者可能很适合用户点击按钮,但自动化任何事情都是 PITA。

玩得开心 :)

于 2011-07-26T10:54:36.693 回答
0

最后,我有机会在以后的项目中从 PHP 实现完整的 Oracle 备份。我使用了Oracle Data Pump命令行实用程序,该实用程序从 10g 开始提供。简而言之:

  1. 您定义一个 Oracle 目录以将关键字映射到物理目录,并向应用程序的 Oracle 用户授予写入权限。
  2. expdp使用适当的参数运行并在单个文件中获得完整的转储。
  3. 要恢复备份,请运行impdp.

还建议使用proc_open()而不是system()运行命令,因为您可以bypass_shell在 Windows 上对进程进行细粒度控制。

至于这个问题,10g 之前的替代方案是“exp”/“imp”组合。

于 2012-08-27T11:01:15.023 回答