ดำเนินการสืบค้นโดยอัตโนมัติใน MS SQL Studio ทุกชั่วโมง


13

ฉันสนับสนุนแอปพลิเคชันในองค์กรขนาดใหญ่หนึ่งในบทบาทของฉันคือการล้างข้อมูล มีแบบสอบถามที่ฉันต้องดำเนินการทุกชั่วโมงและฉันต้องการจะทำมันโดยอัตโนมัติ เนื่องจากนโยบายองค์กรฉันไม่สามารถสร้างงาน SQL Server Agent หรือแก้ไขสคีมาได้ฉันสามารถจัดการข้อมูลได้เท่านั้น

ไม่มีที่สิ้นสุด

WHILE(1=1)
BEGIN 
WAITFOR DELAY '01:00';
--do work
END

ทำงานให้ฉันได้ แต่ฉันยักความคิดเกี่ยวกับการเชื่อมต่อแบบเปิดโล่ง

เป็นการดีที่ฉันจะสคริปต์ MS SS ตัวเองเพื่อรันชิ้นส่วนของรหัสที่กำหนดทุกชั่วโมง แต่ฉันไม่แน่ใจว่าเป็นไปได้

มีวิธีแก้ไขปัญหานี้หรือไม่?


1
คุณสามารถใช้ Windows sceduler บนพีซีของคุณได้หรือไม่?
sepupic

12
ถามใครสักคนที่ได้รับอนุญาตให้จัดตารางเวลาให้คุณ
นาย Magoo

@sepupic นั่นคือดินแดนแห่งการวิจัยต่อไปของฉันหากไม่มีสิ่งใดใน MS SS สามารถช่วยฉันได้
Ivan Koshelev

ฉันเห็นด้วย. ฉันรู้สึกไม่สบายใจที่ใช้รหัสวนลูปในคอมพิวเตอร์ไคลเอนต์ของฉัน จะเกิดอะไรขึ้นถ้าพีซีของคุณขัดข้องบางคนถอดปลั๊กออก ฯลฯ ฉันทำงานในสภาพแวดล้อมที่คล้ายกันซึ่งงาน SQL ไม่สามารถใช้ได้กับทีมงานแอป - เพราะเรามีตัวเลือกอื่นในการใช้AutoSysหรือเครื่องมือตั้งเวลาอื่นที่ทำงานบนเซิร์ฟเวอร์แอปพลิเคชัน ลองและค้นหาว่ามีการจัดการงานที่กำหนดเวลาไว้อย่างไร วิธีแก้ปัญหาอื่นอาจจะใช้SQL Server Reporting Services ? ไม่เหมาะหรอกที่ฉันรู้ ...
เทอร์รี่ C

9
ทางออกที่ถูกต้องคือไปที่ DBA และให้พวกเขาสร้างงานตัวแทนของเซิร์ฟเวอร์ SQL เพื่อเรียกใช้การล้างข้อมูลนี้ทุกชั่วโมง จากนั้นก็หาว่าทำไมคุณได้รับข้อมูลในฐานข้อมูลที่ตอบสนองความต้องการ "ทำความสะอาด" จึงมักจะได้รับและที่คงที่
alroc

คำตอบ:


22

เพื่อนของคุณคือsqlcmd (Microsoft Technet)

  1. สร้างไฟล์ SQL ด้วยสคริปต์ที่จำเป็นในการรันงานการล้างข้อมูลของคุณ
  2. เรียกใช้สคริปต์ด้วย sqlcmd.exe และพารามิเตอร์ที่จำเป็น
  3. สร้าง Windows Scheduled Task และเพิ่มคำสั่งพร้อมพารามิเตอร์ที่จำเป็นทั้งหมด

เช่น

sqlcmd -d YOUR_DB -E -i YOUR_SCRIPT.SQL -o OUTPUTFILE.TXT 

โชคดี.


4
ตรวจสอบให้แน่ใจว่าสคริปต์เหล่านี้วางอยู่บนเซิร์ฟเวอร์แอพ / เครื่องมือที่เหมาะสมพร้อมกับงานที่กำหนดเวลาไว้และไม่ใช่คอมพิวเตอร์สำหรับการพัฒนา
GER

7

คุณไม่จำเป็นต้องใช้ Studio จัดการเพื่อดำเนินการค้นหา

หากคุณไม่มีตัวเลือกที่จะให้ใครสักคนจัดตารางงานให้กับคุณจริงๆคุณควรพิจารณา sqlcmd ดังที่ระบุไว้ในคำตอบของ hot2use

