我们正在为ORACLE 11g中的客户规划一个新系统。我已经在Sql Server世界中工作了好几年,而且最新的ORACLE更新并不是最新的。
我想知道ORACLE在这一点上添加的一个特殊功能是数据库对象的某种逻辑“容器”,类似于Sql Server的SCHEMA
。
尝试使用ORACLE的模式(如Sql Server)在尝试从dev>推送时会成为代码比较的灾难。测试>生活。
软件包有点类似,除了你不能将表放入包中(因此它们实际上只适用于逻辑代码分组)。
我所知道的唯一其他选项是必须使用“架构”前缀为对象名称添加前缀的古老做法,即RPT_
REPORTS ,RPT_
参数,RPT_
LOGS ,RPT_
用户,RPT_
RUN_REPORT() ,前缀RPT_
表示这些是处理我们的报告引擎的所有对象。编写这样的系统感觉就像我们从未离开8.3文件命名时代。
在这个时间点,是否有任何更清晰,更直接的方式在ORACLE中将相关对象逻辑分组?
答案 0 :(得分:6)
Oracle数据库对象的逻辑容器是架构。我不知道你能得到多少“清洁”和“更直接”!你将不得不在这里进行范式转换。不要试图用SQL Server术语来思考,并强制在Oracle上使用看起来像SQL Server的解决方案。熟悉Oracle的工作并从这个角度解决您的问题。如果您知道自己在做什么,那么在Oracle中从开发到测试再到生产应该没有问题。
当你使用像“古老的练习”这样的术语时,你似乎对Oracle有一点关注。我建议你通过做一些阅读与Oracle非常丰富和强大的功能集交朋友,因为你显然已经为这个项目致力于Oracle。特别是,请选择Tom Kyte撰写的“Effective Oracle By Design”。阅读完之后,请查看同一作者的“Expert Oracle Database Architecture”,以便更深入地了解Oracle的工作原理。您应该知道如何使用您已交付的工具,这是您的客户所欠。谁知道?你甚至可能会开始喜欢它。将其视为工具箱中的另一个工具。你没有和SQL Server结婚,而且你使用Oracle并不是不忠实的; - )
编辑:
回答OP提出的问题:
我不确定为什么这是一个后勤问题。它们可以被认为是单独的数据库,但实际上它们不是。不,您不需要为每个架构单独的数据文件。单个数据文件通常用于所有模式。
如果你想要一个“漂亮,自包含的数据库”ala SQL Server,只需创建一个模式来存储所有对象。问题结束。您可以创建其他用户/模式,只是不要让他们能够创建对象。
有比较对象和数据的工具,如PL / SQL Developer比较。通常在Oracle中,您希望比较模式,而不是整个数据库。我不确定为什么你想拥有多个模式,每个模式都有自己的对象。你买这个是什么东西?将对象(表,触发器,代码,视图等)保存在一个模式中。