巧用flashback database实现灵活的数据切换
按照一般的情况下,我们是建议对测试生产环境做一个备份,采用expdp即可,然后清空对应schema下的数据,然后倒入需要重现问题的数
客户今天有一个需求,因为开发现在在生产环境中遇到了一些困难,需要在测试生产环境中复现问题,这样就需要从生产环境抽取出一些数据,可能数据量相对比较小,有个1G左右。需要把这些数据加载到测试生产环境中,还是来张图更加清晰。我们需要把图中右边部分的生产环境中抽取部分数据导入到测试生产环境中,这里所说的测试生产环境是按照生产环境的结构来复制的。测试环境已经有一些测试数据,,很可能和生产环境中的数据冲突。
就如同图中下面的部分列出的细节一样,很可能会存在数据冲突导致数据加载出现问题。
按照一般的情况下,我们是建议对测试生产环境做一个备份,采用expdp即可,然后清空对应schema下的数据,然后倒入需要重现问题的数据。问题复现之后,可以使用备份把数据恢复回来。
但是这种固有的思想还是存在一定的问题。
客户反馈的情况如下,说对应的schema下的数据量是相当大的,差不多2T多,如果做备份也是需要不少的空间,导出导入都是相当消耗时间和资源的。
OWNER SUM(BYTES)/1024/1024
------------------------------ --------------------
APPO 2144666.63
这套环境借用的时间为3天,所以相对来说测试环境的高可用要求就没那么高了。
我们可以尝试采用flashback database来完成这种需求。
使用flashback database会有一些的顾虑和隐患,比如闪回时间的考虑,如果考虑不周很可能达不到预期的效果。
数据库中默认是不会启用闪回数据库功能的,需要启用,完成数据恢复之后,再禁用,这些过程都是需要停库启库的,对于中间件来说就需要重新启动,需要和开发测试部分做协调,是否同意这种方式。
数据库做闪回操作之后,闪回到了数据清除前的状态,这个时候如果要打开数据库,是需要使用open resetlogs这种方式的,这样的话这个时间点之前的备份就失效了。也需要做确认,确保不会出现业务上意料之外的情况。
很快得到了回复,看来对于这种方式大家也是认可的,毕竟能够免去大量的备份和数据导入导出之苦。操作上也相对比较方便。
我们使用下面的脚本来简单模拟一下。我们创建一个表,然后启用flashback database功能,做truncate操作,然后导入一些新的数据,之后再做闪回数据库操作,闪回到truncate之前的数据情况,最后启用数据库即可。
修改闪回保留的时间,默认是1440分钟,即24小时
SQL> show parameter flashback
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 1440
我们创建了一个表,大小为2G左右,这样能够简单验证一下闪回日志的增长情况。
SQL> select segment_name,bytes from user_segments where segment_name='AA';
SEGMENT_NAME BYTES
--------------- ----------
AA 2153775104
SQL> SELECT COUNT(*)FROM AA;
COUNT(*)
----------
18340352
我们开始启用闪回数据库功能。
SQL> shutdown immediate
Database closed.
Database dismounted.
Oracle instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 435224576 bytes
Fixed Size 1337044 bytes
Variable Size 272632108 bytes
Database Buffers 155189248 bytes
Redo Buffers 6066176 bytes
Database mounted.
SQL> alter database flashback on;
Database altered.
SQL>
SQL> alter database open;
Database altered.
启用之后,得到一个时间戳,一次来作为我们完成闪回的时间点。
select systimestamp from dual;
接着我们来做一个清理工作。
SQL> truncate table aa;
Table truncated.
我们尝试插入一部分
SQL> insert into aa select*from all_objects;
71642 rows created.
SQL> commit;
Commit complete.
这个数据量相比原本的2G就小了很多。
然后我们尝试使用闪回数据库功能,闪回到删除之前的状态。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down
SQL> startup mount;
ORACLE instance started.
Total System Global Area 435224576 bytes
Fixed Size 1337044 bytes
Variable Size 272632108 bytes
Database Buffers 155189248 bytes
Redo Buffers 6066176 bytes
Database mounted.
SQL> Flashback database to timestamp to_timestamp('2015-04-17 17:42:29','yyyy-mm-dd hh24:mi:ss');
Flashback complete.
以只读方式打开,做验证,保证闪回没有问题。
SQL> alter database open read only;
Database altered.
SQL> conn n1/n1
Connected.
SQL> select count(*)from aa;
COUNT(*)
----------
18340352

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











