MDF גיבוי נתונים
-
@דוד ל.ט.
השחזור הוא שאילתה שלך וממילא אתה שולט על כל חלקיק עדכון (אתה יכול לשחזר רק רבע עמודה).
את מתכוון לשאילתא כזו:
UPDATE tblName SET column1=value1, column2=value2 WHERE ID=1
בשיטה הזו צריך ללכת ID אחר ID ושדה אחר שדה וזה מצויין כשרוצים לשחזר חלק מהרשומות, אבל האם יש דרך לשחזר טבלה שלמה בשאילתא אחת שתחליף את כל הרשומות הקיימות ברשומות שבטבלה מהגיבוי ?
תודה.פשוט תחליף את שם הטבלה :lol: :lol: :lol:
פורסם במקור בפורום CODE613 ב21/01/2014 23:06 (+02:00)
-
בשיטה הזו צריך ללכת ID אחר ID ושדה אחר שדה וזה מצויין כשרוצים לשחזר חלק מהרשומות, אבל האם יש דרך לשחזר טבלה שלמה בשאילתא אחת שתחליף את כל הרשומות הקיימות ברשומות שבטבלה מהגיבוי ?
תודה.כן.
שאילתה די פשוטה.פורסם במקור בפורום CODE613 ב22/01/2014 11:17 (+02:00)
-
@דוד ל.ט.
כן.
שאילתה די פשוטה.פשוט תחליף את שם הטבלה
יש כמה דברים שמפריעים לכאורא:
- העמודה של ה ID היא אוטומטית כך שאי אפשר לתת לה ערך אלא רק המסד נותן ערך
- יש קשרי גומלין בחלק מהשדות
וכל זה בטבלה המקורית אבל הטבלה שבגיבוי היא ללא קשרים וללא ערכים אוטומטיים, אז כאשר אני מנסה להכניס את של זה בזה אני מקבל שגיאות.
דבר נוסף מן הסתם יש הבדל בכמות הרשומות בין הטבלה המקורית לבין טבלה שמהגיבוי וא''כ צריך להוסיף או למחוק רשומות ולא רק לעדכן.
מהסיבות של קישרי הגומלין לא יכולתי לעשות את הפתרון שנתן ClickOne דהיינו למחוק את הטבלה הישנה ולתת לטבלה של הגיבוי את השם של הטבלה המקורית.
גם עיינתי כאןולא ראיתי משהו שיכול לעזור.
פורסם במקור בפורום CODE613 ב22/01/2014 16:03 (+02:00)
-
הID זה טוב שא"א לשנות, זה רק עוזר לך.
הקשרי גומלין אני לא מבין מה מפריע להם, אבל תוכל להסירם ולהחזירם או להוריד את האכיפה מהם.בקשר לקישור שהבאת, יש שמה חידושים שיכולים לעזור מאוד לזה : http://stackoverflow.com/a/9241260/1271037
פורסם במקור בפורום CODE613 ב22/01/2014 17:04 (+02:00)
-
טוב, אז נלך במהלך ששחזור הוא יהיה מחיקת הטבלה המקורית ושינוי שם לטבלת הגיבוי, כעת אין לי בעיה עם ה ID וגם לא עם השורות יתרות או חסרות,
-
איך בדיוק אני יכול להסתדר עם הקשרי גומלין, שהרי כשאני מוחק את הטבלה המקורית כבר אני מקבל שגיאה כיון הטבלה המקורית היא טבלת אב לגבי טבלאות אחרות וה ID של הטבלה המקורית נמצא כמפתח זר בטבלאות אחרות?
-
ואם בשביל זה אני צריך לשנות את ההגדרות של הקשרי גומלין בכל הטבלאות המקשרות לטבלה המקורית, איך אני אעשה את זה, איך אדע באלו טבלאות מדובר ואיזה הגדרה צריך לשנות בקשר הגומלין?
-
ואיך בכלל משנים הגדרות של קשרי גומלין בשפת SQL?
-
ואחר שינוי השם של טבלת הגיבוי יהיה צריך גם להחזיר את ההגדרות של הקשרי גומלין בכל הטבלאות המקושורת.
תודה לכולם!
פורסם במקור בפורום CODE613 ב22/01/2014 18:30 (+02:00)
-
-
אז מצאתי את השאילתא הבאה כדי לקבל את כל הקשרי גומלין בהם הטבלה המקורית היא טבלת האב:
SELECT Main.TABLE_NAME AS ParentTable, Child.TABLE_NAME AS ChildTableName, Cons.COLUMN_NAME AS PKey_Column, RefCons.COLUMN_NAME AS ReferencingColumnName, rc.CONSTRAINT_NAME AS FK_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE AS Child INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS rc ON rc.CONSTRAINT_SCHEMA = Child.CONSTRAINT_SCHEMA AND rc.CONSTRAINT_NAME = Child.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE AS Main ON Main.CONSTRAINT_SCHEMA = rc.UNIQUE_CONSTRAINT_SCHEMA AND Main.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS RefCons ON RefCons.CONSTRAINT_SCHEMA = Child.CONSTRAINT_SCHEMA AND RefCons.CONSTRAINT_NAME = Child.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS Cons ON Cons.CONSTRAINT_SCHEMA = Main.CONSTRAINT_SCHEMA AND Cons.CONSTRAINT_NAME = Main.CONSTRAINT_NAME WHERE (Main.TABLE_NAME = N'שם הטבלה המקורית')
עריכה:
שיפצתי משמעותית את השאילתא.פורסם במקור בפורום CODE613 ב22/01/2014 18:46 (+02:00)
-
אני כבר יודע כמה שנים SQL ברמה בסיסית,
ותשמע לי, המהירות בה אתה רוצה לשלוט בעסק לדעתי גבוהה מהאפשרי.כמו"כ קשה לנסות לעזור להפצצות לא מסודרות שכאלו, מונחות מטרה (איך לגבות את המסד) מאשר לימוד (איך כותבים קשר גומלין בSQL SERVER).
תתרכז במה שאתה רוצה ללמוד, ותלמד צעד אחר צעד.
ואז באמת אשמח לעזור (ובעצם ללמוד איתך). כשאני עוזר כעת זה יותר לעבוד מאשר לעזור.אתה לא חייב בכלום להתייחס לדברי, ואין כאן שום פקודה, אלא ניסיון להסביר את עצמי אם אני לא "נחלץ לעזור".
פורסם במקור בפורום CODE613 ב22/01/2014 19:00 (+02:00)
-
תודה דוד אתה אלוף
אז בא נראה לאט לאט דבר ראשון איך יוצרים קשר גומלין בין טבלאות, ובמילים אחרות איך מגדירים שעמודה מסויימת בטבלה א' תהיה מפתח זר של המפתח הראשי של טבלה ב', והנה הקוד שמצאתי כאן:
ALTER TABLE Person.ContactBackup ADD CONSTRAINT FK_ContactBacup_Contact FOREIGN KEY (ContactID) REFERENCES Person.Person (BusinessEntityID) ;
פורסם במקור בפורום CODE613 ב22/01/2014 19:36 (+02:00)
-
שלב ג'
אחרי שאנו יודעים מה הם הקשרי הגומלין הקיימים ע''י השאילתא הארוכה הנ''ל, אנו יכולים למחוק את כל הקשרי גומלין השייכים לטבלה המקורית וכנ''ל בשלב ב'
אחר שאין קשרי גומלין אנו יכולים למחוק את הטבלה המקורית עצמה כך:DROP TABLE [שם הטבלה]
שלב ד'
כעת אפשר להחליף את השם של הטבלה מהגיבוי עם הקוד שכבר הוזכר, וליצור קשרי גומלין מחדש כנ''ל בשלב א'.שלב ה'
התגובות שלכם בבקשה...פורסם במקור בפורום CODE613 ב22/01/2014 19:46 (+02:00)
-
אולי אפשר שהתוכנה פשוט תעתיק את הקובץ כל ערב
ובמקרה הצורך הוא יוחלףניסיתי לעשות את זה אבל זה בלתי אפשרי כיון שהמסד נמצא בשימוש ואי אפשר להעתיק אותו רק לאחר שהתוכנה סגורה.
הדרך שאולי אפשרית זה ליצור יישום נפרד שתפקידו יהיה להעתיק את המסד, ומתוך התוכנה נפעיל את היישום הזה ומייד נסגור את התוכנה עצמה, היישום החיצוני יעתיק את המסד ושוב יפתח את התוכנה.פורסם במקור בפורום CODE613 ב26/01/2014 09:59 (+02:00)
-
@שמואל
אולי אפשר שהתוכנה פשוט תעתיק את הקובץ כל ערבובמקרה הצורך הוא יוחלף
ניסיתי לעשות את זה אבל זה בלתי אפשרי כיון שהמסד נמצא בשימוש ואי אפשר להעתיק אותו רק לאחר שהתוכנה סגורה.
הדרך שאולי אפשרית זה ליצור יישום נפרד שתפקידו יהיה להעתיק את המסד, ומתוך התוכנה נפעיל את היישום הזה ומייד נסגור את התוכנה עצמה, היישום החיצוני יעתיק את המסד ושוב יפתח את התוכנה.באמת מוזר, הרי windows יודע להעתיק קובץ שנמצא בשימוש, קריאה לא מפריעה רק כתיבה. ואילו במסד נתונים זה לא נותן משום מה. לא ברור איך להתגבר על זה. צריך לכאורה לנתק את כל השירותים של sql כדי לשחרר את הקובץ, ואז להפעיל אותם בחזרה, זה עניין של שבריר שניה, והמשתמשים אפילו לא ירגישו אני מקווה.
פורסם במקור בפורום CODE613 ב26/01/2014 10:16 (+02:00)
-
@רחמים
@שמואל
אולי אפשר שהתוכנה פשוט תעתיק את הקובץ כל ערבובמקרה הצורך הוא יוחלף
ניסיתי לעשות את זה אבל זה בלתי אפשרי כיון שהמסד נמצא בשימוש ואי אפשר להעתיק אותו רק לאחר שהתוכנה סגורה.
הדרך שאולי אפשרית זה ליצור יישום נפרד שתפקידו יהיה להעתיק את המסד, ומתוך התוכנה נפעיל את היישום הזה ומייד נסגור את התוכנה עצמה, היישום החיצוני יעתיק את המסד ושוב יפתח את התוכנה.באמת מוזר, הרי windows יודע להעתיק קובץ שנמצא בשימוש, קריאה לא מפריעה רק כתיבה. ואילו במסד נתונים זה לא נותן משום מה. לא ברור איך להתגבר על זה. צריך לכאורה לנתק את כל השירותים של sql כדי לשחרר את הקובץ, ואז להפעיל אותם בחזרה, זה עניין של שבריר שניה, והמשתמשים אפילו לא ירגישו אני מקווה.
תנסה להעתיק עם פונקציית API.
API מעתיק אפילו שהקובץ תפוס.פורסם במקור בפורום CODE613 ב26/01/2014 11:39 (+02:00)
-
@ClickOne
תנסה להעתיק עם פונקציית API.API מעתיק אפילו שהקובץ תפוס.
זה לא עובד אפילו בוינדווס עצמו העתק הדבק בלי API, ולא מצינו שכוחות של API עדיף מכוח האינטרפייס, זולתי בדוס......
אני סבור שהסיבה שהוא לא מעתיק זה לא מחוסר יכולת אלא מהנחה שזה לא טוב למשתמש, הוא יקבל קובץ בלתי ניתן לפתיחה או פגום, בהרבה מקרים, וגם לא מעודכן.
פורסם במקור בפורום CODE613 ב26/01/2014 13:19 (+02:00)
-
@דוד ל.ט.
@ארכיטקט
@ClickOne
תנסה להעתיק עם פונקציית API.API מעתיק אפילו שהקובץ תפוס.
זה לא עובד אפילו בוינדווס עצמו העתק הדבק בלי API, ולא מצינו שכוחות של API עדיף מכוח האינטרפייס, זולתי בדוס......
אני סבור שהסיבה שהוא לא מעתיק זה לא מחוסר יכולת אלא מהנחה שזה לא טוב למשתמש, הוא יקבל קובץ בלתי ניתן לפתיחה או פגום, בהרבה מקרים, וגם לא מעודכן.
לא. אם הוא לא מעתיק זה בגלל שווינדוס תופס את הקובץ. מייקרוסופט לא חשודים להבין עד כדי כך איזה קובץ המשתמש רוצה להעתיק ומה הוא רוצה לעשות איתו...
פורסם במקור בפורום CODE613 ב26/01/2014 13:34 (+02:00)
-
לא. אם הוא לא מעתיק זה בגלל שווינדוס תופס את הקובץ. מייקרוסופט לא חשודים להבין עד כדי כך איזה קובץ המשתמש רוצה להעתיק ומה הוא רוצה לעשות איתו...
When SQL services are running the SQLserver.exe process holds all the mdf/ldf files and will not let the users copy those files. Either perform any of the below
Detach the database
Take the database offline
Shutdown the SQL services and copy mdf / ldf files.פורסם במקור בפורום CODE613 ב26/01/2014 13:38 (+02:00)