diff --git a/core/includes/database.inc b/core/includes/database.inc
index 6891ea92e1..1bdde6493d 100644
--- a/core/includes/database.inc
+++ b/core/includes/database.inc
@@ -645,6 +645,11 @@ function db_index_exists($table, $name) {
  * @see \Drupal\Core\Database\Schema::tableExists()
  */
 function db_table_exists($table) {
+  @trigger_error(
+    'db_table_exists() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Use $injected_database->schema()->tableExists($table) instead. See https://www.drupal.org/node/2947929.',
+    E_USER_DEPRECATED
+  );
+
   return Database::getConnection()->schema()->tableExists($table);
 }
 
diff --git a/core/includes/schema.inc b/core/includes/schema.inc
index 443cbf1934..dc1f123524 100644
--- a/core/includes/schema.inc
+++ b/core/includes/schema.inc
@@ -5,6 +5,8 @@
  * Schema API handling functions.
  */
 
+use Drupal\Core\Database\Database;
+
 /**
  * @addtogroup schemaapi
  * @{
@@ -133,10 +135,10 @@ function drupal_uninstall_schema($module) {
   $schema = drupal_get_module_schema($module);
   _drupal_schema_initialize($schema, $module, FALSE);
 
+  $database_schema = Database::getConnection()->schema();
   foreach ($schema as $table) {
-    if (db_table_exists($table['name'])) {
-      db_drop_table($table['name']);
-    }
+    // Internally dropTable() ensures that table exists.
+    $database_schema->dropTable($table['name']);
   }
 }
 
diff --git a/core/modules/simpletest/src/Tests/KernelTestBaseTest.php b/core/modules/simpletest/src/Tests/KernelTestBaseTest.php
index 1e9e75da0b..bcb1124ee2 100644
--- a/core/modules/simpletest/src/Tests/KernelTestBaseTest.php
+++ b/core/modules/simpletest/src/Tests/KernelTestBaseTest.php
@@ -62,7 +62,7 @@ public function testSetUp() {
     $this->assertIdentical(\Drupal::moduleHandler()->getImplementations('entity_type_alter'), ['entity_test']);
 
     // Verify that no modules have been installed.
-    $this->assertFalse(db_table_exists($table), "'$table' database table not found.");
+    $this->assertFalse(\Drupal::database()->schema()->tableExists($table), "'$table' database table not found.");
 
     // Verify that the settings.testing.php got taken into account.
     $this->assertTrue(function_exists('simpletest_test_stub_settings_function'));
@@ -114,7 +114,7 @@ public function testEnableModulesInstall() {
     $list = \Drupal::moduleHandler()->getImplementations('hook_info');
     $this->assertFalse(in_array($module, $list), "{$module}_hook_info() in \Drupal::moduleHandler()->getImplementations() not found.");
 
-    $this->assertFalse(db_table_exists($table), "'$table' database table not found.");
+    $this->assertFalse(\Drupal::database()->schema()->tableExists($table), "'$table' database table not found.");
 
     // Install the module.
     \Drupal::service('module_installer')->install([$module]);
@@ -126,7 +126,7 @@ public function testEnableModulesInstall() {
     $list = \Drupal::moduleHandler()->getImplementations('hook_info');
     $this->assertTrue(in_array($module, $list), "{$module}_hook_info() in \Drupal::moduleHandler()->getImplementations() found.");
 
-    $this->assertTrue(db_table_exists($table), "'$table' database table found.");
+    $this->assertTrue(\Drupal::database()->schema()->tableExists($table), "'$table' database table found.");
     $schema = drupal_get_module_schema($module, $table);
     $this->assertTrue($schema, "'$table' table schema found.");
   }
@@ -156,7 +156,7 @@ public function testInstallSchema() {
     $table = 'entity_test_example';
     // Verify that we can install a table from the module schema.
     $this->installSchema($module, $table);
-    $this->assertTrue(db_table_exists($table), "'$table' database table found.");
+    $this->assertTrue(\Drupal::database()->schema()->tableExists($table), "'$table' database table found.");
 
     // Verify that the schema is known to Schema API.
     $schema = drupal_get_module_schema($module, $table);
@@ -171,7 +171,7 @@ public function testInstallSchema() {
     catch (\Exception $e) {
       $this->pass('Exception for non-retrievable schema found.');
     }
-    $this->assertFalse(db_table_exists($table), "'$table' database table not found.");
+    $this->assertFalse(\Drupal::database()->schema()->tableExists($table), "'$table' database table not found.");
     $schema = drupal_get_module_schema($module, $table);
     $this->assertFalse($schema, "'$table' table schema not found.");
 
@@ -185,14 +185,14 @@ public function testInstallSchema() {
     catch (\Exception $e) {
       $this->pass('Exception for non-retrievable schema found.');
     }
-    $this->assertFalse(db_table_exists($table), "'$table' database table not found.");
+    $this->assertFalse(\Drupal::database()->schema()->tableExists($table), "'$table' database table not found.");
     $schema = drupal_get_module_schema($module, $table);
     $this->assertTrue($schema, "'$table' table schema found.");
 
     // Verify that the same table can be installed after enabling the module.
     $this->enableModules([$module]);
     $this->installSchema($module, $table);
-    $this->assertTrue(db_table_exists($table), "'$table' database table found.");
+    $this->assertTrue(\Drupal::database()->schema()->tableExists($table), "'$table' database table found.");
     $schema = drupal_get_module_schema($module, $table);
     $this->assertTrue($schema, "'$table' table schema found.");
   }
@@ -206,7 +206,7 @@ public function testInstallEntitySchema() {
     $this->enableModules(['user']);
     // Verity that the entity schema is created properly.
     $this->installEntitySchema($entity);
-    $this->assertTrue(db_table_exists($entity), "'$entity' database table found.");
+    $this->assertTrue(\Drupal::database()->schema()->tableExists($entity), "'$entity' database table found.");
   }
 
   /**
diff --git a/core/modules/system/src/Tests/Module/ModuleTestBase.php b/core/modules/system/src/Tests/Module/ModuleTestBase.php
index cc5a7ef270..2d96a2d197 100644
--- a/core/modules/system/src/Tests/Module/ModuleTestBase.php
+++ b/core/modules/system/src/Tests/Module/ModuleTestBase.php
@@ -59,8 +59,9 @@ public function assertTableCount($base_table, $count = TRUE) {
   public function assertModuleTablesExist($module) {
     $tables = array_keys(drupal_get_module_schema($module));
     $tables_exist = TRUE;
+    $schema = \Drupal::database()->schema();
     foreach ($tables as $table) {
-      if (!db_table_exists($table)) {
+      if (!$schema->tableExists($table)) {
         $tables_exist = FALSE;
       }
     }
@@ -76,8 +77,9 @@ public function assertModuleTablesExist($module) {
   public function assertModuleTablesDoNotExist($module) {
     $tables = array_keys(drupal_get_module_schema($module));
     $tables_exist = FALSE;
+    $schema = \Drupal::database()->schema();
     foreach ($tables as $table) {
-      if (db_table_exists($table)) {
+      if ($schema->tableExists($table)) {
         $tables_exist = TRUE;
       }
     }
diff --git a/core/modules/system/tests/src/Functional/Database/TemporaryQueryTest.php b/core/modules/system/tests/src/Functional/Database/TemporaryQueryTest.php
index 5226585790..1e5f625e52 100644
--- a/core/modules/system/tests/src/Functional/Database/TemporaryQueryTest.php
+++ b/core/modules/system/tests/src/Functional/Database/TemporaryQueryTest.php
@@ -29,7 +29,7 @@ public function testTemporaryQuery() {
     $data = json_decode($this->getSession()->getPage()->getContent());
     if ($data) {
       $this->assertEqual($this->countTableRows('test'), $data->row_count, 'The temporary table contains the correct amount of rows.');
-      $this->assertFalse(db_table_exists($data->table_name), 'The temporary table is, indeed, temporary.');
+      $this->assertFalse(\Drupal::database()->schema()->tableExists($data->table_name), 'The temporary table is, indeed, temporary.');
     }
     else {
       $this->fail('The creation of the temporary table failed.');
diff --git a/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php b/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php
index abdbe03916..ad3faec788 100644
--- a/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php
+++ b/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php
@@ -56,8 +56,9 @@ public function assertTableCount($base_table, $count = TRUE) {
   public function assertModuleTablesExist($module) {
     $tables = array_keys(drupal_get_module_schema($module));
     $tables_exist = TRUE;
+    $schema = \Drupal::database()->schema();
     foreach ($tables as $table) {
-      if (!db_table_exists($table)) {
+      if (!$schema->tableExists($table)) {
         $tables_exist = FALSE;
       }
     }
@@ -73,8 +74,9 @@ public function assertModuleTablesExist($module) {
   public function assertModuleTablesDoNotExist($module) {
     $tables = array_keys(drupal_get_module_schema($module));
     $tables_exist = FALSE;
+    $schema = \Drupal::database()->schema();
     foreach ($tables as $table) {
-      if (db_table_exists($table)) {
+      if ($schema->tableExists($table)) {
         $tables_exist = TRUE;
       }
     }
diff --git a/core/tests/Drupal/KernelTests/Core/Database/RegressionTest.php b/core/tests/Drupal/KernelTests/Core/Database/RegressionTest.php
index 22173dae66..3bcaf2e441 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/RegressionTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/RegressionTest.php
@@ -37,6 +37,10 @@ public function testRegression_310447() {
 
   /**
    * Tests the db_table_exists() function.
+   *
+   * @group legacy
+   *
+   * @expectedDeprecation db_table_exists() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Use $injected_database->schema()->tableExists($table) instead. See https://www.drupal.org/node/2947929.
    */
   public function testDBTableExists() {
     $this->assertSame(TRUE, db_table_exists('test'), 'Returns true for existent table.');
diff --git a/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php b/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
index e239098715..0a10b05c37 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
@@ -55,7 +55,7 @@ public function testSchema() {
     db_create_table('test_table', $table_specification);
 
     // Assert that the table exists.
-    $this->assertTrue(db_table_exists('test_table'), 'The table exists.');
+    $this->assertTrue(\Drupal::database()->schema()->tableExists('test_table'), 'The table exists.');
 
     // Assert that the table comment has been set.
     $this->checkSchemaComment($table_specification['description'], 'test_table');
@@ -118,7 +118,7 @@ public function testSchema() {
 
     // Try to drop the table.
     db_drop_table('test_table2');
-    $this->assertFalse(db_table_exists('test_table2'), 'The dropped table does not exist.');
+    $this->assertFalse(\Drupal::database()->schema()->tableExists('test_table2'), 'The dropped table does not exist.');
 
     // Recreate the table.
     db_create_table('test_table', $table_specification);
@@ -254,7 +254,7 @@ public function testSchema() {
     }
     catch (\Exception $e) {
     }
-    $this->assertTrue(db_table_exists('test_timestamp'), 'Table with database specific datatype was created.');
+    $this->assertTrue(\Drupal::database()->schema()->tableExists('test_timestamp'), 'Table with database specific datatype was created.');
   }
 
   /**
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php b/core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php
index 7ff6caf2b1..12d4f148ea 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php
@@ -380,8 +380,9 @@ public function testFieldUpdateFailure() {
       $this->tableMapping->getDedicatedDataTableName($prior_field_storage),
       $this->tableMapping->getDedicatedRevisionTableName($prior_field_storage),
     ];
+    $schema = \Drupal::database()->schema();
     foreach ($tables as $table_name) {
-      $this->assertTrue(db_table_exists($table_name), t('Table %table exists.', ['%table' => $table_name]));
+      $this->assertTrue($schema->tableExists($table_name), t('Table %table exists.', ['%table' => $table_name]));
     }
   }
 
