PHOENIX -- Trevor Cahill pitched seven effective innings to win for the first time in nearly four months.
Normally, it would have been the story of the night.
Instead, it became a side note to Arizona's hitting display and Colorado's side show.
David Peralta hit a grand slam and Arizona tied a team record with eight hits in a nine-run eighth inning, turning what had been a close game into a 14-4 laugher over the bumbling Colorado Rockies on Saturday night.
"Hitting is contagious," Arizona's Cliff Pennington said. "It's just one of those where guys get a couple of hits, you feel good and things start to roll."
It just took a little while to get there.
Cahill (2-8) did his job, overcoming a shaky defensive first inning by the Diamondbacks to win for the first time since April 23.
Jorge De La Rosa (11-8) settled down after giving up a three-run homer to Mark Trumbo in the third inning, and Nolan Arenado, who had three RBIs, pulled Colorado within a run on a solo homer in the eighth.
By the time the bottom half was over, the Diamondbacks' bats had exploded and the Rockies had imploded.
The Rockies had two errors, a wild pitch and a passed ball in the inning. They also walked in a run.
The Diamondbacks fed off their mistakes and each other, lashing balls all over Chase Field.
Arizona had 15 hits, including seven for extra bases. Trumbo finished with four RBIs. Alfredo Marte added a solo homer. Pennington had three hits and scored four runs.
Peralta, who had a run-scoring double in the first inning, put a big punctuation mark on the inning, sending his first career grand slam over the pool in right-center, leaving even the home fans a bit stunned.
When Rockies manager Walt Weiss called a team meeting before the game, this probably wasn't the kind of response he was expecting.
"I didn't say abracadabra or anything," said Weiss, whose team has lost eight of nine. "I didn't say any magic words. I just tried to give them some perspective on where we are at."
After shaky start to the season, Cahill had pitched well lately, but Saturday's game got off to an ominous start.
Colorado scored a run in the first inning when Marte misplayed Arenado's double in the left corner and Cahill dropped a throw from Trumbo at first to allow another run to come across.
Cahill was sharp after that, allowing three runs on four hits. He struck out seven for his first win as a starter since last Sept. 21 at Colorado.
"Anytime if I'm pitching and the team wins, it's a good day," Cahill said. "It felt good."
The Rockies pulled within a run on Arenado's homer in the eighth inning, but his throw to home on Trumbo's chopper in the bottom half sailed high for an error, allowing two runs to score.
Arizona poured it on from there, compounding Colorado's mistakes by knocking the ball around the park.
Peralta was called up on June 1 and immediately started hitting. He hasn't really stopped. The rookie has set a club record with 67 hits through his first 56 games and has had at least two hits 25 times. He also became the first Diamondbacks rookie with at least five RBIs in a game since Mark Reynolds on Aug. 30, 2007 at San Diego.
The Diamondbacks had eight hits in an inning eight other times, most recently on May 28 in the first against San Diego. The nine runs tied for second-most in team history behind a 13-run inning against Pittsburgh in 2010.
Rockies: RF Michael Cuddyer, out since fracturing his shoulder on June 5, went 1-for-3 with an RBI for rookie-level Grand Junction in his latest rehab game. He is 6-for-10 with three doubles and four RBIs in three rehab games.
Diamondbacks: SS Chris Owings tested his bruised shoulder with 30 swings in the batting cage and is hoping to progress to a simulated game.
Rockies: Franklin Morales, who will start the series final on Sunday, has held left-handers to a .232 average.
Diamondbacks: LHP Wade Miley had his worst start of the season his last time out, allowing 10 runs in 4 2-3 innings against Kansas City on Aug. 5.