MDF גיבוי נתונים
-
טוב, אז נלך במהלך ששחזור הוא יהיה מחיקת הטבלה המקורית ושינוי שם לטבלת הגיבוי, כעת אין לי בעיה עם ה 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)