我可以使用roundhouse创建一个全新的oracle db / schema吗?

时间:2013-03-18 04:13:25

标签: oracle database-versioning roundhouse

我对Oracle有点新,主要使用SQL,因此我对oracle如何工作以及使用哪些用户/连接字符串的理解可能是错误的或不存在的。

我正在尝试使用roundhouse来创建/管理Oracle数据库。目前我正在尝试运行运行Windows 7和VS 2010的开发机器。我有一个简单的沙箱项目,我正在尝试创建一个测试数据库。我在我的机器上安装了Oracle 11g标准版。

第一个问题是,我是否能够使用roundhouse创建一个全新的数据库(Oracle数据库告诉我他们在Oracle中被称为'Schemas')?根据我的理解,与SQL服务器不同,没有Master数据库和sa用户可以创建任何数据库。

我在圆桌会议网站上找到了Oracle的维基页面,但它只涉及修改现有的Oracle数据库,而不是创建一个新数据库。在创建所需的表,存储过程等之前,我无法找到使用roundhouse在Oracle中创建全新数据库的示例。

如果可能,我需要做什么/设置?我该如何设置配置文件?给定是我当前的配置文件。

<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="DBDeploy" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- Visit http://roundhouse.googlecode.com/ for details -->

  <UsingTask AssemblyFile="roundhouse.tasks.dll" TaskName="roundhouse.tasks.Roundhouse" />

  <PropertyGroup>
    <DBServer>dev-mac-303.qtest.local</DBServer>
    <DBName>RoundhouseSandbox.OracleRoundhouse</DBName>
    <Environment>DEV</Environment>
    <DBConnectionString>Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dev-mac-303.qtest.local)(PORT = 1521)))(CONNECT_DATA = (SID = DEVEL)));User Id=mytest;Password=mytestdevel;Persist Security Info=false;</DBConnectionString>
  </PropertyGroup>


  <Target Name="ApplyDatabaseChanges">
    <Roundhouse
        ServerName="$(DBServer)"
        DatabaseName="$(DBName)"
        ConnectionString="$(DBConnectionString)"
        ConnectionStringAdmin="$(DBConnectionString)"
        CommandTimeout="60"
        CommandTimeoutAdmin="300"
        VersionFile="OracleRoundhouse.dll"
        AlterDatabaseFolderName="alterDatabase"
        UpFolderName="mytest\updates"
        RunFirstAfterUpFolderName="mytest\runFirstAfterUp"
        FunctionsFolderName="mytest\functions"
        ViewsFolderName="mytest\views"
        SprocsFolderName="mytest\storedprocedures"
        IndexesFolderName="mytest\indexes"
        PermissionsFolderName="mytest\permissions"
        SchemaName="Change"
        VersionTableName="Version"
        ScriptsRunTableName="ScriptsRun"
        ScriptsRunErrorsTableName="ScriptsRunErrors"
        EnvironmentName="$(Environment)"
        DoNotCreateDatabase="false"
        OutputPath="C:\temp\test.mytest.Database\ChangeTracking\"
        WarnOnOneTimeScriptChanges="false"
        Silent="true"
        DatabaseType="roundhouse.databases.oracle.OracleDatabase, roundhouse.databases.oracle"
        WithTransaction="false"
        RunAllAnyTimeScripts="false"
        DisableTokenReplacement="false"
        Debug="true"
        />
  </Target>

  <Target Name = "DBDeploy"
          DependsOnTargets="
        ApplyDatabaseChanges;
      "
     >
  </Target>

</Project>

2 个答案:

答案 0 :(得分:4)

我已经在一个正在生产的应用程序中使用RoundhousE完成了Oracle。

RoundhousE不适合从零开始创建Oracle数据库。我见过的Oracle数据库使用模式作为主要的逻辑划分;换句话说,在Oracle中,您将使用模式,就像使用SQL Server中的数据库一样。此外,通常已经设置了数据库本身,并且您不创建新数据库。这被认为更像是一个安装步骤;在设置数据库之前,您甚至无法形成网络连接。粗略地说:

SQL Server      |  Oracle                             
----------------+------------------------------------
Server install  |  Server install & database set up
Database        |  Schema

所以没有RoundhousE设置Oracle数据库。假设已经完成;把它想象成一个安装步骤。您不希望RoundhousE安装SQL Server或配置它。

也就是说,RoundhousE有一个指定创建脚本的工具。您可以利用它来创建模式,但RoundhousE还没有能力指定 drop 脚本(据我所知)。您需要一个单独的工具。

我最终使用SQL * Plus Instant Client来管理我的构建脚本中的模式的创建和删除:http://www.oracle.com/technetwork/topics/winsoft-085727.html。您需要 instantclient-sqlplus-nt-11.2.0.3.0.zip 以及 instantclient-basiclite-nt-11.2.0.3.0.zip instantclient-basic-nt-11.2.0.3.0.zip 即可。 (较新的版本很好;只需确保您获得匹配的版本。)将它们解压缩到同一目录。 (另外,您可以使用basic-nt或basiclite-nt而不是安装Oracle Client;您只需要确保您的应用程序可以找到DLL。)您需要进行命令行调用才能使用它。当RoundhousE获得drop脚本时,如果可以,我打算转储它。

一旦你有一个架构,RoundhousE工作得相当好。不过,请查看Github和Google Code上的错误列表。有一些奇怪的问题。但是,一旦你越过它们,那么你付出的所有努力都是值得的。我差不多两年前编写了大部分数据库部署构建脚本,它们是经得起时间考验的事情之一。但它们是用PowerShell编写的,所以我不知道它在MSBuild中的表现如何。

更新

自从我写这篇文章以来的几年里,Flyway受到了欢迎。考虑使用它或其他工具,因为它们可能对Oracle有更好的支持。 RoundhousE还没有解决几年前发现的很多问题。它似乎主要侧重于支持SQL Server。

答案 1 :(得分:1)

看看你来自哪里,可能是升级的时候了。

从我记得的Oracle和RH支持,这可能是可能的。管理连接字符串有一个开关 - CSA(连接字符串管理员),它将为您处理模式创建。是的,Oracle有不同的术语(数据库与sql server的服务器相同,架构是sql server的数据库)。

自从我检查了对Oracle的支持以来已经有一段时间了,但如果你看一下,你可能会发现更多的信息。