Thursday, June 22, 2023

Deadlock

Örnek
Şöyle yaparız
-- Transaction A
BEGIN;
UPDATE Orders SET Quantity = Quantity - 1 WHERE OrderID = 1;
-- Now Transaction A needs to update Customers
UPDATE Customers SET TotalOrders = TotalOrders + 1 WHERE CustomerID = 1;
COMMIT;

-- Transaction B
BEGIN;
UPDATE Customers SET TotalOrders = TotalOrders - 1 WHERE CustomerID = 1;
-- Now Transaction B needs to update Orders
UPDATE Orders SET Quantity = Quantity + 1 WHERE OrderID = 1;
COMMIT;
Açıklaması şöyle
In this example, if Transaction A and Transaction B are executed concurrently and the timing is such that Transaction A locks the Orders table and Transaction B locks the Customers table before either has a chance to commit, a deadlock will occur.

Monday, April 3, 2023

Sunday, April 2, 2023

TestContainers MSSQLServerContainer Sınıfı

Maven
Şöyle yaparız
<dependency>
  <groupId>org.testcontainers</groupId>
  <artifactId>mssqlserver</artifactId>
  <version>1.18.10</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>com.microsoft.sqlserver</groupId>
  <artifactId>mssql-jdbc</artifactId>
  <version>11.2.2.jre8</version>
  <scope>test</scope>
</dependency>
Örnek
Şöyle yaparız
@Container
private static final MSSQLServerContainer<?> SQLSERVER_CONTAINER =
 new MSSQLServerContainer<>("mcr.microsoft.com/mssql/server:2022-latest").acceptLicense();
acceptLicense metodu
Örnek
Şöyle yaparız
MSQLServerContainer mssqlserver = new MSSQLServerContainer<>(...).acceptLicense();
getDatabaseName metodu
UnsupportedOperationException fırlatıyor. Neden bilmiyorum

withDatabaseName metodu
UnsupportedOperationException fırlatıyor. Neden bilmiyorum
 
withUrlParam metodu
Örnek
Şöyle yaparız
MSSQLServerContainer<> container = 
  new MSSQLServerContainer<>("mcr.microsoft.com/mssql/server:2017-CU12");
container.withUrlParam("user", container.getUsername())
         .withUrlParam("password", container.getPassword());
container.start();
String jdbcUrl = container.getJdbcUrl();
withStartupCheckStrategy metodu
Örnek
Şöyle yaparız
new MSSQLServerContainer<>("mcr.microsoft.com/mssql/server:2017-latest")
  .withStartupCheckStrategy(
    new MinimumDurationRunningStartupCheckStrategy(Duration.ofSeconds(5)));




Testcontainers JDBC URL Kullanımı

Giriş
src/test/resources/container-license-acceptance.txt dosyası yaratılır. Dosyada
mcr.microsoft.com/mssql/server:2017-CU12 
veya
mcr.microsoft.com/mssql/server:latest
cümlesi yazar

Örnek
Şöyle yaparız
<dependency>
  <groupId>org.testcontainers</groupId>
  <artifactId>mssqlserver</artifactId>
  <version>1.17.6</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>com.microsoft.sqlserver</groupId>
  <artifactId>mssql-jdbc</artifactId>
  <version>11.2.2.jre8</version>
  <scope>test</scope>
</dependency>
Şöyle yaparız
String jdbcUrl = "jdbc:tc:sqlserver:latest:///mydbName";
try (Connection conn = DriverManager.getConnection(jdbcUrl)) {
  ...
}
Şöyle yaparız
String jdbcUrl = "jdbc:tc:sqlserver:2017-CU12:///mydbName";
try (Connection conn = DriverManager.getConnection(jdbcUrl)) {
  ...
}

Wednesday, March 29, 2023

CHARINDEX Metodu

Giriş
Büyük küçük harf duyarlı değildir

Örnek
Şöyle yaparız
Select CHARINDEX('m','isMail.')
3


Thursday, February 23, 2023

SET QUOTED_IDENTIFIER Değişkeni

Giriş
SET QUOTED_IDENTIFIER OFF ile Tablo ve Sütun isimleri etrafında double quote kullanılamaz

Örnek - Off
Şöyle yaparız
SET QUOTED_IDENTIFIER OFF
GO

-- Create statement fails.
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);
GO
Örnek - ON
Şöyle yaparız
SET QUOTED_IDENTIFIER ON;
GO

-- Create statement succeeds.
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);
GO

SELECT "identity","order"
FROM "select"
ORDER BY "order";
GO

DROP TABLE "SELECT";
GO

SET QUOTED_IDENTIFIER OFF;
GO

Sütun Tipleri - NVARCHAR - UNICODE Karakterler İçindir

Giriş
VARCHAR ile aynıdır. İsminde N olduğu için UNICODE karakterler içindir

Örnek
Şöyle yaparız
CREATE TABLE book (
    id BIGINT NOT NULL PRIMARY KEY,
    isbn VARCHAR(15),
    properties NVARCHAR(4000) CHECK(
        ISJSON(properties) = 1
    )
)
Açıklaması şöyle
Notice that the properties column type is NVARCHAR(4000), and we defined a column-level constraint check which uses the ISJSON SQL Server function to validate whether the properties column is storing a proper JSON object.

VSS vs. VDI Backup

Giriş İlk olarak burada gördüm 1.Volume Shadow Copy Service (VSS) Sanırım Windows diskin kopyasını alıyor 2. Virtual Device Interface (VDI)...