<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hervé Schweitzer, auteur/autrice sur dbi Blog</title>
	<atom:link href="https://www.dbi-services.com/blog/author/herve-schweitzer/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.dbi-services.com/blog/author/herve-schweitzer/</link>
	<description></description>
	<lastBuildDate>Tue, 29 Apr 2025 14:20:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/cropped-favicon_512x512px-min-32x32.png</url>
	<title>Hervé Schweitzer, auteur/autrice sur dbi Blog</title>
	<link>https://www.dbi-services.com/blog/author/herve-schweitzer/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>YaK Core – The Holy Grail for Deploying Ansible Code Everywhere</title>
		<link>https://www.dbi-services.com/blog/yak-core-the-holy-grail-for-deploying-ansible-code-everywhere/</link>
					<comments>https://www.dbi-services.com/blog/yak-core-the-holy-grail-for-deploying-ansible-code-everywhere/#respond</comments>
		
		<dc:creator><![CDATA[Hervé Schweitzer]]></dc:creator>
		<pubDate>Tue, 29 Apr 2025 13:52:46 +0000</pubDate>
				<category><![CDATA[Ansible]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Database management]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[OCI]]></category>
		<category><![CDATA[YaK]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=38158</guid>

					<description><![CDATA[<p>YaK core Multi-Platform open source Automation Tool simplifies the deployment of Ansible playbooks through a clean UI and API. It offers an intuitive interface where users can upload playbooks, configure parameters, and deploy them seamlessly across various platforms, and all managed through a centralized inventory stored in a PostgreSQL database. With YaK Core, developers can [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/yak-core-the-holy-grail-for-deploying-ansible-code-everywhere/">YaK Core – The Holy Grail for Deploying Ansible Code Everywhere</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="510" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/yak-core-open-source-multi-platform-1-1024x510.png" alt="" class="wp-image-38228" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/yak-core-open-source-multi-platform-1-1024x510.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/yak-core-open-source-multi-platform-1-300x149.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/yak-core-open-source-multi-platform-1-768x383.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/yak-core-open-source-multi-platform-1.png 1134w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="has-medium-font-size"><strong>YaK core Multi-Platform open source Automation Tool </strong>simplifies the deployment of Ansible playbooks through a clean UI and API. It offers an intuitive interface where users can upload playbooks, configure parameters, and deploy them seamlessly across various platforms, and all managed through a centralized inventory stored in a PostgreSQL database. With YaK Core, developers can focus on writing application code without worrying about infrastructure setup or management.</p>



<p class="has-medium-font-size"><strong>YaK</strong> consists of two parts: <strong>YaK Core</strong>, which is open source, and <strong>YaK Components</strong>, which can be installed on top. These <strong>YaK Components </strong>are platform-agnostic service packages (e.g., PostgreSQL, Oracle DB, MongoDB, Kubernetes, etc.), written in Ansible by experts. They provide essential operational features such as backup, patching, upgrades, and high availability. If you&#8217;d like to learn more about the available YaK components, feel free to <a href="https://yak4all.io/contact">contact us!</a></p>



<p class="has-medium-font-size">But that’s not all. <strong>YaK Core </strong>also lets you create your own <strong>YaK Components</strong> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f60a.png" alt="😊" class="wp-smiley" style="height: 1em; max-height: 1em;" />. Once created, your component becomes immediately available for deployment across all platforms supported by YaK Core.</p>



<p class="has-medium-font-size">In this blog, I’ll show you how easy it is to create your own <strong>YaK Component</strong> using Ansible, upload it to <strong>YaK Core</strong>, and deploy it across any supported platform.</p>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<h2 class="wp-block-heading has-text-align-center" id="h-yak-demo-platform-provisioning">YaK Demo platform provisioning</h2>



<p>To get started with YaK Core Multi-Platform open source solution, visit <a class="" href="https://yak4all.io">https://</a><a href="https://yak4all.io" target="_blank" rel="noreferrer noopener">yak4all</a><a class="" href="https://yak4all.io">.io</a> and provision your own YaK demo environment (take 5 minutes to be ready).</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-yak wp-block-embed-yak"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="iT6gmuzgX5"><a href="https://yak4all.io/demo/">Demo</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Demo&#8221; &#8212; YaK" src="https://yak4all.io/demo/embed/#?secret=rhIPnL8eSE#?secret=iT6gmuzgX5" data-secret="iT6gmuzgX5" width="500" height="282" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<h2 class="wp-block-heading has-text-align-center" id="h-build-your-yak-component">Build your YaK Component</h2>



<p class="has-medium-font-size">To build a YaK Component, you need to declare at least the following three files </p>



<p class="has-text-align-left"><strong>     1. playbooks/create_linux_users.yml<br>     2. manifest.yml<br>     3. yak_variables_specifications/basic_variables_specifications.yml</strong></p>



<h3 class="wp-block-heading has-text-color has-link-color wp-elements-c7ffa4e866b5c2f8365c6699e09153cd" id="h-1-the-ansible-playbook" style="color:#006fb5">1. The Ansible Playbook </h3>



<p class="has-medium-font-size"><strong>playbooks/create_linux_users.yml</strong><br>This file is simply your Ansible playbook, nothing more. The only requirement is that the code uses variables, which will be exposed in the UI for configuration. The example playbook below will create a user and optionally grant them sudo privileges.</p>



<pre class="wp-block-code"><code>---
- name: Create Linux users
  hosts: linux_hosts
  become: true
  gather_facts: true

  tasks:
    - debug:
        var: user

    - name: Create users
      ansible.builtin.user:
        name: "{{ item.username }}"
        create_home: "{{ item.create_home | default(true) }}"
        state: present
      loop: "{{ user }}"

    - name: Add users to sudoers
      community.general.sudoers:
        name: "yak-sudoer-{{ item.username }}"
        user: "{{ item.username }}"
        commands: ALL
        state: present
      loop: "{{ user }}"
      when: item.is_sudoer
        
  post_tasks:
    - name: Update component state
      delegate_to: localhost
      yak.core.yak_component_state_update:
        component_state_name: 'deployed'
...</code></pre>



<h3 class="wp-block-heading has-text-color has-link-color wp-elements-9766ac0c91f53fa89ea1455a27f3848d" id="h-2-manifest-file" style="color:#006fb5">2. Manifest file</h3>



<p class="has-medium-font-size"><strong>manifest.yml</strong><br>This file contains the basic information about your component and specifies which playbooks can be executed.</p>



<pre class="wp-block-code"><code>name: linux_users

version:
  major: 1
  minor: 0
  patch: 0

sub_component_types:
  - display_label: Linux users
    name: create_linux_users
    features:
      - display_label: Create Linux users
        name: create_linux_users
        playbook_name: playbooks/create_linux_users.yml

    inventory_maps:
      - group_name: linux_hosts
        group_nicename: Linux hosts
        group_description: Host on which the users will be created
        group_min_hosts: 1
        group_max_hosts: 100
        type: host
        os_type: Linux</code></pre>



<h3 class="wp-block-heading has-text-color has-link-color wp-elements-4433a9419864971a558f59cbb6ad037e" id="h-3-variable-specification-file" style="color:#006fb5">3. Variable specification file</h3>



<p class="has-medium-font-size"><strong>yak_variables_specifications/basic_variables_specifications.yml</strong><br>Now you can define and provide all the specifications for the variables you want to make configurable, with all the required settings <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" />.</p>



<pre class="wp-block-code"><code>- variableName: user
  niceName: Users to create
  dataType: array
  children:
    - variableName: username
      niceName: Username
      dataType: string
      mandatory: true
      defaultValue: yak
      isOneOffSetting: false
      usage: Name of the user to create

    - variableName: create_home
      niceName: Create Home directory
      dataType: boolean
      mandatory: true
      defaultValue: true
      isOneOffSetting: false
      usage: Tick the box if you want to create a Home directory for the user (/home/&lt;username&gt;)

    - variableName: is_sudoer
      niceName: Grant sudo privileges
      dataType: boolean
      mandatory: true
      defaultValue: true
      isOneOffSetting: false
      usage: Tick the box if you want to grant "ALL" privileges escalation to the user</code></pre>



<p class="has-medium-font-size">That&#8217;s it! You now have all the necessary files for your first YaK Component. Next, create a ZIP package and upload it to your deployed YaK Demo environment.</p>



<p class="has-medium-font-size">To make things easier, I&#8217;ve created a ZIP file that you can upload directly. : <a href="https://www.swisstransfer.com/d/6db7e854-c74a-4616-be89-bc4375059161">create_linux_user.zip</a> </p>



<figure class="wp-block-image size-full"><img decoding="async" width="1016" height="566" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.10.48.png" alt="" class="wp-image-38208" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.10.48.png 1016w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.10.48-300x167.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.10.48-768x428.png 768w" sizes="(max-width: 1016px) 100vw, 1016px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<h2 class="wp-block-heading has-text-align-center" id="h-setup-a-server">Setup a Server</h2>



<p class="has-medium-font-size">For this task, simply follow the documentation below up to Step 4: <em>Deploy your server</em> <a href="https://dbi-services.gitbook.io/yak-user-doc/introduction/yak-demo">https://dbi-services.gitbook.io/yak-user-doc/introduction/yak-demo</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<h2 class="wp-block-heading has-text-align-center" id="h-declare-and-deploy-your-component">Declare and deploy your Component </h2>



<p class="has-medium-font-size">You’re now ready to declare and deploy your component!</p>



<h3 class="wp-block-heading has-text-color has-link-color wp-elements-aec523cc5c9123a8748ed34598dfbbd4" id="h-1-declare" style="color:#006fb5">1. Declare </h3>



<p class="has-medium-font-size"><strong>YaK UI -&gt; Components -&gt; Declare -&gt; Component_type : linux_users -&gt; Save</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="994" height="872" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.21.47.png" alt="" class="wp-image-38209" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.21.47.png 994w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.21.47-300x263.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.21.47-768x674.png 768w" sizes="auto, (max-width: 994px) 100vw, 994px" /></figure>



<h3 class="wp-block-heading has-text-color has-link-color wp-elements-a421b9f745833b9dda3d46b9d7e21629" id="h-2-deploy" style="color:#006fb5">2 Deploy </h3>



<p class="has-medium-font-size"><strong>YaK UI -&gt; Components -&gt; Select LinuxUser -&gt; Action -&gt; Create Linux User -&gt; Confirm</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="990" height="326" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.23.48.png" alt="" class="wp-image-38212" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.23.48.png 990w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.23.48-300x99.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.23.48-768x253.png 768w" sizes="auto, (max-width: 990px) 100vw, 990px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<h2 class="wp-block-heading has-text-align-center" id="h-conclusion">Conclusion</h2>



<p class="has-medium-font-size">This component can now be deployed on any cloud platform or integrated on On-Premises environment using the YaK UI, and can also be deployed in parallel on up to 100 servers, as specified in your Manifest file.</p>



<p class="has-medium-font-size">With this solution, you can provide your colleagues with an intuitive and efficient way to work with Ansible playbooks, enhancing their overall experience <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" />.</p>



<p class="has-medium-font-size">For more Information about YaK see the blogs available here : <a href="https://www.dbi-services.com/blog/yak">https://www.dbi-services.com/blog/yak</a></p>



<p></p>
<p>L’article <a href="https://www.dbi-services.com/blog/yak-core-the-holy-grail-for-deploying-ansible-code-everywhere/">YaK Core – The Holy Grail for Deploying Ansible Code Everywhere</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/yak-core-the-holy-grail-for-deploying-ansible-code-everywhere/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Delphix Data Virtualization and Masking</title>
		<link>https://www.dbi-services.com/blog/delphix-data-virtualization-and-masking/</link>
					<comments>https://www.dbi-services.com/blog/delphix-data-virtualization-and-masking/#respond</comments>
		
		<dc:creator><![CDATA[Hervé Schweitzer]]></dc:creator>
		<pubDate>Thu, 20 Feb 2025 15:55:44 +0000</pubDate>
				<category><![CDATA[Delphix]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[compliance]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[datafishing]]></category>
		<category><![CDATA[masking]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=37343</guid>

					<description><![CDATA[<p>After successfully completing several customer projects involving Delphix products, Data Virtualization and Data Masking, I decided to set up a complete infrastructure internally to test the combination of both products. Delphix Data Virtualization Creates only a virtual copy of your database blocks instead of a full physical copy. For example this allows making a new [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/delphix-data-virtualization-and-masking/">Delphix Data Virtualization and Masking</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>After successfully completing several customer projects involving Delphix products,<strong> Data Virtualization </strong> and <strong>Data Masking</strong>, I decided to set up a complete infrastructure internally to test the combination of both products.</p>



<p><strong><a href="https://www.delphix.com/platform/continuous-data">Delphix Data Virtualization</a></strong> Creates only a virtual copy of your database blocks instead of a full physical copy. For example this allows making a new big database available only in a few seconds.</p>



<p><strong><a href="https://www.delphix.com/platform/continuous-compliance">Delphix Data Masking</a></strong> Protects sensitive data by replacing it with <strong>realistic but non-sensitive</strong> values, ensuring compliance with <strong>privacy regulations</strong> while maintaining data usability for development, testing, and analytics. For reference, dbi-services has developed Swiss masking rules for customers to apply all their specific needs.</p>



<h3 class="wp-block-heading" id="h-setup"><strong>Setup</strong></h3>



<p>As always, setting up the prerequisites took some time, but once the environment was built, it was truly rewarding to demonstrate the combined power of these tools to my colleagues. It&#8217;s a real pleasure, like a game, building database environments in a flash, where the data is directly masked.</p>



<p>This allows you to rapidly provision databases to your internal or external developers, without taking any risk of a data phishing attack!</p>



<p>Watch this video! It&#8217;s only a minute-long and you&#8217;ll see how easy it is! to create a new masked Oracle pluggable database VPDB2_masked on another server (These tasks can also be fully automated in a pipeline using an API)</p>



<figure class="wp-block-video"><video height="1080" style="aspect-ratio: 1920 / 1080;" width="1920" autoplay controls loop muted src="http://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Delphix.mp4" playsinline></video></figure>



<h3 class="wp-block-heading" id="h-relevant-outcomes"><strong>Relevant outcomes</strong> </h3>



<p>The Delphix pricing model is based on the size of your databases, thus you can apply the same Virtualization and Masking capabilities at least for PostgreSQL, SQL Server, and Sybase at no additional cost. Are you interested in making your database development environments fully secure? Don’t wait, dbi    services has your solution!</p>



<h3 class="wp-block-heading" id="h-for-those-who-are-interested-in-more-details"><strong>For those who are interested in more details </strong></h3>



<p>1. Table data from the source database PDB1</p>



<figure class="wp-block-image size-large is-style-default"><img loading="lazy" decoding="async" width="1024" height="377" src="http://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-15.53.21-1024x377.png" alt="Original data of the table " class="wp-image-37388" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-15.53.21-1024x377.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-15.53.21-300x111.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-15.53.21-768x283.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-15.53.21-1536x566.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-15.53.21-2048x755.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>2. Table data in the new created and masked virtual database VPDB2_Masked </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="426" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-15.55.24-1024x426.png" alt="masked data table" class="wp-image-37389" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-15.55.24-1024x426.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-15.55.24-300x125.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-15.55.24-768x320.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-15.55.24-1536x640.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-15.55.24-2048x853.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>   3. Output of the masking job</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="512" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-16.19.13-1024x512.png" alt="output from a masking job" class="wp-image-37391" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-16.19.13-1024x512.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-16.19.13-300x150.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-16.19.13-768x384.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-16.19.13-1536x768.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Screenshot-2025-02-20-at-16.19.13.png 1899w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading" id="h-useful-information-related-to-delphix"><strong>Useful information related to Delphix</strong></h3>



<p>Blog that presents Data Masking in detail</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-dbi-blog wp-block-embed-dbi-blog"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="PSc3ktDQaF"><a href="https://www.dbi-services.com/blog/data-masking-with-delphix-continuous-compliance/">Data Masking with Delphix Continuous Compliance</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Data Masking with Delphix Continuous Compliance&#8221; &#8212; dbi Blog" src="https://www.dbi-services.com/blog/data-masking-with-delphix-continuous-compliance/embed/#?secret=s1fPl8S0x3#?secret=PSc3ktDQaF" data-secret="PSc3ktDQaF" width="500" height="282" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p>Customer success story </p>



<figure class="wp-block-embed is-type-wp-embed is-provider-dbi-services wp-block-embed-dbi-services"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="l34mKnQlGt"><a href="https://www.dbi-services.com/testimonials/galenicas-data-security-standards-with-delphix/">Galenica&#8217;s data security standards with Delphix</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Galenica&#8217;s data security standards with Delphix&#8221; &#8212; dbi services" src="https://www.dbi-services.com/testimonials/galenicas-data-security-standards-with-delphix/embed/#?secret=Gnu6rNzWLH#?secret=l34mKnQlGt" data-secret="l34mKnQlGt" width="500" height="282" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p>Webinar that presents Data Virtualization </p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Delphix - Continuous Data pour Oracle" width="500" height="281" src="https://www.youtube.com/embed/yRv8i5vML7s?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p></p>



<p></p>



<p></p>



<p></p>
<p>L’article <a href="https://www.dbi-services.com/blog/delphix-data-virtualization-and-masking/">Delphix Data Virtualization and Masking</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/delphix-data-virtualization-and-masking/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="http://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/02/Delphix.mp4" length="167" type="video/mp4" />

			</item>
		<item>
		<title>2022.pgconf.eu Berlin conference for tech</title>
		<link>https://www.dbi-services.com/blog/2022-pgconf-eu-berlin-conference-for-tech/</link>
					<comments>https://www.dbi-services.com/blog/2022-pgconf-eu-berlin-conference-for-tech/#respond</comments>
		
		<dc:creator><![CDATA[Hervé Schweitzer]]></dc:creator>
		<pubDate>Mon, 31 Oct 2022 09:02:22 +0000</pubDate>
				<category><![CDATA[Database management]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[YaK]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[pgconfeu]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=20222</guid>

					<description><![CDATA[<p>Last week, the biggest European PostgreSQL event of the year took place in Berlin (2022.pgconf.eu). This event is an excellent opportunity to meet developers from the PostgreSQL community and to attend high profile tech presentations. Tuesday evening we started with the traditional &#8220;Schweizer Abend&#8221; Dinner with the Swiss community. We had a special guest at [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/2022-pgconf-eu-berlin-conference-for-tech/">2022.pgconf.eu Berlin conference for tech</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Last week, the biggest European PostgreSQL event of the year took place in Berlin (<a href="http://2022.pgconf.eu">2022.pgconf.eu</a>). This event is an excellent opportunity to meet developers from the PostgreSQL community and to attend high profile tech presentations.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="696" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6470-2-1024x696.jpg" alt="" class="wp-image-20238" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6470-2-1024x696.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6470-2-300x204.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6470-2-768x522.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6470-2-1536x1044.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6470-2-2048x1392.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Tuesday evening we started with the traditional &#8220;Schweizer Abend&#8221; Dinner with the Swiss community. We had a special guest at our table with <a href="https://fritshoogland.wordpress.com/" target="_blank" rel="noreferrer noopener">Frits Hoogland </a>who comes from Holland/Netherlands. Fritz also made the switch from Oracle to PostgreSQL a few years ago, and now works for <a href="https://www.yugabyte.com/" target="_blank" rel="noreferrer noopener">Yugabyte</a>. The dinner was also an opportunity for us to discuss current IT trends.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="564" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6453-1-1024x564.jpg" alt="" class="wp-image-20226" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6453-1-1024x564.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6453-1-300x165.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6453-1-768x423.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6453-1-1536x845.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6453-1-2048x1127.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Wednesday Morning the conference started and it was amazing to see how many people were there. Below is a picture of the plenary session at the start of the conference.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="406" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6458-1-1024x406.jpg" alt="" class="wp-image-20227" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6458-1-1024x406.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6458-1-300x119.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6458-1-768x305.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6458-1-1536x609.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6458-1-2048x812.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>dbi services was present at the conference with 1 workshop and 2 presentations: </p>



<p><a href="https://www.postgresql.eu/events/pgconfeu2022/schedule/session/4050-postgresql-dba-essentials/" target="_blank" rel="noreferrer noopener">Daniel Westermann &#8211; 1 Day Workshop PostgreSQL DBA Essentials </a></p>



<p><a href="https://www.postgresql.eu/events/pgconfeu2022/schedule/session/3799-hero-hero-superhero/" target="_blank" rel="noreferrer noopener">Julia Gugel &#8211; Hero + Hero = SuperHero ! </a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="472" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6469-1-1024x472.jpg" alt="" class="wp-image-20229" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6469-1-1024x472.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6469-1-300x138.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6469-1-768x354.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6469-1-1536x708.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6469-1-2048x944.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><a href="https://www.postgresql.eu/events/pgconfeu2022/schedule/session/3830-toast-for-breakfast-and-compression/" target="_blank" rel="noreferrer noopener">Daniel Westermann &#8211; TOAST, for breakfast and compression</a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="523" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6475-1024x523.jpg" alt="" class="wp-image-20231" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6475-1024x523.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6475-300x153.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6475-768x392.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6475-1536x785.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/IMG_6475-2048x1046.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>As you can see, Daniel and Julia&#8217;s sessions were quite busy.</p>



<p><strong>YaK</strong></p>



<p>This event was also an opportunity for dbi services to present our new open source product that we just launched a month ago: the <a href="https://www.dbi-services.com/yak" target="_blank" rel="noreferrer noopener">YaK</a>. The discussions around this product during the 3 days were very interesting and I could gather a lot of new development ideas/proposals to enhance the product.</p>



<p>I also had the opportunity to present the product in the event&#8217;s Sponsors Track.</p>



<p><a href="https://www.postgresql.eu/events/pgconfeu2022/schedule/session/4078-yak-the-next-gen-multi-platform-postgresql-database-managed-services/" target="_blank" rel="noreferrer noopener">Hervé Schweitzer &#8211; YaK &#8211; The Next-Gen Multi-Platform PostgreSQL Database Managed Services</a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/FgJ3OTfXEAE1M9z-1024x768.jpg" alt="" class="wp-image-20234" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/FgJ3OTfXEAE1M9z-1024x768.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/FgJ3OTfXEAE1M9z-300x225.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/FgJ3OTfXEAE1M9z-768x576.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/FgJ3OTfXEAE1M9z.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Last not least &#8211; dbi services&#8217; booth</strong></p>



<p>I would also like to thank Martin Moll, Region Manager Zürich at dbi services, who successfully managed the booth during the 3 days, which is not an easy task. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="994" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/Ff-YRmqXwAIjwku-1024x994.jpg" alt="" class="wp-image-20237" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/Ff-YRmqXwAIjwku-1024x994.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/Ff-YRmqXwAIjwku-300x291.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/Ff-YRmqXwAIjwku-768x746.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/10/Ff-YRmqXwAIjwku.jpg 1519w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>See you there next year for many new interesting sessions.</p>



<p></p>



<p></p>
<p>L’article <a href="https://www.dbi-services.com/blog/2022-pgconf-eu-berlin-conference-for-tech/">2022.pgconf.eu Berlin conference for tech</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/2022-pgconf-eu-berlin-conference-for-tech/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How the YaK is born</title>
		<link>https://www.dbi-services.com/blog/how-the-yak-is-born/</link>
					<comments>https://www.dbi-services.com/blog/how-the-yak-is-born/#respond</comments>
		
		<dc:creator><![CDATA[Hervé Schweitzer]]></dc:creator>
		<pubDate>Thu, 29 Sep 2022 05:48:25 +0000</pubDate>
				<category><![CDATA[Ansible]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[YaK]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Oracle OCI]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=19239</guid>

					<description><![CDATA[<p>It all began with a challenge In the consulting job, some tasks can be a bit repetitive. They also take up valuable consulting time that the client would be more than happy to use for higher value-added tasks. So, my team and I started thinking about a solution two years ago. Which tasks could be [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/how-the-yak-is-born/">How the YaK is born</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YAK-logotype-gimmik-PANTONE-2022-1024x821.png" alt="" class="wp-image-19243" width="224" height="179" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YAK-logotype-gimmik-PANTONE-2022-1024x821.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YAK-logotype-gimmik-PANTONE-2022-300x240.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YAK-logotype-gimmik-PANTONE-2022-768x616.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YAK-logotype-gimmik-PANTONE-2022-1536x1231.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YAK-logotype-gimmik-PANTONE-2022.png 1704w" sizes="auto, (max-width: 224px) 100vw, 224px" /></figure>



<p><strong>It all began with a challenge</strong></p>



<p>In the consulting job, some tasks can be a bit repetitive. They also take up valuable consulting time that the client would be more than happy to use for higher value-added tasks. So, my team and I started thinking about a solution two years ago. Which tasks could be automated to facilitate the work of our consultants and speed up the delivery to the client? The deployment of infrastructures. Of course!</p>



<p>Then COVID came along. It was a disaster for everyone&#8230; but this pandemic gave us the opportunity and the time to start the discussion: How could we implement a IaC (Infrastructure as Code) solution usable for all on-premises platforms and for public Cloud providers. The idea behind this question? Deploy multi-technology infrastructures in a minimum of time and effort including all our Best Practices and satisfy our consultants and customers. A great way to kill two birds with one stone.</p>



<p><strong>The bumpy road from the idea to the realization</strong></p>



<p>The idea is there, the feedbacks are positive, everyone is enthusiastic. Next step: the development. This is where the first big questions came in: Should we use the services provided by the Cloud providers to deploy infrastructures with IaC? Nope, because that meant managing different solutions for each Cloud provider. Not efficient. Another corollary: you would have needed as many experts as solutions. At a time of IT labor shortage? Not efficient either.</p>



<p>But we are not afraid of a challenge. We pushed the thought further and found a solution: using Ansible for the deployment! Why Ansible? Because it fully met all our requirements and, icing on the cake, it also has many collections/roles for the different Cloud providers. You gotta <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f499.png" alt="💙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ansible. The idea was good on paper. But the practice quickly turned out to be “bumpier” than expected. One of the problems we encountered was that the different inventories could not talk to each other. So, we had to switch from one inventory to another, and could not get an overview of all the components deployed at the different Cloud providers. Additionally, each inventory had its own structure making the code too complex to manage<a>.</a></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="393" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/Ansible_dynamic_inventories-1024x393.png" alt="" class="wp-image-19240" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/Ansible_dynamic_inventories-1024x393.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/Ansible_dynamic_inventories-300x115.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/Ansible_dynamic_inventories-768x295.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/Ansible_dynamic_inventories-1536x590.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/Ansible_dynamic_inventories-2048x786.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong>The YaK is born!</strong></p>



<p>The taste of challenge runs in our veins. So, we put our heads together and decided that you&#8217;re never better served than by yourself. Result: we developed our own product with our own Ansible inventory. Our IaC solution was born!</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="389" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YaK-inventory-1024x389.png" alt="" class="wp-image-19241" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YaK-inventory-1024x389.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YaK-inventory-300x114.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YaK-inventory-768x292.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YaK-inventory-1536x584.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YaK-inventory-2048x778.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>The happy moms and dads were so moved that they had a tough time finding a name to match their happiness. At dbi services, we love IT and simple things: We have developed an IaC solution, why not simply call it YaK? It suits us all the more since the YaK is a solid, reliable&#8230; and adorable animal, isn’t it? <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f970.png" alt="🥰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> All that was left was to convince our marketing team to follow our lead and come up with a logo.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YAK-logotype-PANTONE-2022-1024x277.png" alt="" class="wp-image-19265" width="840" height="227" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YAK-logotype-PANTONE-2022-1024x277.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YAK-logotype-PANTONE-2022-300x81.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YAK-logotype-PANTONE-2022-768x208.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YAK-logotype-PANTONE-2022-1536x416.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/09/YAK-logotype-PANTONE-2022-2048x554.png 2048w" sizes="auto, (max-width: 840px) 100vw, 840px" /></figure>



<p>We fully trust the potential of our YaK. We now have to convince you too. So, we have opened its core part to the Open Source community. It is all yours to test. See you here: <a href="https://www.dbi-services.com/products/yak/" target="_blank" rel="noreferrer noopener">https://www.dbi-services.com/products/yak/</a></p>



<p>I also take this opportunity to thank Jérôme Witt, Nicolas Penot, David Hueber, Joël Cattin and Ali Ashgari who have been part of the project since the beginning. Many others joined us since: Nicolas Jardot, Nicolas Meunier, Chay Te, Jean-Philippe Clapot, Pascal Brand, Olivier Spiesser, Alexandre Nestor, Alain Fuhrer&#8230; and it&#8217;s not finished <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" />  #besharing #besuccessful #bdbi </p>
<p>L’article <a href="https://www.dbi-services.com/blog/how-the-yak-is-born/">How the YaK is born</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/how-the-yak-is-born/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Deep dive Postgres at the #pgconfeu conference</title>
		<link>https://www.dbi-services.com/blog/deep-dive-postgres-at-the-pgconfeu-conference/</link>
					<comments>https://www.dbi-services.com/blog/deep-dive-postgres-at-the-pgconfeu-conference/#respond</comments>
		
		<dc:creator><![CDATA[Hervé Schweitzer]]></dc:creator>
		<pubDate>Fri, 26 Oct 2018 06:37:21 +0000</pubDate>
				<category><![CDATA[Database Administration & Monitoring]]></category>
		<category><![CDATA[MVCC]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Undo]]></category>
		<category><![CDATA[zHead]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/deep-dive-postgres-at-the-pgconfeu-conference/</guid>

					<description><![CDATA[<p>Today I followed many good technical sessions at the European Postgres conference. The Postgres conferences are really technical oriented, you will find no marketing sessions there and you learn a lot of things. As promised yesterday, I wrote today my first blog about the new Postgres storage engine ZHEAP/UNDO, which is a very interesting feature, [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/deep-dive-postgres-at-the-pgconfeu-conference/">Deep dive Postgres at the #pgconfeu conference</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Today I followed many good technical sessions at the European Postgres conference. The Postgres conferences are  really technical oriented, you will find no marketing sessions there and you learn a lot of things.<br />
As promised yesterday, I wrote today my first blog about the new Postgres storage engine ZHEAP/UNDO, which is a very interesting feature, with very interesting results.<br />
<span id="more-11941"></span><br />
Before you continue to read this blog, if you didn&#8217;t read my blog from yesterday,read it first <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://www.dbi-services.com/blog/my-first-day-at-the-pgconfeu-2018-in-lisbon/" title="link" target="_blank" rel="noopener noreferrer">link</a></p>
<h3>First test : table creation</h3>
<p>We create 2 tables, one with the default Postgres storage engine HEAP, and one with the new storage enfine ZHEAP.</p>
<pre class="brush: bash; gutter: true; first-line: 1">
PSQL&gt; create table heap2 as select a.*, md5(a::varchar), now() from generate_series(1,5000000) a;
 
SELECT 5000000
Time: 12819.369 ms (00:12.819)

PSQL&gt; create table zheap2  with (storage_engine='zheap') as select a.*, md5(a::varchar), now() from generate_series(1,5000000) a;
SELECT 5000000
Time: 19155.004 ms (00:19.155)
</pre>
<p>You noticed, that with Postgres you can choose your storage engine at table level :-). The table creation with ZHEAP is slower, but is is normal because now we have to create the UNDO segment also.</p>
<h3>Second test : Size of the both tables</h3>
<p>Before to start the tests we will check the size of the HEAP and ZHEAP tables, as announced yesterday the HEAP table should be smaller, because we have less header information.</p>
<pre class="brush: bash; gutter: true; first-line: 1">
PSQL&gt;  select pg_size_pretty(pg_relation_size('heap2'));
 pg_size_pretty 
----------------
 365 MB
PSQL&gt; select pg_size_pretty(pg_relation_size('zheap2'));
 pg_size_pretty 
----------------
 289 MB
</pre>
<p>The ZHEAP tables is smaller, it exactly what Amit explain us yesterday, because the block header with ZHEAP is smaller. If you want to learn more read his presentation from yesterday. Again the link is on my blog from yesterday.</p>
<h3>Third test : Update on the table</h3>
<p>To get the bloat effect on the HEAP table, we will now update the full table and see what happen.</p>
<pre class="brush: bash; gutter: true; first-line: 1">
PSQL&gt; update heap2 set a=a+12222222;
UPDATE 5000000
Time: 19834.911 ms (00:19.835)

PSQL&gt; update zheap2 set a=a+12222222;
UPDATE 5000000
Time: 26956.043 ms (00:26.956)

PSQL&gt; select pg_size_pretty(pg_relation_size('zheap2'));
 pg_size_pretty 
----------------
 289 MB
PSQL&gt; vacuum heap2;
PSQL&gt; select pg_size_pretty(pg_relation_size('heap2'));
 pg_size_pretty 
----------------
 730 MB
</pre>
<p>The same as for the creation the update is a bit longer, but the update with ZHEAP write  many information into the log file.We should test again this update with disabling the writing of information into the log file about creating undo segment.<br />
But  as you can see, the most important information here is that the table don&#8217;t bloat as the HEAP table, now the HEAP table is 2 times bigger despite I executed a VACUUM.</p>
<h3>Fourth test: test of the ROLLBACK</h3>
<p>To test the ROLLBACK we have to open first a transaction with BEGIN;</p>
<pre class="brush: bash; gutter: true; first-line: 1">
PSQL&gt;  begin;
BEGIN
PSQL&gt;* update heap2 set a=a+12222222;
UPDATE 5000000
Time: 22071.462 ms (00:22.071)
PSQL&gt; * rollback;
ROLLBACK
Time: 1.437 ms

PSQL&gt; begin;
BEGIN
PSQL&gt; * update zheap2 set a=a+12222222;
UPDATE 5000000
Time: 28210.845 ms (00:28.211)
PSQL&gt; * rollback;
ROLLBACK
Time: 0.567 ms
</pre>
<p>This is the part where I&#8217;m the most surprised, the ROLLBACK for ZHEAP is so fast as for HEAP, I can&#8217;t explain that. I will leave my colleague Daniel Westermann making deeper tests :-). Because with ZHEAP he has to apply the undo blocks, where HEAP tables only mark the transactions as aborted.</p>
<h3>Fifth tests : Check of the query performances</h3>
<p>For this test we have to first flush the filesystem cache and to restart the database, to be sure that nothing is cached.</p>
<pre class="brush: bash; gutter: true; first-line: 1">
postgres@dbi-pg-tun:/home/postgres/zheap/ [ZHEAP] pgstop 
waiting for server to shut down.... done
server stopped

postgres@dbi-pg-tun:/home/postgres/ [ZHEAP] sudo sync
postgres@dbi-pg-tun:/home/postgres/ [ZHEAP] sudo echo 3 &gt; /proc/sys/vm/drop_caches

postgres@dbi-pg-tun:/home/postgres/zheap/ [ZHEAP] pgstart
waiting for server to start.... done
server started
</pre>
<p>Now we are ready for the last test </p>
<pre class="brush: bash; gutter: true; first-line: 1">
postgres@dbi-pg-tun:/home/postgres/zheap/ [ZHEAP] sqh
PSQL&gt; select count(*) from heap2;
  count  
---------
 5000000
Time: 3444.869 ms (00:03.445)

PSQL&gt; select count(*) from zheap2;
  count  
---------
 5000000
Time: 593.894 ms
</pre>
<p>As you can see the query performance are improved significantly for full table scan :-), because the table didn&#8217;t bloat as for the HEAP table. For you information I started additionally 2 times a full update before to restart the database and the HEAP table is now 3 times bigger.</p>
<pre class="brush: bash; gutter: true; first-line: 1">
PSQL&gt; select pg_size_pretty(pg_relation_size('heap2'));
 pg_size_pretty 
----------------
 1095 MB

Time: 0.508 ms
PSQL&gt; select pg_size_pretty(pg_relation_size('zheap2'));
 pg_size_pretty 
----------------
 289 MB
</pre>
<h3>Conclusion of these tests</h3>
<ul>
<li>Postgres allow the usage or not of UNDO&#8217;s at the table level</li>
<li>We are surprise how fast the ROLLBACK are, but this must be tested again, I don&#8217;t understand why</li>
<li>Select performance are improved significantly for full table scan <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>
<li>The storage will not bloat anymore with ZHEAP</li>
<li>Finally only the updates are a little bit slower</li>
</ul>
<p>It will be interesting to follow the discussions around this feature on the mailing list.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/deep-dive-postgres-at-the-pgconfeu-conference/">Deep dive Postgres at the #pgconfeu conference</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/deep-dive-postgres-at-the-pgconfeu-conference/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>#SwissPGDay is a place where you can meet developers of the PostgreSQL community</title>
		<link>https://www.dbi-services.com/blog/swisspgday-is-a-place-where-you-can-meet-developers-of-the-postgresql-community/</link>
					<comments>https://www.dbi-services.com/blog/swisspgday-is-a-place-where-you-can-meet-developers-of-the-postgresql-community/#respond</comments>
		
		<dc:creator><![CDATA[Hervé Schweitzer]]></dc:creator>
		<pubDate>Fri, 29 Jun 2018 15:10:49 +0000</pubDate>
				<category><![CDATA[Database Administration & Monitoring]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/swisspgday-is-a-place-where-you-can-meet-developers-of-the-postgresql-community/</guid>

					<description><![CDATA[<p>As the #SwissPGDay is located one hour south of  Zurich we traveled yesterday evening to Rapperswil, where is a nice little Swiss city. For the People coming one day before, Stephan Wagner organized a nice dinner in an excellent restaurant, before I forget the Red-wine was also excellent ! The #SwissPGday is located in Rapperswil [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/swisspgday-is-a-place-where-you-can-meet-developers-of-the-postgresql-community/">#SwissPGDay is a place where you can meet developers of the PostgreSQL community</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/swisspgday-scaled.jpg"><img loading="lazy" decoding="async" class="alignnone  wp-image-24855" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/swisspgday-scaled.jpg" alt="swisspgday" width="564" height="201" /></a><br />
As the #SwissPGDay is located one hour south of  Zurich we traveled yesterday evening to Rapperswil, where is a nice little Swiss city. For the People coming one day before, Stephan Wagner organized a nice dinner in an excellent restaurant, before I forget the Red-wine was also excellent !</p>
<p><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/preconf-diner-scaled.jpg"><img loading="lazy" decoding="async" class="alignnone  wp-image-24838" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/preconf-diner-scaled.jpg" alt="preconf-diner" width="449" height="337" /></a><br />
The #SwissPGday is located in Rapperswil at the HSR(Hochschule für Technik) near the Zürisee, it&#8217;s a nice location and everything was nicely organized. Also the look-out from the HSR is very beautiful.</p>
<p><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/lake.jpg"><img loading="lazy" decoding="async" class="alignnone  wp-image-24844" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/lake.jpg" alt="lake" width="452" height="338" /></a><br />
After a short introduction from Stephan Keller (HSR) where the room of the plenum session was completely full, the presentations was splitted in two streams. For your information last year they had around 60 participants this year we are around 100 participants, so I would say, that PostgreSQL it&#8217;s the trend.</p>
<p><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/Screen-Shot-2018-06-29-at-19.44.58.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-24869" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/Screen-Shot-2018-06-29-at-19.44.58.png" alt="Screen Shot 2018-06-29 at 19.44.58" width="700" height="414" /></a></p>
<p>Today what I especially appreciated, is that many teacher&#8217;s of the event are also developers of the PostgreSQL community, thus we get the latest information of some development and it was possible to discuss about new features directly with them.</p>
<p>I will also give you feedback of 2 sessions from other partner which I really appreciated. For sure the session from my colleague Daniel Westermann was the best one :-), who presented the new features of PostgreSQL 11 with many demos.</p>
<p><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/Screen-Shot-2018-06-29-at-22.20.47.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-24885" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/Screen-Shot-2018-06-29-at-22.20.47.png" alt="Screen Shot 2018-06-29 at 22.20.47" width="800" height="475" /></a>The first one was from Laurenz Albe(Cybertec), who presented a community Tool ORA_MIGRATOR and tips to migrate from Oracle to PostgreSQL.<br />
The second one was from  Harald Armin Massa(2ndQuadrant), who presented the new PostgreSQL logical replication, which was developed by his company and is now partially available for the community edition.</p>
<p>As usual to finish an Apero was organized to drink a beer together and exchange with the other participants.</p>
<p>See you next year at the #SwissPGDay 2019.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/swisspgday-is-a-place-where-you-can-meet-developers-of-the-postgresql-community/">#SwissPGDay is a place where you can meet developers of the PostgreSQL community</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/swisspgday-is-a-place-where-you-can-meet-developers-of-the-postgresql-community/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>With Oracle Goldengate take care of additional column creation on the replicated database</title>
		<link>https://www.dbi-services.com/blog/with-oracle-goldengate-take-care-of-additional-column-creation-on-the-replicated-database/</link>
					<comments>https://www.dbi-services.com/blog/with-oracle-goldengate-take-care-of-additional-column-creation-on-the-replicated-database/#respond</comments>
		
		<dc:creator><![CDATA[Hervé Schweitzer]]></dc:creator>
		<pubDate>Fri, 27 Nov 2015 14:52:34 +0000</pubDate>
				<category><![CDATA[Database Administration & Monitoring]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/with-oracle-goldengate-take-care-of-additional-column-creation-on-the-replicated-database/</guid>

					<description><![CDATA[<p>This week I worked on a GoldenGate 12.1.2.1.10 POC setup and was facing an issue which for me is a serious drawback of the Oracle GoldenGate product.If you want to create additional columns on the target database online in a GoldenGate configuration you have to be aware of the below situation which can happen in [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/with-oracle-goldengate-take-care-of-additional-column-creation-on-the-replicated-database/">With Oracle Goldengate take care of additional column creation on the replicated database</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div>
<p>This week I worked on a GoldenGate 12.1.2.1.10 POC setup and was facing an issue which for me is a serious drawback of the Oracle GoldenGate product.If you want to create additional columns on the target database online in a GoldenGate configuration you have to be aware of the below situation which can happen in your setup:The below demo was created on a Oracle GoldenGate Downstream server</p>
<p>For the test, I have created the schema scott/tiger on both the source and target databases, thus no initial load is needed</p>
</div>
<div>
<p>1.Create SCOTT on source database DB1 and target database DB2 using utlsampl.sql script.</p>
<pre class="brush: actionscript3; gutter: true; first-line: 1">Source&gt;@utlsampl.sql
Target&gt;@utlsampl.sql</pre>
<p>First we have to configure the replication for the SCOTT user</p>
</div>
<div>
<p>2.Configure SCOTT extract process on downstream server</p>
<pre class="brush: actionscript3; gutter: true; first-line: 1">GGSCI (srv01) 1&gt; dblogin useridalias ggsource
Successfully logged into database.

GGSCI (srv01 as goldengate@DB1) 2&gt; miningdblogin useridalias ggcap
Successfully logged into mining database.

GGSCI (srv01 as goldengate@DB1) 3&gt; register extract scott database
Extract SCOTT successfully registered with database at SCN 277324431694.

GGSCI (srv01 as goldengate@DB1) 5&gt; add extract scott integrated tranlog, begin now
EXTRACT added.

GGSCI (srv01 as goldengate@DB1) 6&gt; add trandata scott.emp

GGSCI (srv01 as goldengate@DB1) 6&gt; info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
EXTRACT     STOPPED     SCOTT       00:00:00      00:00:07

GGSCI (srv01 as goldengate@DB1) 7&gt; add exttrail /u01/directories/ggtrail/POCGGP15/es, extract SCOTT
EXTTRAIL added.

GGSCI (srv01 as goldengate@DB1) 12&gt; view params scott

EXTRACT SCOTT
USERIDALIAS ggsource
DBOPTIONS ALLOWUNUSEDCOLUMN
DDL INCLUDE ALL
TRANLOGOPTIONS MININGUSERALIAS ggcap
TRANLOGOPTIONS INTEGRATEDPARAMS (downstream_real_time_mine Y)
EXTTRAIL /u01/directories/ggtrail/POCGGP15/es
TABLE SCOTT.EMP;

GGSCI (srv01 as goldengate@DB1) 4&gt; start extract scott

Sending START request to MANAGER ...
EXTRACT SCOTT starting</pre>
<p>3.Configure the replicat process on downstream server</p>
<pre class="brush: actionscript3; gutter: true; first-line: 1">GGSCI (srv01) 1&gt; add replicat repscott, exttrail /u01/directories/ggtrail/POCGGP15/es
REPLICAT added.

GGSCI (srv01 as goldengate@DB2) 10&gt; view params repscott

REPLICAT REPSCOTT
useridalias ggtarget
DISCARDFILE /u01/app/goldengate/product/12.1.2.1/discard/REPSCOTT_DISCARD.txt,APPEND,megabytes 10
ASSUMETARGETDEFS
DBOPTIONS NOSUPPRESSTRIGGERS
MAP SCOTT.EMP,TARGET SCOTT.EMP;

GGSCI (srv01) 3&gt; dblogin useridalias ggtarget
Successfully logged into database.</pre>
<pre class="brush: actionscript3; gutter: true; first-line: 1">Extract current_scn on source database

sys@GMAS2&gt; select current_scn from v$database;

   CURRENT_SCN
--------------
  277324550446

GGSCI (srv01 as goldengate@DB2) 5&gt; start replicat repscott, afterscn 277324550446

Sending START request to MANAGER ...
REPLICAT REPSCOTT starting

GGSCI (srv01 as goldengate@DB2) 9&gt; info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
EXTRACT     RUNNING     SCOTT           00:00:03      00:00:05
REPLICAT    RUNNING     REPSCOTT        00:00:00      00:02:08</pre>
<p>Now we have a running GoldenGate replication for the table scott.emp including the DDL</p>
<p>======START DEMO =======</p>
<p><strong>On the target database DB2 </strong>we create an additional column</p>
</div>
<div>
<pre class="brush: actionscript3; gutter: true; first-line: 1">scott@DB2&gt; alter table emp add TARGET_COL varchar(10) default null;

Table altered.</pre>
</div>
<div><strong>On the source database DB1 </strong>after that, we create an additional column on the source database, which will be replicated to the target database.</div>
<div>
<pre class="brush: actionscript3; gutter: true; first-line: 1">scott@DB1&gt; alter table emp add SOURCE_COL varchar(10) default null;

Table altered.</pre>
</div>
<div>
<p><strong>Now on target database DB2 </strong>we have the 2 additional columns, as described below:</p>
<pre class="brush: actionscript3; gutter: true; first-line: 1">scott@DB2&gt; select ename,target_col,source_col from emp;

ENAME      TARGET_COL SOURCE_COL
---------- ---------- ----------
SMITH
ALLEN
WARD
...</pre>
<p><strong>And</strong> <strong>on the source database DB1 </strong> there is only one additional column</p>
</div>
<div>
<pre class="brush: actionscript3; gutter: true; first-line: 1">scott@DB1&gt; select ename, source_col from emp;

ENAME      SOURCE_COL
---------- ----------
SMITH
ALLEN
WARD
...</pre>
<p><strong>Now on the source database DB1</strong> its time to update the entry for the additional column</p>
</div>
<div>
<pre class="brush: actionscript3; gutter: true; first-line: 1">scott@DB1&gt; update emp set source_col='change';

14 rows updated.

scott@DB1&gt; commit;

Commit complete.

scott@DB1&gt; select ename, source_col from emp;

ENAME      SOURCE_COL
---------- ----------
SMITH      change
ALLEN      change
WARD       change</pre>
<p>Until now everything work as expected.</p>
<p><strong>But now on the target database DB2</strong> we will check the entry updated on table scott.emp</p>
<pre class="brush: actionscript3; gutter: true; first-line: 1">scott@DB2&gt; select ename,target_col,source_col from emp;

ENAME      TARGET_COL SOURCE_COL
---------- ---------- ----------
SMITH      change
ALLEN      change
WARD       change</pre>
<p>!!!!! TARGET_COL  is updated, and not the SOURCE_COL Column !!!!</p>
<p>GoldenGate works with the column order and not explicitly with the column names. Thus if you create additional columns on the target database and the column type is compatible with the value of the source database, GoldenGate will automatically put the insert/update in identical column number as on the source database :-(((. Without generating ANY warning or error.</p>
<p>With a sourcedef file you will have the same issue because the sourcedef file is not aware about the additional column created on the target database.</p>
</div>
<div><strong>Conclusion</strong>: A Solution exist: You&#8217;ll have to install Oracle GoldenGate release 12.2 which is available since this week, next blog with the solution will come soon <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></div>
<div></div>
<div></div>
<p>L’article <a href="https://www.dbi-services.com/blog/with-oracle-goldengate-take-care-of-additional-column-creation-on-the-replicated-database/">With Oracle Goldengate take care of additional column creation on the replicated database</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/with-oracle-goldengate-take-care-of-additional-column-creation-on-the-replicated-database/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Adding new tables to an existing Oracle GoldenGate replication</title>
		<link>https://www.dbi-services.com/blog/adding-new-tables-to-an-existing-oracle-goldengate-replication/</link>
					<comments>https://www.dbi-services.com/blog/adding-new-tables-to-an-existing-oracle-goldengate-replication/#respond</comments>
		
		<dc:creator><![CDATA[Hervé Schweitzer]]></dc:creator>
		<pubDate>Tue, 28 Aug 2012 22:50:00 +0000</pubDate>
				<category><![CDATA[Application integration & Middleware]]></category>
		<category><![CDATA[add tables]]></category>
		<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle 11g]]></category>
		<category><![CDATA[Replication]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/adding-new-tables-to-an-existing-oracle-goldengate-replication/</guid>

					<description><![CDATA[<p>Once a replication environment is set up, it&#8217;s rarely forever. Adding tables to an Oracle GoldenGate replication group with minimal impact to the current replication is quite a difficult operation. This posting should help you with this task. In the example below, tables from schema G001 will be added to an existing replication setup from the database [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/adding-new-tables-to-an-existing-oracle-goldengate-replication/">Adding new tables to an existing Oracle GoldenGate replication</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Once a replication environment is set up, it&#8217;s rarely forever. Adding tables to an Oracle GoldenGate replication group with minimal impact to the current replication is quite a difficult operation. This posting should help you with this task.</p>
<p>In the example below, tables from schema G001 will be added to an existing replication setup from the database PROD1 to REP1.</p>
<pre class="brush: actionscript3; gutter: true; first-line: 1">CFG_ADV_COND
CFG_NARRATIVE_TEMPLATE
CFG_REG_REPORT_RULES
CMN_LOOKUP
CMN_USER_LOGIN</pre>
<p>&nbsp;</p>
<h3>Stop the replication environment</h3>
<ul>
<li>Connect to the source database PROD1 and stop all extract groups for the replication to the database REP1</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">oracle@server1:~/ [PROD1] PROD1
oracle@server1:~/ [PROD1] cdgh
oracle@server1:/u99/app/goldengate/gss/11.1.1.1.0/ [PROD1] ggsci

GGSCI (server1) 1&gt; info all

Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING DPG001 00:00:00 00:00:06
EXTRACT RUNNING G001 00:00:00 00:00:05

GGSCI (server1) 2&gt; stop extract *
Program Status Group Lag Time Since Chkpt

MANAGER RUNNING
EXTRACT STOPPED DPG001 00:00:00 00:00:01
EXTRACT STOPPED G001 00:00:00 00:00:13</pre>
<ul>
<li>Connect to the target database REP1 and stop the replicat group coming from the database PROD1</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">GGSCI (server2) 1&gt; info all

Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING PROD1 00:00:00 00:00:04

GGSCI (server2) 2&gt; stop REPLICAT PROD1
GGSCI (server2) 3&gt; info all

Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
REPLICAT STOPPED PROD1 00:00:00 00:00:04</pre>
<p>&nbsp;</p>
<h3>Update the extract environment with the new tables</h3>
<ul>
<li>Now we can update the extract group G001 on the source database with the new tables to be replicated. Edit the G001 parameter file and add the new tables (vi editor)</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">GGSCI (server1) 30&gt; edit params G001
. . . 
table G001SCHEMA.CFG_ADV_COND;
table G001SCHEMA.CFG_NARRATIVE_TEMPLATE;
table G001SCHEMA.CFG_REG_REPORT_RULES;
table G001SCHEMA.CMN_LOOKUP;
table G001SCHEMA.CMN_USER_LOGIN;</pre>
<ul>
<li>Add supplemental login on source database PROD1 for the new added tables</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">GGSCI (server1) 7&gt; DBLOGIN userid goldengate, password ******
Successfully logged into database.

GGSCI (server1) 8&gt; add trandata G001SCHEMA.CFG_ADV_COND
GGSCI (server1) 9&gt; add trandata G001SCHEMA.CFG_NARRATIVE_TEMPLATE
GGSCI (server1) 10&gt; add trandata G001SCHEMA.CFG_REG_REPORT_RULES
GGSCI (server1) 11&gt; add trandata G001SCHEMA.CMN_LOOKUP
GGSCI (server1) 13&gt; add trandata G001SCHEMA.CMN_USER_LOGIN</pre>
<ul>
<li>Configure the source database to extract the additional five tables and we can restart the corresponding extract groups</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">GGSCI (server1) 30&gt; start extract *
GGSCI (server1) 31&gt; info all
Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING DPG001 00:23:02 00:00:03
EXTRACT RUNNING G001 00:00:00 00:00:06</pre>
<p>&nbsp;</p>
<h3>Initial Load from the new tables</h3>
<p>As the addtional tables from the source database PROD1 are extracted, the initial load (expdp/impdp) from the data can be started on the target database REP1.<br />
Attention, we have to start the export for a specific transaction point (SCN) , in order to begin the replication target database from the same SCN.</p>
<p>Thus we have to going to read the current_scn from the source database for the synchronization (explained later).</p>
<pre class="brush: sql; gutter: true; first-line: 1">SQL&gt; select current_scn from v$database;

CURRENT_SCN
-----------
 1657153626</pre>
<p>&nbsp;</p>
<ul>
<li>Create an expdp parfile with the above selected SCN and the additional tables to replicate</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">oracle@server1:~/app/oracle/admin/PROD1/create/goldengate/add_tables [PROD1] cat expdp_additional_tables.par

flashback_scn=1657153626
SCHEMAS=G001SCHEMA
DUMPFILE=export_tables_G001SCHEMA.dmp
LOGFILE=export_tables_G001SCHEMA.log
INCLUDE=TABLE:"IN('CFG_ADV_COND','CFG_NARRATIVE_TEMPLATE','CFG_REG_REPORT_RULES','CMN_LOOKUP','CMN_USER_LOGIN')"
DIRECTORY=DATAPUMPDIR</pre>
<p>&nbsp;</p>
<ul>
<li>Start the export from the above tables as user system</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">oracle@server1:~/app/oracle/admin/PROD1/create/goldengate/ [PROD1] expdp parfile=expdp_additional_tables.par

Username: system
Password:

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
FLASHBACK automatically enabled to preserve database integrity.
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/******** parfile=expdp_additional_tables.par
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 21.25 MB
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "G001SCHEMA"."CMN_USER_LOGIN" 8.735 MB 286163 rows
. . exported "G001SCHEMA"."CFG_ADV_COND" 1.523 MB 1617 rows
. . exported "G001SCHEMA"."CFG_REG_REPORT_RULES" 100.5 KB 714 rows
. . exported "G001SCHEMA"."CFG_NARRATIVE_TEMPLATE" 9.789 KB 85 rows
. . exported "G001SCHEMA"."CMN_LOOKUP" 6.585 KB 4 rows
Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
 /u00/app/oracle/admin/PROD1/dmp/export_ARGUS_tables_G001SCHEMA.dmp
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at 11:01:22</pre>
<ul>
<li>Copy the dumpfile from server1 to server2</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">oracle@server1:~/app/oracle/admin/PROD1/create/goldengate/ [PROD1] 
scp /u00/app/oracle/admin/PROD1/dmp/export_tables_G001SCHEMA.dmp oracle@server2:~/app/oracle/admin/REP1/dmp/
export_tables_G001SCHEMA.dmp 100% 11MB 10.7MB/s 00:00</pre>
<ul>
<li>Create an impdp parfile in order to load the tables from the above created dumpfile</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">Take care: the correct REMAP and EXCLUDE parameter must be configured based on your environment requirement

oracle@server2:~/app/oracle/admin/REP1/create/goldengate/add_tables/ [REP1] cat impdp_PROD1_tables.par

DUMPFILE=export_tables_G001SCHEMA.dmp
LOGFILE=import_tables_G001SCHEMA.log
REMAP_SCHEMA=G001SCHEMA:G001_PROD1
REMAP_TABLESPACE=DATA_01:PROD1_DATA
REMAP_TABLESPACE=DATA_02:PROD1_DATA
REMAP_TABLESPACE=INDEX_01:PROD1_DATA
REMAP_TABLESPACE=INDEX_02:PROD1_DATA
DIRECTORY=DATAPUMPDIR
EXCLUDE=GRANT
EXCLUDE=CONSTRAINT
EXCLUDE=REF_CONSTRAINT</pre>
<ul>
<li>Start the import with impdp as user system using the above parameter file</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">oracle@server2:~/app/oracle/admin/REP1/create/goldengate/add_tables/ [REP1] impdp parfile=impdp_PROD1_tables.par

Username: system
Password:

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_FULL_01": system/******** parfile=impdp_PROD1_tables.par
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "G001_PROD1"."CMN_USER_LOGIN" 8.735 MB 286163 rows
. . imported "G001_PROD1"."CFG_ADV_COND" 1.523 MB 1617 rows
. . imported "G001_PROD1"."CFG_REG_REPORT_RULES" 100.5 KB 714 rows
. . imported "G001_PROD1"."CFG_NARRATIVE_TEMPLATE" 9.789 KB 85 rows
. . imported "G001_PROD1"."CMN_LOOKUP" 6.585 KB 4 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_FULL_01" successfully completed at 11:49:06</pre>
<p>&nbsp;</p>
<h3>Add temporary the new tables to replication group</h3>
<p>Now the new tables to replicate can be temporary add to the replication group PROD1 with the above selected SCN number, as starting point for the replication.</p>
<p>Attention: Within the GoldenGate configuration file we speak about CSN and not SCN, but both contains the same information (System Change Number).</p>
<pre class="brush: actionscript3; gutter: true; first-line: 1">oracle@server2:~/app/goldengate/ggs/11.1.1.1.0/[REP1] ggsci

GGSCI (server2)&gt; edit params PROD1

REPLICAT PROD1
ASSUMETARGETDEFS
USERID goldengate, PASSWORD *****
DISCARDFILE /u00/app/goldengate/ggs/11.1.1.1.0/discard/PROD1_discard.txt, append, megabytes 10
MAP G001schema.CFG_ADV_COND ,TARGET G001_PROD1.CFG_ADV_COND ,FILTER ( @GETENV ("TRANSACTION", "CSN") &gt; 1657153626);
MAP G001schema.CFG_NARRATIVE_TEMPLATE ,TARGET G001_PROD1.CFG_NARRATIVE_TEMPLATE ,FILTER ( @GETENV ("TRANSACTION", "CSN") &gt; 1657153626);
MAP G001schema.CFG_REG_REPORT_RULES ,TARGET G001_PROD1.CFG_REG_REPORT_RULES ,FILTER ( @GETENV ("TRANSACTION", "CSN") &gt; 1657153626);
MAP G001schema.CMN_LOOKUP ,TARGET G001_PROD1.CMN_LOOKUP ,FILTER ( @GETENV ("TRANSACTION", "CSN") &gt; 1657153626);
MAP G001schema.CMN_USER_LOGIN ,TARGET G001_PROD1.CMN_USER_LOGIN ,FILTER ( @GETENV ("TRANSACTION", "CSN") &gt; 1657153626);
MAP G001schema.*, TARGET G001_PROD1.*</pre>
<ul>
<li>Start the replication group PROD1 with the new added tables</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">GGSCI (server2) 2&gt; start replicat PROD1

Sending START request to MANAGER ...
REPLICAT PROD1 starting<samp><code></code></samp></pre>
<ul>
<li>Check the configuration until the both databases are synchronised</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">GGSCI (server2) 1&gt; info all
Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING PROD1 00:00:00 00:00:00</pre>
<p>&nbsp;</p>
<h3>Remove the temporary added new tables from the replication group file</h3>
<p>As both databases are again synchronized including the new tables, the temporary added filter can be removed from the replication group file.</p>
<ul>
<li>Stop the replication group PROD1</li>
</ul>
<p><samp><code>GGSCI (server2) 4&gt; stop replicat PROD1</code></samp></p>
<ul>
<li>Set back the original extraction configuration file for the froup PROD, without the filters for the new files</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">oracle@server2:~/app/goldengate/ggs/11.1.1.1.0/[REP1] ggsci

GGSCI (server2) 2&gt; edit params PROD1

REPLICAT PROD1
ASSUMETARGETDEFS
USERID goldengate, PASSWORD *****
DISCARDFILE /u00/app/goldengate/ggs/11.1.1.1.0/discard/PROD1_discard.txt, append, megabytes 10
MAP G001schema.*, TARGET G001_PROD1.*</pre>
<ul>
<li>Restart the replication</li>
</ul>
<pre class="brush: actionscript3; gutter: true; first-line: 1">GGSCI (server2) 3&gt; start REPLICAT PROD1
GGSCI (server2) 4&gt; info all

Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING PROD1 00:00:00 00:00:00</pre>
<p>&nbsp;</p>
<h3>Conclusion</h3>
<p>The integration of additional tables into a existing GoldenGate replication environment is not very complex, but the steps order must be exactly and carefully followed. Have fun with Oracle Goldengate!</p>
<p>L’article <a href="https://www.dbi-services.com/blog/adding-new-tables-to-an-existing-oracle-goldengate-replication/">Adding new tables to an existing Oracle GoldenGate replication</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/adding-new-tables-to-an-existing-oracle-goldengate-replication/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Jonathan Lewis @ dbi services: Oracle Optimizer workshop</title>
		<link>https://www.dbi-services.com/blog/jonathan-lewis-dbi-services-oracle-optimizer-workshop/</link>
					<comments>https://www.dbi-services.com/blog/jonathan-lewis-dbi-services-oracle-optimizer-workshop/#respond</comments>
		
		<dc:creator><![CDATA[Hervé Schweitzer]]></dc:creator>
		<pubDate>Thu, 01 Mar 2012 06:19:27 +0000</pubDate>
				<category><![CDATA[Application integration & Middleware]]></category>
		<category><![CDATA[Oracle optimizer]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Workshop]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/jonathan-lewis-dbi-services-oracle-optimizer-workshop/</guid>

					<description><![CDATA[<p>Last week, Oracle Ace Director Jonathan Lewis held an Oracle Optimizer Workshop at dbi services BaselArea. I would like to share some of the key learnings of this really interesting exchange I experienced together with my colleagues.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/jonathan-lewis-dbi-services-oracle-optimizer-workshop/">Jonathan Lewis @ dbi services: Oracle Optimizer workshop</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Last week, Oracle Ace Director Jonathan Lewis held an Oracle Optimizer Workshop at dbi services Basel Area. I would like to share some of the key learnings of this really interesting exchange I experienced together with my colleagues.</p>
<p>In his workshop, Jonathan Lewis covered an impressive amount of Oracle optimizer know how: from the fundamentals of the Cost Based Optimizer (CBO) to the latest 11.2 Oracle Optimizer features. Useless to say that we were all amazed from Jonathan&#8217;s expertise.</p>
<p><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/IMGP1834_w.jpg" alt="Jonathan Lewis workshop dbi services Basel Area" width="500" height="335" /></p>
<p>Jonathan provided an impressive insight into the Oracle Optimizer which really helped me to better grasp the decisions of the Cost Based Optimizer (CBO). Understanding how and why nested loops or hash joins are used is a black box if you are not aware of the underlying &#8220;maths&#8221;. This kind of information cleary was a big added value of Jonathan&#8217;s workshop. He also gave us lots of practical and very funny examples of his experience at customer sites.</p>
<p><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/IMGP1826_w.jpg" alt="Jonathan Lewis workshop dbi services Basel Area" width="500" height="335" /></p>
<p>As most of you know, Jonathan Lewis is a well known figure in the Oracle community and has also published several books (last publication in November 2011: <a href="http://www.apress.com/9781430239543" target="_blank">Oracle Core: Apress, ISBN 978-1430239543</a>). His blog really is a key Oracle resource (<a href="http://jonathanlewis.wordpress.com/" target="_blank">http://jonathanlewis.wordpress.com/</a>) and he also contributes to several other blogs, newsgroups, forums, and Oracle User Group magazines.</p>
<p><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/IMGP1875_w.jpg" alt="Jonathan Lewis workshop dbi services Basel Area" width="500" height="335" /><br />
Again, Jonathan, thanks a lot for your great workshop!</p>
<p>L’article <a href="https://www.dbi-services.com/blog/jonathan-lewis-dbi-services-oracle-optimizer-workshop/">Jonathan Lewis @ dbi services: Oracle Optimizer workshop</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/jonathan-lewis-dbi-services-oracle-optimizer-workshop/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Take care while upgrading your Oracle DB with &#8220;DBUA&#8221;</title>
		<link>https://www.dbi-services.com/blog/take-care-while-upgrading-your-oracle-db-with-qdbuaq/</link>
					<comments>https://www.dbi-services.com/blog/take-care-while-upgrading-your-oracle-db-with-qdbuaq/#respond</comments>
		
		<dc:creator><![CDATA[Hervé Schweitzer]]></dc:creator>
		<pubDate>Thu, 11 Aug 2011 10:36:00 +0000</pubDate>
				<category><![CDATA[Database management]]></category>
		<category><![CDATA[DBA]]></category>
		<category><![CDATA[dbua]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[Oracle 10g to 8i]]></category>
		<category><![CDATA[Oracle 11g]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/take-care-while-upgrading-your-oracle-db-with-qdbuaq/</guid>

					<description><![CDATA[<p>Last Week at my Customer, I used dbua to upgrade an oracle database 10h to 11g, the migration run successfully. But next day I had a monitoring message that the diag directory is groing very fast.</p>
<p><img src="http://blog.dbi-services.com/wp-insides/uploads/images/stories/blog/Herve/tmp.gif" /></p>
<p>L’article <a href="https://www.dbi-services.com/blog/take-care-while-upgrading-your-oracle-db-with-qdbuaq/">Take care while upgrading your Oracle DB with &#8220;DBUA&#8221;</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Last week at a customer, I used DBUA to upgrade an Oracle database from 10g to 11g and the migration ran successfully. However, the day after I got a monitoring message that the diag directory is growing very rapidly.</p>
<p><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2022/04/tmp.gif" alt="tmp" width="550" height="389" /></p>
<h3>Analysis</h3>
<p>I began checking why the diagnostic directory was growing so fast. And I found out that all 11g databases &#8211; the new one and all the other ones &#8211; reported the message below each second in the database alert.log file.</p>
<p><code>WARNING: Oracle executable binary mismatch detected.<br />
Binary of new process does not match binary which started instance<br />
issue alter system set "_disable_image_check" = true to disable these messages</code></p>
<p>This problem occured because during the database upgrade procedure, DBUA recompiles the Oracle binary executable. Thus all databases using this Oracle executable file send WARNINGS that the executable was recompiled.</p>
<pre class="brush: actionscript3; gutter: true; first-line: 1">oracle@chbsslcmdbdb1:~/app/oracle/product/11.2.0.2/bin/ [DBACT411] ls -lrt
 ....
 -rwxr-xr-x 1 oracle dba      3771 Oct 28  2010 emagentdeploy.pl
 -rwxr-xr-x 1 oracle dba      6299 Oct 28  2010 dbca
 -rwxr-xr-x 1 oracle dba      3552 Oct 28  2010 db2gc
 -rwsr-s--x 1 oracle dba 228886356 Jun  9 09:59 oracle</pre>
<h3>How to fix this problem</h3>
<p>A restart from all affected database must be done.</p>
<h3>My recommendation</h3>
<p>When you upgrade an 11g database on a server where you still have a 11g database running that you can not restart: Install a new ORACLE_HOME and this problem will only affect your new database which can be fixed with a simple restart of the database.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/take-care-while-upgrading-your-oracle-db-with-qdbuaq/">Take care while upgrading your Oracle DB with &#8220;DBUA&#8221;</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/take-care-while-upgrading-your-oracle-db-with-qdbuaq/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 
Lazy Loading (feed)

Served from: www.dbi-services.com @ 2026-06-04 06:31:48 by W3 Total Cache
-->