完全なテーブルスキャンは、MySQLでインデックスを使用するよりも速い場合があります。特定のケースには以下が含まれます。1)データボリュームは小さい。 2)クエリが大量のデータを返すとき。 3)インデックス列が高度に選択的でない場合。 4)複雑なクエリの場合。クエリプランを分析し、インデックスを最適化し、オーバーインデックスを回避し、テーブルを定期的にメンテナンスすることにより、実際のアプリケーションで最良の選択をすることができます。

INNODBのフルテキスト検索機能は非常に強力であり、データベースクエリの効率と大量のテキストデータを処理する能力を大幅に改善できます。 1)INNODBは、倒立インデックスを介してフルテキスト検索を実装し、基本的および高度な検索クエリをサポートします。 2)一致を使用してキーワードを使用して、ブールモードとフレーズ検索を検索、サポートします。 3)最適化方法には、単語セグメンテーションテクノロジーの使用、インデックスの定期的な再構築、およびパフォーマンスと精度を改善するためのキャッシュサイズの調整が含まれます。

はい、MySQLはWindows 7にインストールできます。MicrosoftはWindows 7のサポートを停止しましたが、MySQLは引き続き互換性があります。ただし、インストールプロセス中に次のポイントに注意する必要があります。WindowsのMySQLインストーラーをダウンロードしてください。 MySQL(コミュニティまたはエンタープライズ)の適切なバージョンを選択します。インストールプロセス中に適切なインストールディレクトリと文字セットを選択します。ルートユーザーパスワードを設定し、適切に保ちます。テストのためにデータベースに接続します。 Windows 7の互換性とセキュリティの問題に注意してください。サポートされているオペレーティングシステムにアップグレードすることをお勧めします。

クラスター化されたインデックスと非クラスター化されたインデックスの違いは次のとおりです。1。クラスター化されたインデックスは、インデックス構造にデータを保存します。これは、プライマリキーと範囲でクエリするのに適しています。 2.非クラスター化されたインデックスストアは、インデックスキー値とデータの行へのポインターであり、非プリマリーキー列クエリに適しています。

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

MySQLは、Bツリー、ハッシュ、フルテキスト、および空間の4つのインデックスタイプをサポートしています。 1.B-Treeインデックスは、等しい値検索、範囲クエリ、ソートに適しています。 2。ハッシュインデックスは、等しい値検索に適していますが、範囲のクエリとソートをサポートしていません。 3.フルテキストインデックスは、フルテキスト検索に使用され、大量のテキストデータの処理に適しています。 4.空間インデックスは、地理空間データクエリに使用され、GISアプリケーションに適しています。

MySQLデータベースでは、ユーザーとデータベースの関係は、アクセス許可と表によって定義されます。ユーザーには、データベースにアクセスするためのユーザー名とパスワードがあります。許可は助成金コマンドを通じて付与され、テーブルはCreate Tableコマンドによって作成されます。ユーザーとデータベースの関係を確立するには、データベースを作成し、ユーザーを作成してから許可を付与する必要があります。

MySQLとMariaDBは共存できますが、注意して構成する必要があります。重要なのは、さまざまなポート番号とデータディレクトリを各データベースに割り当て、メモリ割り当てやキャッシュサイズなどのパラメーターを調整することです。接続プーリング、アプリケーションの構成、およびバージョンの違いも考慮する必要があり、落とし穴を避けるために慎重にテストして計画する必要があります。 2つのデータベースを同時に実行すると、リソースが制限されている状況でパフォーマンスの問題を引き起こす可能性があります。