หากคุณอยู่ในรุ่นที่ไม่ได้รับการสนับสนุน (เนื่องจากคุณไม่ได้ระบุรุ่น) นอกจากนี้ยังมีosqlซึ่งเป็นไคลเอ็นต์บรรทัดคำสั่ง แต่เครื่องมือนั้นเลิกใช้แล้ว

จากนั้นคุณสามารถกำหนดเวลาคำสั่งโดยใช้ตัวจัดตารางเวลาใดก็ได้ที่คุณต้องการ (เช่นตัวกำหนดเวลางานของ Windows) และเรียกใช้สิ่งนี้:

OSQL -E -i c:\temp\dowork.sql

ดูเอกสารประกอบเพื่อดูว่าคุณมีตัวเลือกใดสำหรับการเลือกเซิร์ฟเวอร์และการรับรองความถูกต้อง


-1

ใช้ "ตัวแทนเซิร์ฟเวอร์ SQL" ซึ่งพบในสตูดิโอ MS SQL (ใน explorer วัตถุขยายเซิร์ฟเวอร์ของคุณและควรเป็นปกติที่ด้านล่างของรายการ) น่าจะเป็นทางออกที่ดีที่สุดของคุณ

สิ่งนี้จะสร้างงานที่สามารถตั้งค่าให้ทำงานตามช่วงเวลาที่กำหนด งานจะทำงานเป็นบริการบนเซิร์ฟเวอร์มากกว่าลูกค้า ซึ่งหมายความว่าหากลูกค้าของคุณยกเลิกการเชื่อมต่อจะยังคงทำงานและหากเซิร์ฟเวอร์รีบูท (ไม่ทราบสาเหตุ) งานจะยังคงทำงานต่อไปโดยที่คุณไม่จำเป็นต้องเริ่มต้นใหม่อีกครั้ง

ข้อเสียคือคุณอาจต้องใช้สิทธิ์การเข้าถึงที่สูงขึ้นเพื่อให้สามารถทำสิ่งนี้ได้


3
คุณอาจมองข้ามคำถามนี้: เนื่องจากนโยบายขององค์กรฉันไม่สามารถสร้างงานตัวแทนของเซิร์ฟเวอร์ SQL [... ]
Andriy M

@Andriy: มันยังคงเป็นคำตอบที่ถูกต้อง เราไม่ควรให้ความช่วยเหลือผู้คนในการทำเงาไอทีตอบโต้ความต้องการขององค์กรของพวกเขา
Dylan Knoll

1
@DylanKnoll: ดีฉันคิดว่ามันจะเหมาะสมสำหรับผู้ตอบรับที่จะยอมรับ OP ของการกล่าวถึงนโยบายและรวมถึงการขัดแย้งกับความโง่เขลาของมัน (เช่นตามความคิดเห็นของคุณเป็นต้น) แต่ "ไม่ควรช่วย"? ตัวเลือกที่แนะนำและได้รับการยอมรับไม่ได้ดูเลวร้ายเกินไปดังนั้นการยึดติดกับหลักการจะดูรุนแรงเล็กน้อยในกรณีนี้
Andriy M

ฉันได้รับคะแนนของคุณเช่นกัน แต่สิ่งที่เกี่ยวกับมุมมอง DBAs? ฟังดูคล้ายกับว่ามีคนพยายามซ่อนความผิดพลาดในการออกแบบ DB ดังนั้นพวกเขาจึงไม่ได้ถูกเปิดเผย
Dylan Knoll

1
มันอ่าน "งานเซิร์ฟเวอร์ SQL" ก่อนที่จะถูกเปลี่ยนเป็น "งานตัวแทนเซิร์ฟเวอร์ SQL" ฉันไม่คิดว่าจะมีความหมายอื่นกับอดีตกว่าหลัง (มันไม่ใช่ OP ที่แก้ไขนั่นโดยวิธีนั้นมันเป็นคนที่เข้าใจคำผิดเล็กน้อยอย่างที่ฉันต้องการและแก้ไขมัน) ถ้อยคำดั้งเดิมแม้ว่าง่ายกว่าที่จะมองข้ามดังนั้น ไม่ทางใดก็ทางหนึ่งฉันยังคงยืนยันว่าเป็นการกำกับดูแลอยู่เคียงข้างคุณ :)
Andriy M
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.