代码之家  ›  专栏  ›  技术社区  ›  sakana

使用sqlplus的Oracle备份数据库是可能的?

  •  1
  • sakana  · 技术社区  · 17 年前

    我需要对数据库进行一些结构更改(更改表、添加新列、更改一些行等),但我需要确保如果出现问题,我可以回滚到初始状态:

    • 所有需要的更改都在SQL脚本文件中。
    • 我没有对数据库的管理权限。
    • 我真的需要确保备份是在服务器端完成的,因为BD有超过30GB的数据。
    • 我需要使用sqlplus(在VPN上的ssh专用会话下)
    • 不能使用“闪回数据库”!它关闭了,我无法停止数据库。

    我是不是真的陷入了很深的困境?

    对于如何使用sqlplus备份数据库并将备份保留在db服务器上有什么想法吗?

    3 回复  |  直到 15 年前
        1
  •  4
  •   KevinDTimm    17 年前

    与exp/imp相比,您应该使用rman。它是专门为这个目的而构建的,它可以进行热备份/恢复,如果你完全搞砸了,你还是可以的。

    其中一个“解决方法”是您也必须备份$oracle_主目录(以我的经验来说),因为您需要本地存储的信息来恢复控制文件。

    在谷歌上搜索rman会在第一页上提供一些非常好的信息。

        2
  •  2
  •   DCookie    17 年前

    另一种方法可能是创建一个包含修改后的结构和数据的新模式,并用它进行实际测试。这假定您的数据库服务器上有足够的空间来保存所有测试数据。您真的应该有一个非常好的主意,您的更改将在将它们转储到生产环境之前起作用。

    我不会用sqlplus来做这个。查看导出/导入。导出实用程序将获取数据库的定义和数据(可以在读取一致模式下完成)。导入实用程序将读取此文件并从中创建数据库结构。但是,对这些实用程序的访问需要授予权限,特别是在需要备份整个数据库(而不仅仅是模式)时。

    也就是说,在没有管理权限的情况下执行DBA的任务(更改表、备份数据库等)有点麻烦。我认为我至少应该在开始之前请求DBA的帮助来监督您的方法,如果不坚持DBA(或具有适当特权和知识的人)实际执行对数据库的修改并在必要时帮助恢复的话。

        3
  •  1
  •   Thomas Jones-Low    17 年前

    试图通过sqlplus备份30GB的数据是疯狂的,这需要几个小时的时间,需要3x到5x的磁盘空间,如果不进行更多的测试,可能无法恢复。

    您需要使用exp和imp。这些是用于备份和还原数据库的命令行工具。它们是命令行工具,如果您可以通过ssh访问sqlplus,则可以访问imp/exp。您不需要管理员访问即可使用它们。它们将为您有权访问的用户转储数据库(包括所有表、触发器、视图、过程)。