Y a-t-il un moyen d'organiser une table qui n'existe que lorsque la base de données est en cours d'exécution et est uniquement stockée en mémoire? Donc, si la base de données est redémarrée, je devrai recréer la table? p>
EDIT: Je veux que les données persistent à travers les sessions. La raison étant que les données sont chères à recréer mais sont également très sensibles. P>
Utiliser une table temporaire aiderait probablement la performance par rapport à ce qui se passe aujourd'hui, mais ce n'est toujours pas une excellente solution. P>
5 Réponses :
Vous pouvez créer une table 100% éphémère utilisable pour la durée d'une session (généralement plus courte que la durée de la durée de la base de données) appelée table temporaire. Le but total d'une table en mémoire est de le rendre plus rapide à lire. Vous devrez ré-remplir la table pour chaque session car la table sera oubliée (structure et données) une fois la session terminée. P>
Utilisation d'Oracle Tables temporaires globales , vous pouvez créer une table dans mémoire et avoir-la supprimer les données à la fin de la transaction, ou la fin de la session. P>
Non exactement, non. Oracle a le concept d'une "table temporaire mondiale". Avec une table temporaire globale, vous créez la table une fois, comme avec une autre table. La définition de la table persistera de manière permanente, comme avec tout autre tableau. P>
Le contenu de la table, cependant, ne sera pas permanent. Selon la façon dont vous la définissez, le contenu persistera la vie de la session (sur validation des lignes persistera) ou de la durée de vie de la transaction (sur validez les lignes de suppression). P>
Voir la documentation pour tous les détails: http://docs.oracle.com/cd/e11882_01 /Server.112/e25494/tables003.htm#admin11633 P>
espère que cela aide. P>
Vous pouvez utiliser le mécanisme de déclenchement d'Oracle pour appeler une procédure stockée lorsque la base de données démarre ou s'arrête. P>
De cette façon, vous pourriez avoir la gâchette de démarrage créer la table et le déclencheur d'arrêt le goutte. P>
Vous voudrez probablement également que la gâchette de démarrage traite les cas où la table existe et le tronque tout au cas où le serveur s'est arrêté soudainement et que le déclencheur d'arrêt n'a pas été appelé. P>
J'aime cette approche avec une table non agitée. Je peux aussi utiliser le tampon_pool garder ci-dessus aussi.
Si je comprends correctement, vous avez des données qui doivent être traitées lorsque la base de données est mise en ligne et laissée disponible uniquement tant que la base de données est en ligne. Le seul cas possible, je peux penser que cela nécessiterait que cela soit si vous cryptez certaines données et que vous souhaitez vous assurer que les données non cryptées ne sont jamais écrites sur le disque. P>
S'il s'agit en réalité de votre cas d'utilisation, je recommanderais d'oublier d'essayer de créer votre propre solution pour cela et, à la place, d'utiliser Crypter les espaces de table ou cryptage de données transparentes . P>
Ne riez pas, mais les espaces cryptés de l'Oracle et TDE ont été considérés comme des risques de sécurité pour l'environnement dans lequel je travaille. C'est malheureusement en dehors de mon contrôle et j'ai déjà perdu le combat de les utiliser.
Autant que je sache, des tables temporaires à Oracle sont persistantes; Seules leurs données sont volatiles. Ce serait-il un problème pour vous?
C'est mon problème, je veux que les données soient à coller pendant que la base de données soit en place depuis la recréation des données coûte cher.
Quelle est votre intention? Qu'est-ce que tu veux faire?
Avez-vous essayé de déplacer la table dans la piscine tampon? S'il est coûteux de recréer pourquoi voulez-vous disparaître lorsque la base de données est en panne? Les tables normales restent là et vous n'avez pas besoin de les recréer au démarrage. Probablement je manque quelque chose.
Alter Tableau My_Table Stockage (Buffer_Pool Keeping);
On dirait que vous voulez que cette table soit tenue en mémoire et jamais i> écrit sur le disque, car vous ne souhaitez pas que les données sensibles soient à risque de divulgation pendant que la base de données est au repos, oui? Je ne connais aucun moyen à Oracle de garantir que les données ne sont pas écrites sur le disque. Même la mémoire peut être écrite dans le fichier d'échange, si l'instance Oracle n'est pas dimensionnée de manière appropriée pour le système.
Je ne suis pas expert oracle mais je me demande si vous pouvez créer un espace de table dans / dev / shm