<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Devops on Architecture and Data Blog</title>
    <link>https://sadalage.com/tags/devops/</link>
    <description>Recent content in Devops on Architecture and Data Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 23 Sep 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://sadalage.com/tags/devops/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Automated testing of custom sql</title>
      <link>https://sadalage.com/post/automated_custom_sql_testing/</link>
      <pubDate>Tue, 23 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/automated_custom_sql_testing/</guid>
      <description>&lt;p&gt;Lots of time hand coded SQL is written in the applications for performance sake, getting data using complex SQL out of the tables. As the database structure changes it becomes really hard to find out all the SQL that needs to be changed. In other cases SQL is generated based on certain conditions in the code and its hard to find if the generated SQL is valid after database changes are done.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Publish data models in CI Pipeline</title>
      <link>https://sadalage.com/post/publish-data-models/</link>
      <pubDate>Sat, 16 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/publish-data-models/</guid>
      <description>&lt;p&gt;Many a times ER models are created by the data team and are not shared outside of the data team generally for the lack of tools licenses, since its not feasible for the entire team to purchase licenses for the ER modelling tools such as &lt;a href=&#34;https://www.erwin.com/products/erwin-data-modeler&#34;&gt;Erwin Data Modeller&lt;/a&gt; or &lt;a href=&#34;https://www.idera.com/products/er-studio/data-architect&#34;&gt;Er Studio&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>SSL Connection to AWS Aurora</title>
      <link>https://sadalage.com/post/ssl-aws-aurora/</link>
      <pubDate>Mon, 15 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/ssl-aws-aurora/</guid>
      <description>&lt;p&gt;On a recent project we had to connect to AWS Aurora postgres 10.6 version of the database in SSL mode using JDBC and Java 11 JRE. When the Aurora cluster is setup, we can force all connections to use SSL by using the options group settings (&lt;code&gt;forceSSL=true&lt;/code&gt;), establishing secure connection from the application to the database is not as easy as it looks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Static Analysis of PL/SQL code</title>
      <link>https://sadalage.com/post/static-analysis-of-plsql-code/</link>
      <pubDate>Tue, 01 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/static-analysis-of-plsql-code/</guid>
      <description>&lt;p&gt;In all new development and sometimes during legacy codebase modernization, developers tend to add code quality checks and static analysis of codebase such as style checks, bug finders, cyclomatic complexity checking etc. into the CI/CD pipeline. When we inherit a codebase that has much PL/SQL and there is a desire to put the PL/SQL code base through the same types of code analysis, what options does a developer/dba have?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using liquibase to load data and ignore some columns</title>
      <link>https://sadalage.com/post/using-liquibase-to-load-data-and-ignore-some-columns/</link>
      <pubDate>Mon, 15 May 2017 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/using-liquibase-to-load-data-and-ignore-some-columns/</guid>
      <description>&lt;p&gt;Loading data into tables is needed many times on projects to load test, &lt;a href=&#34;http://www.liquibase.org/&#34;&gt;Liquibase&lt;/a&gt; provides a method to load data into tables with lots of customization.&#xA;In the example shown below, I&amp;rsquo;m loading &lt;a href=&#34;http://federalgovernmentzipcodes.us/&#34;&gt;zip code data&lt;/a&gt; with the following column layout&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;#34;Zipcode&amp;#34;,&amp;#34;ZipCodeType&amp;#34;,&amp;#34;City&amp;#34;,&amp;#34;State&amp;#34;,&amp;#34;LocationType&amp;#34;,&amp;#34;Lat&amp;#34;,&amp;#34;Long&amp;#34;,&amp;#34;Location&amp;#34;,&amp;#34;Decommisioned&amp;#34;,&amp;#34;TaxReturnsFiled&amp;#34;,&amp;#34;EstimatedPopulation&amp;#34;,&amp;#34;TotalWages&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Synonyms as abstraction layer</title>
      <link>https://sadalage.com/post/synonyms-as-abstraction-layer/</link>
      <pubDate>Fri, 15 Apr 2016 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/synonyms-as-abstraction-layer/</guid>
      <description>&lt;p&gt;In many development shops, developers are not allowed to access the database schema directly, and are not allowed to create tables, indexes, views etc, instead are given access via a different schema that allows &lt;em&gt;SELECT&lt;/em&gt;, &lt;em&gt;UPDATE&lt;/em&gt; and &lt;em&gt;DELETE&lt;/em&gt; access on data. The general reason is to avoid developers creating database objects without&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using rake and activerecord to generate boilerplate DB Code</title>
      <link>https://sadalage.com/post/using-rake-and-activerecord-to-generate-boilerplate-db-code/</link>
      <pubDate>Mon, 20 Jul 2015 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/using-rake-and-activerecord-to-generate-boilerplate-db-code/</guid>
      <description>&lt;p&gt;IN many projects, there are tables which need default audit columns such as &lt;em&gt;Created_By&lt;/em&gt;, &lt;em&gt;Created_Date&lt;/em&gt;, &lt;em&gt;Modified_By&lt;/em&gt;, &lt;em&gt;Modified_date&lt;/em&gt; and other columns that need to be updated every time some actions are done against the tables and/or columns. This type of functionality can be implemented using triggers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Migrations in NoSQL databases</title>
      <link>https://sadalage.com/post/migrations-in-nosql-databases/</link>
      <pubDate>Tue, 14 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/migrations-in-nosql-databases/</guid>
      <description>&lt;p&gt;In relational database usage the pattern of migrations is well understood and has gained widespread acceptance. Frameworks such as &lt;a href=&#34;http://dbdeploy.com/&#34;&gt;DBDeploy&lt;/a&gt;, &lt;a href=&#34;http://www.dbmaintain.org/overview.html&#34;&gt;DBMaintain&lt;/a&gt;, &lt;a href=&#34;http://blog.mybatis.org/p/products.html&#34;&gt;MyBatis migrations&lt;/a&gt;, &lt;a href=&#34;http://flywaydb.org/&#34;&gt;Flyway&lt;/a&gt;, &lt;a href=&#34;http://www.liquibase.org/&#34;&gt;Liquibase&lt;/a&gt;, &lt;a href=&#34;http://guides.rubyonrails.org/migrations.html&#34;&gt;Active Record Migrations&lt;/a&gt; and many others. These tools allow to migrate the database and maintain the version history of the database in the database.&lt;/p&gt;&#xA;&lt;p&gt;With the rise of &lt;a href=&#34;http://www.thoughtworks.com/insights/blog/nosql-databases-overview&#34;&gt;NoSQL Databases&lt;/a&gt; and their adoption in development teams we are faced with the problem of migrations in NoSQL databases. What are the patterns of data migrations that work in NoSQL databases? as NoSQL databases are schema free and the database does not enforce any schema validation, the schema of the data is in the application and thus allows for different techniques of data migration.&lt;/p&gt;</description>
    </item>
    <item>
      <title>10 node mongodb ReplicaSet on a Single Machine&#34;</title>
      <link>https://sadalage.com/post/node-mongodb-replicaset-on-a-single-machine/</link>
      <pubDate>Mon, 09 Jun 2014 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/node-mongodb-replicaset-on-a-single-machine/</guid>
      <description>&lt;p&gt;While doing evalauation of NoSQL databases, we had a&#xA;&lt;a href=&#34;http://sadalage.com/blog/2013/04/25/10_node_riak_cluster/&#34;&gt;10 node riak cluster&lt;/a&gt; and wanted check how a similar setup would work with mongodb. So started to setup a 10 node &lt;a href=&#34;http://www.mongodb.org/&#34;&gt;mongodb&lt;/a&gt; cluster. Since this was for initial spikes, we decided to set this up on a single machine as with the other test setup using &lt;a href=&#34;http://basho.com/riak/&#34;&gt;Riak&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Before I explain how we setup 10 node mongodb ReplicaSet, let me talk about replica sets. MongoDB implements replication, providing high availability using &lt;a href=&#34;http://sadalage.com/blog/2010/10/31/replica_sets_in_mongodb/&#34;&gt;replica sets&lt;/a&gt;. In a replica set, there are two or more nodes participating in an asynchronous master-slave replication. The replica-set nodes elect the master node, or primary node, among themselves and when the primary node goes down, the rest of the node elect the new primary node.&lt;/p&gt;</description>
    </item>
    <item>
      <title>10 node Riak cluster on a single machine</title>
      <link>https://sadalage.com/post/node_riak_cluster/</link>
      <pubDate>Thu, 25 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/node_riak_cluster/</guid>
      <description>&lt;p&gt;When trying to evaluate NoSQL databases, its usually better to try them out. While trying them out, its better to use them with multiple node configurations instead of running single node. Such as clusters in Riak or Replica-set in mongodb maybe even a sharded setup. On our project we evaluated a 10 node Riak cluster so that we could experiment with N, R and W values and decide which values where optimal for us. In Riak here is what N, R and W mean.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Backup in mongodb replica-set configurations</title>
      <link>https://sadalage.com/post/backup_in_mongodb_replica-sets/</link>
      <pubDate>Thu, 27 Dec 2012 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/backup_in_mongodb_replica-sets/</guid>
      <description>&lt;p&gt;There are multiple ways to take backups of mongodb is different configuraitions, one of the configuration that I have been involved recently is replica-sets. When mongodb is running in &lt;strong&gt;replica-set&lt;/strong&gt; configuration, there is a single &lt;strong&gt;primary&lt;/strong&gt; node and multiple &lt;strong&gt;secondary&lt;/strong&gt; nodes. To take backup of the replica-set we can either do a &lt;em&gt;mongodump&lt;/em&gt; of one of the nodes or shutdown one of the secondary nodes and take file copies, since in a replica-set all nodes have the same data (except arbiter). Lets see how we could deal with &lt;em&gt;mongodump&lt;/em&gt; method of taking backup.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Materialized views and database links in oracle.</title>
      <link>https://sadalage.com/post/materialized_views_and_databases/</link>
      <pubDate>Mon, 10 Aug 2009 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/materialized_views_and_databases/</guid>
      <description>&lt;p&gt;Recently one of my colleague &lt;a href=&#34;http://blog.norrissoftware.com&#34;&gt;Jeff Norris&lt;/a&gt; had a weird error. He was trying to build a materialized view over some tables in his local database and some tables in his remote database using database links the sql to create the view ran fine and provided the results as expected, but when put inside a materialized view statement complained with &lt;strong&gt;ORA-00942&lt;/strong&gt; errors.&lt;/p&gt;&#xA;&lt;p&gt;Lets say the two databases in question are local and remote, so the sql to create the materialized view to load immediately and refresh everyday is&lt;/p&gt;</description>
    </item>
    <item>
      <title>Version Control your work..</title>
      <link>https://sadalage.com/post/version_control_your_work/</link>
      <pubDate>Fri, 06 Jun 2008 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/version_control_your_work/</guid>
      <description>&lt;p&gt;So we version control/source control everything on our project.. code/data/artifacts/diagrams etc. yesterday I said why not extend it to my writings to everything I have. So I started this long journey of refactoring my folder layout and making a nice folder structure to hold all the things I have written about have other artifacts in the process of writing and moved them all to subversion, now all my example code and writings are all under version control that gets backed up everyday&amp;hellip;. feels liberating&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a SQL to generate a SQL</title>
      <link>https://sadalage.com/post/writing_a_sql_to_generate_a_sql/</link>
      <pubDate>Tue, 06 May 2008 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/writing_a_sql_to_generate_a_sql/</guid>
      <description>&lt;p&gt;We had a weird requirement on our project recently..&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Find all the Rows in All the tables that do not comply with the Constraints that we have in development but not in QA environments&lt;/p&gt;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Setup and Teardown of database during testing</title>
      <link>https://sadalage.com/post/setup_and_teardown_of_database/</link>
      <pubDate>Thu, 17 Apr 2008 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/setup_and_teardown_of_database/</guid>
      <description>&lt;p&gt;When doing Performance Testing or running Unit/Functional tests on a database, there is a need to periodically get the database to a known state, so that the tests behave in a predictable way and to get rid of all the data created by the tests. Some of the ways to get a clean database are.&lt;/p&gt;&#xA;&lt;p&gt;Using Scripts: Recreate the database using scripts, the same scripts that are used in development environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Experience using DBDeploy on my project</title>
      <link>https://sadalage.com/post/exprerience_using_dbdeploy_on_project/</link>
      <pubDate>Mon, 14 Jan 2008 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/exprerience_using_dbdeploy_on_project/</guid>
      <description>&lt;p&gt;We have been using &lt;a href=&#34;http://DBDeploy.com&#34;&gt;DBDeploy&lt;/a&gt; on my project for more than 6 months now and wanted to show how things are going. First lets talk about set up, we are using dbdeploy in our Java development environment with ANT as our build scripting tool, against a Oracle 10g database.&lt;/p&gt;&#xA;&lt;p&gt;Define the ANT task first&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-XML&#34; data-lang=&#34;XML&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#6ab825;font-weight:bold&#34;&gt;&amp;lt;taskdef&lt;/span&gt; &lt;span style=&#34;color:#bbb&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#ed9d13&#34;&gt;&amp;#34;dbdeploy&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#bbb&#34;&gt;classname=&lt;/span&gt;&lt;span style=&#34;color:#ed9d13&#34;&gt;&amp;#34;net.sf.dbdeploy.AntTarget&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#bbb&#34;&gt;classpath=&lt;/span&gt;&lt;span style=&#34;color:#ed9d13&#34;&gt;&amp;#34;lib/dbdeploy.jar&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#6ab825;font-weight:bold&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now we create the main dbinitialize task a ANT task to create you database schema, using the upgrade generated by the dbdeploy file shown below. The thing to note is that dbdeploy generates the upgrade file but does not run it against your database, so we have to make sure we call the generated upgrade file via a sql ANT task.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Database Migration Utility</title>
      <link>https://sadalage.com/post/database_migration_utility/</link>
      <pubDate>Mon, 28 Aug 2006 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/database_migration_utility/</guid>
      <description>&lt;p&gt;I have taken up the hobby of searching the opensource landscape for tools that help me do Agile database development. I&amp;rsquo;m going to write about all the Tools that I come across that help me, my preference is opensource software but not limited to it. I will try to provide some sound examples and share my experiences with all that tools that I come across and share the example code I used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automated Tablespace deployment</title>
      <link>https://sadalage.com/post/automated_tablespace_deployment/</link>
      <pubDate>Mon, 01 May 2006 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/automated_tablespace_deployment/</guid>
      <description>&lt;p&gt;In development mode you don&amp;rsquo;t want to worry about which table goes into what Tablespace in production as it complicates development environments. The production DBA&amp;rsquo;s want to have their input and control over deciding what table goes into what Tablespace. To allow for this I used a mapping scheme as shown below.&lt;/p&gt;&#xA;&lt;p&gt;Lets assume we have 3 tables in our system Customer, CustomerOrder, OrderStatus. Where we are expecting Customer table to have large numbers of rows and CustomerOrder to have significanly large number of rows while OrderStatus would have few rows and not change as much. In development environments all these tables and their indexes will be put under the same tablespace. In production like environments we want to put them into seperate tablespaces.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
