2

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

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

第一个问题是,我什至可以使用 Roundhouse 创建一个全新的数据库(Oracle 数据库告诉我它们在 Oracle 中被称为“模式”)吗?据我了解,与 SQL Server 不同,没有可以创建任何数据库Master的用户的数据库。sa

我在 Roundhouse 网站上找到了 Oracle 的 wiki 页面,但它只讨论了修改现有的 Oracle 数据库,而不是创建新数据库。在创建所需的表、存储过程等之前,我无法找到在 Oracle 中使用 Roundhouse 创建全新数据库的示例。

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

<?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>
4

2 回答 2

4

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

RoundhouseE 不适合从无到有地创建 Oracle 数据库。我见过的 Oracle 数据库使用模式作为主要的逻辑划分;换句话说,在 Oracle 中,您使用模式的方式与在 SQL Server 中使用数据库的方式非常相似。此外,数据库本身通常已经设置好,您无需创建新数据库。这更像是一个安装步骤。在建立数据库之前,您甚至无法形成网络连接。粗略地讲:

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

所以不要让 RoundhouseE 设置 Oracle 数据库。假设已经完成;将其视为安装步骤。您不会期望 RoundhouseE 安装或配置 SQL Server。

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

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

一旦你有了一个模式,RoundhouseE 就可以很好地工作。不过,请检查 Github 和 Google Code 上的错误列表。有几个奇怪的问题。但是,一旦你克服了它们,你付出的所有努力都是值得的。大约 2 年前,我编写了大部分数据库部署构建脚本,它们是项目中经受住了时间考验的东西之一。不过,它们是用 PowerShell 编写的,所以我不知道这在 MSBuild 中会怎样。

更新:

自从我写这篇文章以来的这些年里,Flyway 变得流行起来。考虑使用它或其他工具,因为它们可能对 Oracle 有更好的支持。RoundhouseE 并没有解决很多几年前发现的问题。它似乎主要专注于支持 SQL Server。

于 2013-07-01T22:26:46.383 回答
1

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

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

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

于 2013-03-19T02:14:41.830 回答