diff --git a/core/command/db/generatechangescript.php b/core/command/db/generatechangescript.php
new file mode 100644
index 0000000000000000000000000000000000000000..f971124cfdc16b058a460c4b4957e2da5a7ab777
--- /dev/null
+++ b/core/command/db/generatechangescript.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Core\Command\Db;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class GenerateChangeScript extends Command {
+	protected function configure() {
+		$this
+			->setName('db:generate-change-script')
+			->setDescription('generates the change script from the current connected db to db_structure.xml')
+			->addArgument(
+				'schema-xml',
+				InputArgument::OPTIONAL,
+				'the schema xml to be used as target schema',
+				\OC::$SERVERROOT . '/db_structure.xml'
+			)
+		;
+	}
+
+	protected function execute(InputInterface $input, OutputInterface $output) {
+
+		$file = $input->getArgument('schema-xml');
+
+		$schemaManager = new \OC\DB\MDB2SchemaManager(\OC_DB::getConnection());
+
+		try {
+			$result = $schemaManager->updateDbFromStructure($file, true);
+			$output->writeln($result);
+		} catch (\Exception $e) {
+			$output->writeln('Failed to update database structure ('.$e.')');
+		}
+
+	}
+}
diff --git a/core/register_command.php b/core/register_command.php
index 1eed347b7b51f94b12442d84a15f38cdd014858a..683e7ae18337e8f5a1a2d15636f9ab707951a0d0 100644
--- a/core/register_command.php
+++ b/core/register_command.php
@@ -6,4 +6,6 @@
  * See the COPYING-README file.
  */
 
+/** @var $application Symfony\Component\Console\Application */
 $application->add(new OC\Core\Command\Status);
+$application->add(new OC\Core\Command\Db\GenerateChangeScript());
diff --git a/lib/private/db/mdb2schemamanager.php b/lib/private/db/mdb2schemamanager.php
index 8e76f46c78fba481265e22a8cab6c92204ae5382..fc13e881bfff1acd3cca95ff3cc11dae3c689369 100644
--- a/lib/private/db/mdb2schemamanager.php
+++ b/lib/private/db/mdb2schemamanager.php
@@ -53,7 +53,7 @@ class MDB2SchemaManager {
 	 * @param string $file file to read structure from
 	 * @return bool
 	 */
-	public function updateDbFromStructure($file) {
+	public function updateDbFromStructure($file, $generateSql = false) {
 		$sm = $this->conn->getSchemaManager();
 		$fromSchema = $sm->createSchema();
 
@@ -82,6 +82,10 @@ class MDB2SchemaManager {
 			$tableDiff->name = $platform->quoteIdentifier($tableDiff->name);
 		}
 
+		if ($generateSql) {
+			return $this->generateChangeScript($schemaDiff);
+		}
+
 		return $this->executeSchemaChange($schemaDiff);
 	}
 
@@ -147,4 +151,20 @@ class MDB2SchemaManager {
 		$this->conn->commit();
 		return true;
 	}
+
+	/**
+	 * @param \Doctrine\DBAL\Schema\Schema $schema
+	 * @return string
+	 */
+	public function generateChangeScript($schema) {
+
+		$script = '';
+		$sqls = $schema->toSql($this->conn->getDatabasePlatform());
+		foreach($sqls as $sql) {
+			$script .= $sql . ';';
+			$script .= PHP_EOL;
+		}
+
+		return $script;
+	}
 }