当前位置: 首页 > 面试题库 >

在运行Delete / Load数据脚本之前锁定oracle数据库

蒋向笛
2023-03-14
问题内容

我们每个午夜从CI运行Junit ans Selenium测试用例。我们正在使用Maven-SQL插件预先填充数据,如下所示。

          <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sql-maven-plugin</artifactId>
                <version>1.3</version>
                <executions>
                    <execution>
                        <id>create-database-tables</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <autocommit>false</autocommit>
                            <onError>continue</onError>
                            <srcFiles>
                                <srcFile>../sql/delete_data.sql</srcFile>
                                <srcFile>../sql/load_data.sql</srcFile>
                            </srcFiles>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

由于不同用户同时进行构建,我们经常面临数据库僵局。我们认为的解决方案是在运行数据库脚本之前锁定数据库。

我们可以在运行脚本之前锁定数据库访问,然后在运行脚本之后解锁数据库访问吗?


问题答案:

共享数据库进行测试从来都不是一个好主意,想必您知道这一点,这就是为什么您要询问如何一次限制对一个用户的访问。

一边讲.....我想提供一个liquibase的左字段解决方案来管理数据库模式和数据填充。具有许多有用的功能,其中之一是它将自动锁定数据库并防止两个liquibase实例相互干扰。

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.myspotontheweb.db</groupId>
    <artifactId>liquibase-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <!-- Liquibase settings -->
        <liquibase.url>jdbc:h2:target/db1/liquibaseTest;AUTO_SERVER=TRUE</liquibase.url>
        <liquibase.driver>org.h2.Driver</liquibase.driver>
        <liquibase.username>user</liquibase.username>
        <liquibase.password>pass</liquibase.password>
        <liquibase.changeLogFile>com/myspotontheweb/db/changelog/db-changelog-master.xml</liquibase.changeLogFile>
        <liquibase.promptOnNonLocalDatabase>false</liquibase.promptOnNonLocalDatabase>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.3.162</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>2.0.2</version>
                <executions>
                    <execution>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>update</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>


 类似资料:
  • 问题内容: 我正在使用load()函数通过单击菜单中的按钮从不同页面动态获取详细信息。按钮之一指向使用自己的jquery效果的图像库。但是这些脚本没有运行。我试图使用getscript()显式加载它们,但这也不起作用。这是代码: 这是我的gallery.js文件的内容。确切的效果可能无关紧要,我粘贴了以下代码以显示警报框的位置: 这是我发现的: 我执行ctrl + F5并从开始加载页面,然后单击图

  • 问题内容: 到目前为止,我已经在Jenkins中看到了与构建过程相关的不同选项和工作。我想知道是否存在创建作业的方法,该作业将连接到数据库并运行脚本,该脚本将执行某些操作。也许Jenkins可以运行脚本文件或仅存储一些要运行的动作。提前致谢。 问题答案: 您有两个主要选择: 使用 执行外壳程序 或 执行Windows批处理命令 构建步骤 使用基于Java的工具,例如liquibase,ant任务,

  • 从一个方法call AndUpdateInB(),假设我正在调用B类(@Component)的date()方法,其中我正在调用myRepository.save()方法来更新db中的一些数据,并且在相同的功能中我正在执行一些其他调用...然后将响应返回给类A。 所以问题是,当类B方法update()将响应返回给类A方法callAndUpdateInB()时,数据在数据库中得到更新。但当我调用myR

  • testcontainers oracleContainer在Dokerfile中定义的entrypoint发生更改之前启动,以完成并创建测试所需的用户。 容器运行后,将执行一些sql脚本创建表并用数据填充表。这些脚本失败,因为脚本中提到的用户尚未创建。 testcontainers没有等待完成安装。 通过使用以下命令检查日志: 我可以看到testcontainers从不等待它完成。 关于这个“b

  • 问题内容: 我在我的应用程序中做了一些重复的操作(测试),突然我收到一个奇怪的错误: 我已经重新启动服务器,但是错误仍然存​​在。可能是什么呢? 问题答案: 从Django文档中: SQLite是一个轻量级的数据库,因此不支持高级别的并发性。OperationalError:数据库已锁定错误,表明你的应用程序并发性超过sqlite在默认配置下无法处理的并发性。此错误意味着一个线程或进程在数据库连接

  • 本文向大家介绍oracle数据库导入.dmp脚本的sql 语句,包括了oracle数据库导入.dmp脚本的sql 语句的使用技巧和注意事项,需要的朋友参考一下 一、更改数据库管理员sys/system密码 1、运行到C盘根目录 2、输入:SET ORACLE_SID = 你的SID名称 3、输入:sqlplus /nolog 4、输入:connect /as sysdba 5、输入:altre u