Maison base de données tutoriel mysql Oracle 行迁移 & 行链接的检测与消除

Oracle 行迁移 & 行链接的检测与消除

Jun 07, 2016 pm 05:39 PM
oracle

什么是行迁移行链接?#以下描述来自Oracle11gR2Document1.行链接Therowistoolargetofitintoonedatablockwhenitisfirstinserted.Inrowchaining,OracleDatabasestor




什么是行迁移 & 行链接?



#     以下描述来自Oracle 11gR2 Document



1.       行链接


The row is too large to fit into one data block when it is first inserted.

In row chaining, Oracle Database stores the data for the row in a chain of one or more data blocks reserved for the segment. Row chaining most often occurs with large rows. Examples include rows that contain a column of data type LONG or LONG RAW, a VARCHAR2(4000) column in a 2 KB block, or a row with a huge number of columns. Row chaining in these cases is unavoidable.


2.       行迁移


A row that originally fit into one data block is updated so that the overall row length increases, but insufficient free space exists to hold the updated row.

In row migration, Oracle Database moves the entire row to a new data block, assuming the row can fit in a new block. The original row piece of a migrated row contains a pointer or "forwarding address" to the new block containing the migrated row. The rowid of a migrated row does not change.




本文的主题是消除行迁移,既然如此,那就必须先模拟出行迁移来:



--创建chained_rows表 SQL> @$ORACLE_HOME/rdbms/admin/utlchain.sql Table created. SQL> --创建测试表EMPLOYEES SQL> CREATE TABLE EMPLOYEES TABLESPACE TEST16K PCTFREE 0 AS SELECT * FROM HR.EMPLOYEES; Table created. SQL> COMMIT; Commit complete. SQL> --分析测试表EMPLOYEES SQL> analyze table employees list chained rows into chained_rows; Table analyzed. SQL> --查询可知当前测试表EMPLOYEES上不存在行迁移 SQL> select count(*) from chained_rows where table_name='EMPLOYEES'; COUNT(*) ---------- 0 SQL> --更新测试表EMPLOYEES结构 SQL> alter table employees modify FIRST_NAME varchar2(2000); Table altered. SQL> alter table employees modify LAST_NAME varchar2(2000); Table altered. SQL> alter table employees modify EMAIL varchar2(2000); Table altered. SQL> alter table employees modify PHONE_NUMBER varchar2(2000); Table altered. SQL> --更新测试表EMPLOYEES SQL> update employees set FIRST_NAME=LPAD('1',2000,'*'),LAST_NAME=LPAD('1',2000,'*'),EMAIL=LPAD('1',2000,'*'),PHONE_NUMBER=LPAD('1',2000,'*'); 107 rows updated. SQL> commit; Commit complete. SQL> --分析测试表EMPLOYEES SQL> analyze table employees list chained rows into chained_rows; Table analyzed. SQL> --查询可知已经产生行迁移 SQL> select count(*) from chained_rows where table_name='EMPLOYEES'; COUNT(*) ---------- 106 SQL> --行迁移模拟成功,我把这个过程保存为一个脚本reset_employees.sql: CREATE TABLE EMPLOYEES TABLESPACE TEST16K PCTFREE 0 AS SELECT * FROM HR.EMPLOYEES; alter table employees modify FIRST_NAME varchar2(2000); alter table employees modify LAST_NAME varchar2(2000); alter table employees modify EMAIL varchar2(2000); alter table employees modify PHONE_NUMBER varchar2(2000); update employees set FIRST_NAME=LPAD('1',2000,'*'),LAST_NAME=LPAD('1',2000,'*'),EMAIL=LPAD('1',2000,'*'),PHONE_NUMBER=LPAD('1',2000,'*'); --之后模拟行迁移直接执行这个脚本就OK了.



以上就生成了行迁移模拟脚本




第一种消除行迁移的方式:



--准备脚本Solution1.sql CREATE TABLE employees_tmp tablespace test16k AS SELECT * FROM employees WHERE ROWID IN (SELECT HEAD_ROWID FROM CHAINED_ROWS WHERE TABLE_NAME = 'EMPLOYEES'); DELETE FROM employees WHERE ROWID IN (SELECT HEAD_ROWID FROM CHAINED_ROWS WHERE TABLE_NAME = 'EMPLOYEES'); INSERT INTO EMPLOYEES SELECT * FROM EMPLOYEES_TMP; DROP TABLE EMPLOYEES_TMP; DELETE FROM CHAINED_ROWS WHERE TABLE_NAME = 'EMPLOYEES'; COMMIT; --执行脚本Solution1.sql SQL> @Solution1.sql Table created. 106 rows deleted. 106 rows created. Table dropped. 106 rows deleted. Commit complete. SQL> --分析测试表EMPLOYEES SQL> analyze table employees list chained rows into chained_rows; Table analyzed. SQL> --查询可知行迁移已经消除 SQL> select count(*) from chained_rows where table_name='EMPLOYEES'; COUNT(*) ---------- 0 SQL>




第二种消除行迁移的方式:



--清理测试环境 SQL> truncate table chained_rows; Table truncated. SQL> drop table employees; Table dropped. SQL> commit; Commit complete. SQL> --以上清理过程也保存为脚本clear_employees.sql: truncate table chained_rows; drop table employees; commit; --之后的清理工作都会使用这个脚本来进行 --模拟行迁移 SQL> @reset_employees.sql Table created. Table altered. Table altered. Table altered. Table altered. 107 rows updated. SQL> commit; Commit complete. SQL> --准备脚本Solution2.sql create table employees_tmp tablespace test16k as select * from employees; truncate table employees; insert into employees select * from employees_tmp; drop table employees_tmp; commit; --执行脚本Solution2.sql SQL> @Solution2.sql Table created. Table truncated. 107 rows created. Table dropped. Commit complete. SQL> --分析测试表EMPLOYEES SQL> analyze table employees list chained rows into chained_rows; Table analyzed. SQL> --查询可知行迁移已经消除 SQL> select count(*) from chained_rows where table_name='EMPLOYEES'; COUNT(*) ---------- 0 SQL>





Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Combien de temps les journaux de la base de données Oracle seront-ils conservés ? Combien de temps les journaux de la base de données Oracle seront-ils conservés ? May 10, 2024 am 03:27 AM

La durée de conservation des journaux de la base de données Oracle dépend du type de journal et de la configuration, notamment : Redo logs : déterminé par la taille maximale configurée avec le paramètre "LOG_ARCHIVE_DEST". Redo logs archivés : Déterminé par la taille maximale configurée par le paramètre "DB_RECOVERY_FILE_DEST_SIZE". Redo logs en ligne : non archivés, perdus au redémarrage de la base de données et la durée de conservation est cohérente avec la durée d'exécution de l'instance. Journal d'audit : Configuré par le paramètre "AUDIT_TRAIL", conservé 30 jours par défaut.

Fonction pour calculer le nombre de jours entre deux dates dans Oracle Fonction pour calculer le nombre de jours entre deux dates dans Oracle May 08, 2024 pm 07:45 PM

La fonction dans Oracle pour calculer le nombre de jours entre deux dates est DATEDIFF(). L'utilisation spécifique est la suivante : Spécifiez l'unité d'intervalle de temps : intervalle (tel que jour, mois, année) Spécifiez deux valeurs de date : date1 et date2DATEDIFF(interval, date1, date2) Renvoie la différence en jours

L'ordre des étapes de démarrage de la base de données Oracle est L'ordre des étapes de démarrage de la base de données Oracle est May 10, 2024 am 01:48 AM

La séquence de démarrage de la base de données Oracle est la suivante : 1. Vérifiez les conditions préalables ; 2. Démarrez l'écouteur ; 3. Démarrez l'instance de base de données ; 4. Attendez que la base de données s'ouvre ; 6. Vérifiez l'état de la base de données ; . Activez le service (si nécessaire) ; 8. Testez la connexion.

Comment utiliser l'intervalle dans Oracle Comment utiliser l'intervalle dans Oracle May 08, 2024 pm 07:54 PM

Le type de données INTERVAL dans Oracle est utilisé pour représenter les intervalles de temps. La syntaxe est INTERVAL <precision> <unit> Vous pouvez utiliser des opérations d'addition, de soustraction, de multiplication et de division pour utiliser INTERVAL, ce qui convient aux scénarios tels que le stockage de données temporelles et. calculer les différences de dates.

Comment déterminer si deux chaînes sont contenues dans Oracle Comment déterminer si deux chaînes sont contenues dans Oracle May 08, 2024 pm 07:00 PM

Dans Oracle, vous pouvez utiliser la fonction INSTR imbriquée pour déterminer si une chaîne contient deux sous-chaînes en même temps : lorsque INSTR(string1, string2a) est supérieur à 0 et INSTR(string1, string2b) est supérieur à 0, il est inclus ; sinon, il n'est pas inclus.

Comment voir le nombre d'occurrences d'un certain caractère dans Oracle Comment voir le nombre d'occurrences d'un certain caractère dans Oracle May 09, 2024 pm 09:33 PM

Pour trouver le nombre d'occurrences d'un caractère dans Oracle, effectuez les étapes suivantes : Obtenez la longueur totale d'une chaîne ; Obtenez la longueur de la sous-chaîne dans laquelle un caractère apparaît. Comptez le nombre d'occurrences d'un caractère en soustrayant la longueur de la sous-chaîne ; de la longueur totale.

Exigences de configuration matérielle du serveur de base de données Oracle Exigences de configuration matérielle du serveur de base de données Oracle May 10, 2024 am 04:00 AM

Exigences de configuration matérielle du serveur de base de données Oracle : Processeur : multicœur, avec une fréquence principale d'au moins 2,5 GHz Pour les grandes bases de données, 32 cœurs ou plus sont recommandés. Mémoire : au moins 8 Go pour les petites bases de données, 16 à 64 Go pour les tailles moyennes, jusqu'à 512 Go ou plus pour les grandes bases de données ou les charges de travail lourdes. Stockage : disques SSD ou NVMe, matrices RAID pour la redondance et les performances. Réseau : réseau haut débit (10GbE ou supérieur), carte réseau dédiée, réseau à faible latence. Autres : alimentation stable, composants redondants, système d'exploitation et logiciels compatibles, dissipation thermique et système de refroidissement.

De quelle quantité de mémoire Oracle a-t-il besoin ? De quelle quantité de mémoire Oracle a-t-il besoin ? May 10, 2024 am 04:12 AM

La quantité de mémoire requise par Oracle dépend de la taille de la base de données, du niveau d'activité et du niveau de performances requis : pour le stockage des tampons de données, des tampons d'index, l'exécution d'instructions SQL et la gestion du cache du dictionnaire de données. Le montant exact dépend de la taille de la base de données, du niveau d'activité et du niveau de performances requis. Les meilleures pratiques incluent la définition de la taille SGA appropriée, le dimensionnement des composants SGA, l'utilisation d'AMM et la surveillance de l'utilisation de la mémoire.

See all articles