<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tim</title>
    <description>The latest articles on DEV Community by Tim (@sqlinsix).</description>
    <link>https://dev.to/sqlinsix</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F617142%2F549b6543-b329-4ed5-9fd1-c7a809a7919f.jpg</url>
      <title>DEV Community: Tim</title>
      <link>https://dev.to/sqlinsix</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sqlinsix"/>
    <language>en</language>
    <item>
      <title>Quick Tip: Secret Scopes For Azure Key Vaults</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Mon, 09 Sep 2024 10:14:28 +0000</pubDate>
      <link>https://dev.to/sqlinsix/quick-tip-secret-scopes-for-azure-key-vaults-4igh</link>
      <guid>https://dev.to/sqlinsix/quick-tip-secret-scopes-for-azure-key-vaults-4igh</guid>
      <description>&lt;p&gt;How do you create a secret scope for an Azure Key Vault in Databricks?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to your Databricks instance URL and adding [#]secrets/createScope (note: no brackets around #)&lt;/li&gt;
&lt;li&gt;Add the Scope Name&lt;/li&gt;
&lt;li&gt;Enter the Key Vault's DNS Name. You can get this in the overview of the KeyVault.&lt;/li&gt;
&lt;li&gt;Add the Key Vault's Resource ID. You can get this in the properties of the KeyVault.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pick a name that's intuitive for development and makes automation easier for DevOps (avoid arbitrary naming).&lt;/p&gt;

</description>
      <category>data</category>
      <category>azure</category>
    </item>
    <item>
      <title>Building A Data Warehouse Library</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Mon, 05 Aug 2024 11:03:09 +0000</pubDate>
      <link>https://dev.to/sqlinsix/building-a-data-warehouse-library-1e9b</link>
      <guid>https://dev.to/sqlinsix/building-a-data-warehouse-library-1e9b</guid>
      <description>&lt;p&gt;How do you build a data warehouse with OOP? I suggest designing by delineating the classes that you'll need to both create and maintain the data warehouse. The first time that you build these classes, you will probably build them wrong. This is expected as testing helps improve the design over time. A general overview of the classes that you'll create:&lt;/p&gt;

&lt;p&gt;Your configuration or connection classes should be able to access the appropriate properties to the source, staging and final destinations. Related libraries should be imported at the highest scope here, if these libraries cannot be accessed or referenced at more detailed levels of your library. For example, you can import pandas wherever you need (generally transformations), so you wouldn't need to import it here at this step unless you'll use it.&lt;/p&gt;

&lt;p&gt;Consider how you separate the dimension and fact classes. One technique that I tend to use involves fact and dimension classes inheriting from a base object. This base object has the standard columns that we tend to use frequently in ETL, such as timestamps of when records were added, updated and whether they're active. Because dimensions can be different types whereas facts cannot, facts and dimensions have different properties and methods. For instance, a fact class will have a foreign key reference method that ensures that a key column ties out with a dimension. A dimension doesn't need this because a dimension can have a key that isn't found in a fact, but the inverse cannot be true.&lt;/p&gt;

&lt;p&gt;Build a transformation class for repeatable functionality. Generally, transformations occur on a single column level, though there are some cases in which they occur on multiple columns or even the entire table (much rarer). One of the most expensive steps in building and maintaining a data warehouse (and ETL in general) is the transformation step. Over time, you may find it convenient to further break this tranformation class into smaller classes, such as transformation classes for machine learning, analysis, etc. For instance, one of my repetitive methods involves pivot tables. Over time, I've added this functionality into a one hot encoding method. Keep in mind that you can spend decades never doing certain transformations and you will generally find 20-30% of your transformations are the most repeated in use.&lt;/p&gt;

&lt;p&gt;Finally, consider scale. Scale can impact all the other steps, but it can also cause people to never finish the other steps. I've seen more waste in planning for scale than actually solving it. When you know the data volume will grow, you want to consider it. Make sure that this doesn't become the procrastination point that results in unnecessary planning meetings where nothing gets done. Horizontally scaling your data may require change to your other code. Accept that so that you can still create repetitive functionality. In general, scale is not always an issue that people in data face and this is why I've seen worries about scale cost companies more in planning than if they approached the problem without the concern.&lt;/p&gt;

&lt;p&gt;This provides an overall picture of how you'd approach a data warehouse with OOP. This is not the actual solution that you'd use as details matter.&lt;/p&gt;

</description>
      <category>data</category>
      <category>oop</category>
    </item>
    <item>
      <title>Quick Facts On the AT&amp;T Breach</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Mon, 15 Jul 2024 11:03:14 +0000</pubDate>
      <link>https://dev.to/sqlinsix/quick-facts-on-the-att-breach-5fob</link>
      <guid>https://dev.to/sqlinsix/quick-facts-on-the-att-breach-5fob</guid>
      <description>&lt;p&gt;For those of you who haven't seen yet, AT&amp;amp;T recently informed customers of a breach. &lt;/p&gt;

&lt;p&gt;Some quick facts about the AT&amp;amp;T breach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Impacted over 70 million customers.&lt;/li&gt;
&lt;li&gt;Revealed the call and text meta information. I'll add to this point because I've seen some misinformation showing that content (ie: messages) were compromised. This is not correct.&lt;/li&gt;
&lt;li&gt;The meta information involved not just AT&amp;amp;T numbers, but also numbers associated with those AT&amp;amp;T numbers (ie: contacts who conversed through phone calls/texts).&lt;/li&gt;
&lt;li&gt;The compromise period was during a few months in 2022.&lt;/li&gt;
&lt;li&gt;Unfortunately, there was a delay in releasing that there was a breach. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unfortunately, there's quite a few ways that hackers can use this information. One big cost to this is that it expands hacker's linkability with your information. If you're wondering how hackers can use linkability, I wrote a post for OSINT called &lt;a href="https://osintteam.blog/what-is-linkability-bd3f0587e4ba" rel="noopener noreferrer"&gt;Why everyone is panicking over linkability&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>data</category>
      <category>security</category>
    </item>
    <item>
      <title>Importance of Data Discovery Spikes</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Mon, 10 Jun 2024 10:53:23 +0000</pubDate>
      <link>https://dev.to/sqlinsix/importance-of-data-discovery-spikes-53do</link>
      <guid>https://dev.to/sqlinsix/importance-of-data-discovery-spikes-53do</guid>
      <description>&lt;p&gt;A meeting prior to a data discovery spike tends to use time poorly for everyone involved. In corporate situations (ie: not contract/client based) where you can spike on a data set prior to meeting about the needs, this will save everyone time.&lt;/p&gt;

&lt;p&gt;As you first review the data (spike), you can catalog as needed, provided that this isn't already available. If it's available, compare how it's cataloged versus what's actually there (in some cases, data is labeled incorrectly). With this technique, you'll have an understanding of what you're looking at and where the data live. When you meet about the data needs, you'll already have mental links to the data.&lt;/p&gt;

&lt;p&gt;This is the point where I'll use pre-built queries/analysis to review the data set.&lt;/p&gt;

&lt;p&gt;The result of this is that you'll take much better notes due to the mental links plus you'll ask better questions if you have them. The best part is that you'll save everyone time - there is no shortage of people in the corporate world complaining about the number of meetings they attend!&lt;/p&gt;

</description>
      <category>data</category>
      <category>database</category>
    </item>
    <item>
      <title>Row Level Security In SQL Server</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Fri, 31 May 2024 11:21:46 +0000</pubDate>
      <link>https://dev.to/sqlinsix/row-level-security-in-sql-server-4hi6</link>
      <guid>https://dev.to/sqlinsix/row-level-security-in-sql-server-4hi6</guid>
      <description>&lt;p&gt;Row level security (RLS) provides us with a security tool that can limit data access on the row level of data. This security technique serves value in situations where we may require delineating access to data where a “whole” is stored, but only a “part” needs to be accessed by users — such as a product list from all companies where a company can only see their products.&lt;/p&gt;

&lt;p&gt;While this post will do an example in SQL Server, row level security can be used in SQL Server 2016 and above, Azure SQL, Azure SQL Managed Instances, Azure Synapse and Warehouse in Fabric.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Would We Use Row Level Security?
&lt;/h2&gt;

&lt;p&gt;While RLS isn’t the only tool that will help us in these situations, it may be a tool that we find useful in the below situations that we could use it. We might consider RLS in the following circumstances:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complying with strict security requirements from our company or legal requirements where access to sensitive data must be filtered by user or role within the company.&lt;/li&gt;
&lt;li&gt;When the data we store on the row level relate directly to the responsibilities of the user or role who views the data. If the data relate to the user or role on a column level, we would consider dynamic data masking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A visual way to think about RLS is a pie chart where each piece of the pie represents a user and each user should only be able to view their piece of the entire pie. Like with dynamic data masking as we’ll see, there are some security concerns with RLS, which is one reason why it’s not high on my recommendation list of security tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Row Level Security Considerations
&lt;/h2&gt;

&lt;p&gt;Like with dynamic data masking, row level security (RLS) invites attacks because the data are present in the database. A hacker knows that if he compromises your database, he can get access to your data. In the case of RLS, the hacker knows that it’s only a matter of permissions. Hackers can use social engineering to determine if a company is using row level security and if this is the case, they know they only have to compromise the database. A more specific example of this (and a form of social engineering) would be to use social media to identify who works at a target company, whether they use RLS, and compromise the person’s access (spearphishing from social media analysis would be another route). Even if we assume the hacker only compromises one employee (one makes it easier to compromise a second and third), that is enough to get the data.&lt;/p&gt;

&lt;p&gt;By contrast, in the case of a security approach like always encrypted where a different layer has the key to unencrypt the data, the hacker must compromise two layers — simply getting the data won’t be enough. In both the case of dynamic data masking and row level security, this is not the case.&lt;/p&gt;

&lt;p&gt;If we plan to use RLS, we need to ensure that it functions through sufficient testing. As we’ve seen above this, AFTER and BEFORE UPDATE differ in what could happen with users. We would want to have detailed testing scenarios that ensure that row level security will function as intended. We should always remember that we’re designing for failure (or in the case of security, compromise). This means that we test with our architecture as if we’re trying to compromise the security. I highly recommend researching people who’ve used this feature with their architecture, as they will make note of some of the issues they’ve seen in their environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sqlinsix.medium.com/row-level-security-deep-dive-in-sql-server-20f62827708c"&gt;Continue reading the entire post with T-SQL examples&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sqlserver</category>
      <category>sql</category>
      <category>data</category>
      <category>security</category>
    </item>
    <item>
      <title>Quick Databricks' Cloning Tip</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Thu, 18 Apr 2024 10:31:44 +0000</pubDate>
      <link>https://dev.to/sqlinsix/quick-databricks-cloning-tip-1bj9</link>
      <guid>https://dev.to/sqlinsix/quick-databricks-cloning-tip-1bj9</guid>
      <description>&lt;p&gt;Quick Databricks tip:&lt;/p&gt;

&lt;p&gt;Two types of cloning you can use with objects in Databricks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;DEEP CLONE&lt;/li&gt;
&lt;li&gt;SHALLOW CLONE&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Deep clone copies the data while shallow clone only copies the meta-structure.&lt;/p&gt;

&lt;p&gt;Both are extremely useful in different types of testing.&lt;/p&gt;

</description>
      <category>data</category>
      <category>databricks</category>
    </item>
    <item>
      <title>Quick Databricks Meta-Information Tip</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Mon, 01 Apr 2024 11:14:26 +0000</pubDate>
      <link>https://dev.to/sqlinsix/quick-databricks-meta-information-tip-19db</link>
      <guid>https://dev.to/sqlinsix/quick-databricks-meta-information-tip-19db</guid>
      <description>&lt;p&gt;To get meta information on a table, you can use DESCRIBE EXTENDED or DESCRIBE DETAIL.&lt;/p&gt;

&lt;p&gt;Quick examples:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;DESCRIBE EXTENDED MyTable&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Or...&lt;/p&gt;

&lt;p&gt;&lt;code&gt;DESCRIBE DETAIL MyTable&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Each have their own set of details and overlap with meta like create time, type, etc.&lt;/p&gt;

</description>
      <category>data</category>
      <category>databricks</category>
    </item>
    <item>
      <title>Will AI End All of Us?</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Sun, 24 Mar 2024 12:56:52 +0000</pubDate>
      <link>https://dev.to/sqlinsix/will-ai-end-all-of-us-2m35</link>
      <guid>https://dev.to/sqlinsix/will-ai-end-all-of-us-2m35</guid>
      <description>&lt;p&gt;Everyone is talking about it.&lt;/p&gt;

&lt;p&gt;It's hyped everywhere now.&lt;/p&gt;

&lt;p&gt;This site is by devs for devs. Is AI the end for all of us?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>development</category>
    </item>
    <item>
      <title>Connecting A Data Factory To An Existing Runtime In Azure</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Thu, 28 Oct 2021 15:47:37 +0000</pubDate>
      <link>https://dev.to/sqlinsix/connecting-a-data-factory-to-an-existing-runtime-in-azure-1phg</link>
      <guid>https://dev.to/sqlinsix/connecting-a-data-factory-to-an-existing-runtime-in-azure-1phg</guid>
      <description>&lt;p&gt;With Azure Data Factory, we can connect on premise assets to Azure resources, such as an on premise database to an Azure database. At this time, this will require an on premise runtime that communicates with both the on premise resource and the Azure resource. In the video &lt;a href="https://www.youtube.com/watch?v=IpvmNyTLDxE"&gt;Connect Azure Data Factory To Existing Runtime&lt;/a&gt;, we see how to connect an Azure Data Factory to an existing run time (to set up a runtime on premise, review the video &lt;a href="https://www.youtube.com/watch?v=CA7ML8NRM4U"&gt;How To Setup A Runtime for Azure Data Factory&lt;/a&gt;, as this video assumes that we have a runtime setup on one of our servers that has been linked to a data factory). While not discussed in the video, we should review the security of our design - we want to be extremely careful connection on premise assets to the cloud. If we will be sending data from an on premise asset, make sure that both the server with the data and the server running the runtime (if different) are isolated.&lt;/p&gt;

&lt;p&gt;Before connecting an Azure Data Factory to an existing runtime, we should make sure that the following our true for our environment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We've considered all security angles for running a runtime that connects an on premise asset to Azure's cloud.&lt;/li&gt;
&lt;li&gt;We've looked at the scale ahead of time - being aware of the data load that we expect and how we'll parallelize this across assets, environments, etc.  Keep in mind that the runtime may become the bottleneck, if we're using it for multiple assets/environments/etc.  Part of this analysis is ensuring that we're transferring the least amount of data required to meet our objective.&lt;/li&gt;
&lt;li&gt;We have monitoring in place to discover issues as quickly as possible, as if we have any production dependency on this, an outage could be costly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These pre-requisites are a must, as without this analysis ahead of time, we may face costly issues later.&lt;/p&gt;

&lt;p&gt;Once we have our runtime setup, we can grant permissions from this runtime to Azure Data Factories. We will want to consider how many data factories we want to share this with, as well as whether sharing this will comply with some of our other standards. For an example, we should not connect one runtime to our Sandbox-QA-Preproduction-Production environments for multiple reasons - scaling, testing and security, to name a few reasons. The only exception to this would be if we were demonstrating what NOT to do. The same logic applies if we're connecting a runtime to multiple assets within an environment: we want to consider scale early, as it will be more costly if we make adjustments later.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>database</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>T-SQL: How To UNION ALL Tables and Why</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Thu, 07 Oct 2021 08:39:04 +0000</pubDate>
      <link>https://dev.to/sqlinsix/t-sql-how-to-union-all-tables-and-why-996</link>
      <guid>https://dev.to/sqlinsix/t-sql-how-to-union-all-tables-and-why-996</guid>
      <description>&lt;p&gt;In some cases, we need to combine the result of two tables where data types may be similar or identical. We could combine the data in one table using INSERT syntaxes, but with UNION ALL or UNION, we can achieve the same result instead of creating a new table. In the video, &lt;a href="https://www.youtube.com/watch?v=c9kz_DhyWT8&amp;amp;list=PLHHm85xMQAYNScEs-nu9gzi2uoQ9JCCYA&amp;amp;index=12"&gt;SQL Basics: How To Use UNION ALL and Why&lt;/a&gt; we see several examples of this in action. One example we union tables with the same data type and in another example, we union two columns that have different data types.&lt;/p&gt;

&lt;p&gt;Some questions that are answered in the video:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Note the tables that we're using and what values are identical based on the column names and what values differ based on the column names. We'll be using these tables throughout these videos.
What is a like data type? Why does it matter in a union? What's the outcome when we union two like data types that slightly differ?&lt;/li&gt;
&lt;li&gt;Compare the results of the queries when we union identical data types versus when we combine two different data types.&lt;/li&gt;
&lt;li&gt;If we have a type of varchar and a type of integer, what tool could we use to combine the columns in a union?&lt;/li&gt;
&lt;li&gt;What should we know about union and security?&lt;/li&gt;
&lt;li&gt;While there are object oriented tools that may automatically convert data types, if we have mismatches, we should be aware of the underlying data if we use a union.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One applied example of using unions is error logs. Often we have error logs for the database, application and other possible layers. It's useful to identify when an error happened and how that error translated across layers. Unioning tables with the errors by combining the error and date can be useful when we order by the time of the error. We can often find out where the error originated and how it impacted all the layers of our application or service.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Solving Data Differentials With LEFT JOINs</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Fri, 01 Oct 2021 11:44:21 +0000</pubDate>
      <link>https://dev.to/sqlinsix/solving-data-differentials-with-left-joins-58i3</link>
      <guid>https://dev.to/sqlinsix/solving-data-differentials-with-left-joins-58i3</guid>
      <description>&lt;p&gt;One challenge we face with data involves new and existing data from a source data set to a destination data set. The source and destination may be managed by us or one of them could be managed by us. When we have these data sets, we will often get "updates" to these data - in some cases, these updates will involve new data that don't already exist or may involve existing data that need to be updated. In rarer cases (but still frequent), we may need to remove data that no longer exist in an update. This latter case is rarer because most "differentials" will involve adding new data and updating existing data. For the benefit of these "delete" scenario, I also cover it in the video, &lt;a href="https://www.youtube.com/watch?v=L0B_4hULlso&amp;amp;list=PLHHm85xMQAYNScEs-nu9gzi2uoQ9JCCYA&amp;amp;index=16"&gt;Using LEFT JOINs To Solve New and Existing Data Differentials&lt;/a&gt;, along with updating and adding new data. This means that this video shows how we can use LEFT JOINs to solve all three of these scenarios. These scenarios come up frequently in business so it's useful to know how we can use a join type to solve them. Keep in mind, this is a tutorial video to show you how this can be done, not a recommendation of whether you should use this or not.&lt;/p&gt;

&lt;p&gt;Some discussion points mentioned in the video:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relative to what's required for our differentials, why does the order matter? I show this in the demo and mention this warning early, as something you want to consider. Using the demo, imagine if I re-ordered what operation happened first. What would happen to our data?&lt;/li&gt;
&lt;li&gt;Assume we need to delete, update and insert. What should happen first? Why?&lt;/li&gt;
&lt;li&gt;When it comes to data differentials, which of the 3 operations occurs less frequently? What is an example I use of this type of data differential?&lt;/li&gt;
&lt;li&gt;Based on the sample data set, what should occur with the final outcome of our data? Why should we run a test first?&lt;/li&gt;
&lt;li&gt;Why do I update before I insert?&lt;/li&gt;
&lt;li&gt;T-SQL is a set-based language. When it comes to performance and adding new data or updating existing data, how should we consider the fact that it's a set-based language in our operations?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When we look at solving data differential with LEFT JOINs, those above points and discussions are worth considering. If we don't order the operations correctly, as an example, we may end up with incorrect data or updating records that were just inserted, poorly affecting our performance.&lt;/p&gt;

&lt;p&gt;Can we only solve data differentials with LEFT JOINs? No. We can use merge operations, match data on the application layer, use except functionality supported in some SQL languages, etc. In this tutorial, we see the capability of LEFT JOINs, but they are not the only tool we can use to solve this problem. When we consider solving this problem, we want to consider two key points in development: performance and maintainability. Not every developer may be familiar with the tools we use to solve this problem - we'll want to consider how our solution is maintained. Likewise, we want to consider performance. Relative to our architecture, using LEFT JOINs may not be the most optimal solution. Unfortunately, there is no hard rule about how to solve this problem. But since we see how we can use LEFT JOINs to solve this problem, we have another application of using LEFT JOINs and where they may be appropriate.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Transaction Log Becoming Full Due To Replication</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Sun, 26 Sep 2021 10:45:27 +0000</pubDate>
      <link>https://dev.to/sqlinsix/transaction-log-becoming-full-due-to-replication-1l7o</link>
      <guid>https://dev.to/sqlinsix/transaction-log-becoming-full-due-to-replication-1l7o</guid>
      <description>&lt;p&gt;In the video, &lt;a href="https://www.youtube.com/watch?v=kCKkrYZq1l0"&gt;The transaction log for database 'DB' is full due to 'REPLICATION'&lt;/a&gt;, we look at this error and what it means along with some possible solutions (architecture dependent).  We do not want to develop the habit of micro-managing transaction logs, so we should consider sizing before setting up any architecture such as replication, ETL solutions, etc. As a note that's not mentioned in the video: since transactional replication uses the log and involves full recovery, we cannot switch to simple recovery without first disabling replication. Thus, we must be in a situation where we can make log adjustments if we cannot disable replication.&lt;/p&gt;

&lt;p&gt;Consider these in the context of the video:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is an activity that we should avoid with the log?&lt;/li&gt;
&lt;li&gt;Why is development around the log of a database so important?&lt;/li&gt;
&lt;li&gt;Considering that this is an error we may face at some point, what are some architecture considerations regarding the log when we're replicating data?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In general, everything in a database relies around the log. For this reason, we want to consider how we plan for log growth from when we first create our database. If we do not make these plans appropriate, we'll run into a myriad of problems involving the log. Our log growth will also dictate that type of transactions that we allow.  For this reason (and others), I would heavily monitor log growth for any database server where replication or availability groups are setup at minimum.  Monitoring log growth, if allowed (in some contexts), may be a requirement across the board, but it's especially true when we have availability groups and replication setup.&lt;/p&gt;

&lt;p&gt;One regular point I like to remind my audience, especially as of recent: we can often solve the same problem with a variety of techniques.  While we look at one or two ways to solve the problem, these aren't the only ways we can approach this problem. The most appropriate solution to a problem is one in which you can troubleshoot quickly in the future and one in which you understand.  In this case, prevention is more powerful than solving a problem at the last minute: the last minute solution will come with more costs (inconvenience).  Be careful about applying solutions that solve a problem, but introduce new problems in the future.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>sql</category>
      <category>database</category>
    </item>
  </channel>
</rss>
